Skip to content

Latest commit

 

History

History
 
 

12_crypto_regulation

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

Домашнее задание к занятию «Криптография: нормативное регулирование»

В качестве результата пришлите ответы на вопросы в личном кабинете студента на сайте netology.ru.

В каждом задании сформулирован один (или несколько вопросов), и вам нужно найти ответы в соответствующем нормативно-правовом акте (далее – НПА).

Обратите внимание:

  • там, где требуется указать понятие, необходимо привести это понятие целиком
  • там, где необходимо описать иное (например, ответить на вопрос "в течение какого времени", "какая ответственность" и т.д.) достаточно ответа собственными словами (как вы поняли) и указания номера статьи и пункта.

Обратите внимание, что справочная система КонсультантПлюс в бесплатной редакции не даёт копировать текст документа.

Важно: правовые системы предлагают платную подписку на комментарии, аналитические материалы и подборки ссылок. В рамках нашего курса платная подписка не требуется. Все ДЗ рассчитаны на работу исключительно с бесплатной версией. Поэтому, пожалуйста, нигде не вводите данные своих карт и т.д.

Задача №1

Вопросы:

  1. Что такое электронная подпись (далее - ЭП)?
  2. Какие виды ЭП существуют? Есть ли внутри видов дополнительное разделение (если да, то какое)?
  3. Изучите ответы Минцифры на вопросы по Электронным услугам для бизнеса и граждан и ответьте на следующий вопрос: может ли (если да, то в каких случаях и каким видом ЭП) адрес отправителя Email считаться ЭП?
  4. Какой орган является органом исполнительной власти, уполномоченным в сфере использования ЭП?

Ответ для каждого пункта предоставляйте в формате:

На основании документа <название документа> <ваш ответ>.

Задача №2 GnuPG: подпись сообщения

В этом ДЗ мы научимся подписывать и проверять подпись документов с помощью GnuPG - популярной реализации OpenPGP. В частности, она используется в большом количестве Open Source проектов для подписи пакетов с ПО.

С Российской криптографией мы научимся работать чуть позже (поскольку тестовый период для Российских продуктов ограничен во времени, а они будут нам с вами нужны ещё на нескольких курсах).

Установка

Windows

Пользователем Windows мы предлагаем воспользоваться возможностями проекта Cygwin (он у вас уже должен быть установлен), который предоставляет набор инструментов из мира Linux для ОС Windows.

Инструкция по установке
Шаг 0. Перейдите на главную страницу и скачайте установочный файл (либо запустите уже скачанный):

Шаг 1. После чего запустите его на установку и нажмите на кнопку Далее:

Шаг 2. Оставьте значение по умолчанию (Install from Internet) и нажмите на кнопку Далее:

Шаг 3. Оставьте значения по умолчанию и нажмите на кнопку Далее (выберите тот же каталог, что и в ДЗ к предыдущей лекции):

Шаг 4. Оставьте значения по умолчанию и нажмите на кнопку Далее (выберите тот же каталог, что и в ДЗ к предыдущей лекции):

Шаг 5. Оставьте значения по умолчанию и нажмите на кнопку Далее:

Шаг 6. Выберите любой сервер из списка и нажмите на кнопку Далее:

Шаг 7. Для View выберите Full (1), в поле поиска введите gnupg2 (2) и в столбце New выберите самую последнюю версию вместо значения Skip (3) и нажмите на кнопку Далее:

Шаг 8. Подтвердите изменения, нажав на кнопку Далее:

Шаг 9. Откройте Cygwin Terminal через иконку на Рабочем Столе:

Шаг 10. Введите команду gpg2 --version (можете продолжать работу):

По умолчанию вы будете находиться в каталоге C:/cygwin64/home/<Имя вашего пользователя>.

Далее в руководстве мы будем везде использовать команду gpg, вам же нужно будет писать gpg2.

Linux

Для пользователей Linux (Ubuntu) необходимо выполнить в терминале команду: gpg --version. Если в результате вы видите вывод вроде gpg (GnuPG) 2.2.19 (версия может отличаться), тогда вам не нужно ничего устанавливать.

Если же вы получили сообщение о том, что команда gpg не найдена, выполните следующую команду: sudo apt-get install gpg.

Mac OS

Для пользователей Mac необходимо выполнить в терминале команду: gpg version. Если в результате вы видите вывод вроде gpg (GnuPG) 2.2.21 (версия может отличаться) а не Command 'gpg' not found, тогда вам не нужно ничего устанавливать.

Если же вы получили сообщение о том, что команда gpg не найдена, выполните следующую команду: brew install gpg.

Инструкция

Общая логика работы с OpenPGP выглядит следующим образом:

  1. Генерация хэша сообщения
  2. Шифрование хэша с помощью вашего приватного ключа (подпись)
  3. Отправка сообщения и подписи получателю
  4. Верификация подписи и содержимого сообщения получателем (с использованием вашего публичного ключа)

Это значит, что первое, что нам нужно сделать - это сгенерировать ключевую пару (keypair*).

Примечание*: мы будем использовать и русскоязычную, и англоязычную терминологию, поскольку нам придётся работать с обеими.

Чтобы себя идентифицировать, пользователи в рамках OpenPGP создают UID (User ID):

  • Имя
  • Email
  • Комментарий

GnuGP сохраняет всю информацию в вашем домашнем каталоге - $HOME/.gnupg (для Cygwin $HOME так же будет работать).

Справку по работе с командой можно получить следующим образом:

gpg --help

Общий вид команд выглядит следующим образом: gpg [command] [file].

Важно: скриншоты команд будут приведены из Cygwin, там команда gpg2, для ОС Linux и Mac следует использовать gpg (без двойки).

Шаг 1. Генерация keypair

gpg --full-generate-key

В диалоговом окне:

  1. Выберите тип ключа: RSA и RSA
  2. Размер ключа: 2048
  3. Срок действия ключа - 0 (не ограничен)

Далее введите:

  1. Имя (ваше реальное имя)
  2. Email
  3. Комментарий оставьте пустым

Для примера (вам не нужно писать coursar и coursar@localhost - ДЗ будет отправлено на доработку):

После чего вас попросят ввести passphrase для защиты ключа.

Шаг 2. Просмотр ключей

gpg --list-keys
# либо в коротком формате:
gpg -k

Удостоверьтесь, что то, что вы сгенерировали на предыдущем шаге, есть в списке:

Шаг 3. Подпись сообщения

Создайте текстовый файл с сегодняшней датой в любом формате и сохраните его в файле message.txt.

Подпишите его следующей командой (подпись будет создана в виде отдельного файла):

gpg --output message.sig --local-user coursar@localhost --detach-sign message.txt

Где coursar@localhost - это email, который вы указали на первом шаге.

Проверьте, что подпись соответствует сообщению с помощью команды:

gpg --verify message.sig message.txt

Шаг 4. Проверка подписи (ложное сообщение)

Создайте текстовый файл modified.txt и измените в нём дату на вчерашнюю.

Удостоверьтесь, что проверка подписи теперь не проходит:

gpg --verify message.sig modified.txt

Шаг 5. Экспорт публичного ключа

Для того, чтобы остальные пользователи могли проверять подпись ваших сообщений, вы должны им предоставить ваш публичный ключ.

Для этого нужно его экспортировать с помощью следующей команды:

gpg --output public.gpg --armor --export coursar@localhost

Где coursar@localhost - это email, который вы указали на первом шаге.

По умолчанию, ключ экспортируется в бинарном формате. Опция --armor позволяет экспортировать его в текстовом виде.

Результат

В качестве результата пришлите:

  1. Публичный ключ (с шага 5)
  2. Файл сообщения и подпись к нему (с шага 3)

Задача №3 GnuPG: decrypt

В этом ДЗ мы научимся расшифровывать и проверять подпись сообщений, зашифрованных с помощью GnuPG.

Замечание

В отечественной терминологии различают термин расшифрование и дешифрование. Под дешифрованием фактически понимается "взлом" шифра.

В западной терминологии decrypt означает именно расшифрование.

Инструкция

Общая логика работы с OpenPGP выглядит следующим образом: с помощью публичного ключа получателя шифруется сообщение (расшифровать его можно только с помощью приватного ключа, который должен быть у вас). Про подпись вы уже знаете из предыдущего ДЗ.

Список ключей:

  1. Приватный ключ получателя student.key
  2. Публичный ключ отправителя netology.gpg.

Приватный ключ нужен для того, чтобы вы могли расшифровать сообщение.

Сейчас мы эмулируем ситуацию, что приватный ключ каким-то образом попал к вам (а ещё, вот удача, вам стал известен passphrase), поэтому теперь вы можете попытаться расшифровать сообщение.

Когда такое может случиться?

Случается это сплошь и рядом:

  1. Потерянная флешка, на которой хранился "бэкап" и аккуратно в текстовом файлике passphrase "чтобы не забыть"
  2. Ноутбук, отданный в ремонт (с аналогичным первому пункту хранению данных)
  3. "Случайно" выложенный разработчиком в системы контроля версий (вроде GitHub) приватный ключ и passphrase к нему в исходных кодах приложения или конфигурационных файлах
  4. То же, что и предыдущий пункт, но бэкап пользовательских данных (где-нибудь в облаке)
  5. И т.д.

По поводу п.3 можете почитать замечательное исследование.

Важно: никогда не выкладывайте приватные и passphrase к ним в онлайн. Это неправильно и ни при каких условиях так делать не стоит.

Скачайте их и сохраните его в ваш каталог $HOME (далее выполняйте все команды там).

Шаг 1. Импортируйте ключи

Для этого выполните следующую команду:

gpg --import netology.gpg
gpg --import student.key
Passphrase для student.key 😈

Passphrase: student.

Неправильная passphrase 😈?

Такое бывает. Достаточно часто для "стойкости" пароли набирают на другой раскладке. Попробуйте student в русской раскладке.

Если уж совсем не получилось, то держите скрипт, который всё сделает за вас:

Импорт ключа с вводом passphrase
echo ыегвуте | gpg --batch --yes --import student.key

Шаг 2. Убедитесь, что ключи импортированы

gpg --list-keys

Шаг 3. Расшифруйте сообщение и проверьте подпись

gpg --decrypt message.enc

Где message.enc - это зашифрованный файл, который вам прислал владелец netology.gpg.

Результат

В качестве результата пришлите:

  1. Содержимое зашифрованного сообщения
  2. Результат проверки подписи

Распространение дистрибутивов*

Важно: это не ДЗ, присылать его на проверку не нужно. Это доп.задание, предназначенное для ознакомления.

То, как мы распространяли публичные ключи - используется редко. В рамках OpenPGP существуют специальные сервера, предназначенные для распространения публичных ключей, например, https://keyserver.ubuntu.com/.

Соответственно, предлагаем вам ознакомиться с инструкцией, которую предлагает Ubuntu, для проверки скачанных дистрибутивов.

Для этого вам понадобятся GnuPG (который вы установили) и инструмент для подсчёта КС SHA256 (команда sha256sum). Если вы сделали предыдущие ДЗ, то в Windows они у вас уже установлены (Cygwin), в Linux тоже, в Mac потребуется выполнить команду brew install coreutils.

Далее необходимо пошагово пройти инструкцию.