В качестве результата пришлите ответы на вопросы в личном кабинете студента на сайте netology.ru.
В каждом задании сформулирован один (или несколько вопросов), и вам нужно найти ответы в соответствующем нормативно-правовом акте (далее – НПА).
Обратите внимание:
- там, где требуется указать понятие, необходимо привести это понятие целиком
- там, где необходимо описать иное (например, ответить на вопрос "в течение какого времени", "какая ответственность" и т.д.) достаточно ответа собственными словами (как вы поняли) и указания номера статьи и пункта.
Обратите внимание, что справочная система КонсультантПлюс в бесплатной редакции не даёт копировать текст документа.
Важно: правовые системы предлагают платную подписку на комментарии, аналитические материалы и подборки ссылок. В рамках нашего курса платная подписка не требуется. Все ДЗ рассчитаны на работу исключительно с бесплатной версией. Поэтому, пожалуйста, нигде не вводите данные своих карт и т.д.
Вопросы:
- Что такое электронная подпись (далее - ЭП)?
- Какие виды ЭП существуют? Есть ли внутри видов дополнительное разделение (если да, то какое)?
- Изучите ответы Минцифры на вопросы по Электронным услугам для бизнеса и граждан и ответьте на следующий вопрос: может ли (если да, то в каких случаях и каким видом ЭП) адрес отправителя Email считаться ЭП?
- Какой орган является органом исполнительной власти, уполномоченным в сфере использования ЭП?
Ответ для каждого пункта предоставляйте в формате:
На основании документа <название документа> <ваш ответ>.
В этом ДЗ мы научимся подписывать и проверять подпись документов с помощью GnuPG - популярной реализации OpenPGP. В частности, она используется в большом количестве Open Source проектов для подписи пакетов с ПО.
С Российской криптографией мы научимся работать чуть позже (поскольку тестовый период для Российских продуктов ограничен во времени, а они будут нам с вами нужны ещё на нескольких курсах).
Пользователем Windows мы предлагаем воспользоваться возможностями проекта Cygwin (он у вас уже должен быть установлен), который предоставляет набор инструментов из мира Linux для ОС Windows.
Инструкция по установке
Шаг 3. Оставьте значения по умолчанию и нажмите на кнопку Далее (выберите тот же каталог, что и в ДЗ к предыдущей лекции):
Шаг 4. Оставьте значения по умолчанию и нажмите на кнопку Далее (выберите тот же каталог, что и в ДЗ к предыдущей лекции):
Шаг 7. Для View выберите Full (1), в поле поиска введите gnupg2 (2) и в столбце New выберите самую последнюю версию вместо значения Skip (3) и нажмите на кнопку Далее:
По умолчанию вы будете находиться в каталоге C:/cygwin64/home/<Имя вашего пользователя>
.
Далее в руководстве мы будем везде использовать команду gpg
, вам же нужно будет писать gpg2
.
Для пользователей Linux (Ubuntu) необходимо выполнить в терминале команду: gpg --version
. Если в результате вы видите вывод вроде gpg (GnuPG) 2.2.19
(версия может отличаться), тогда вам не нужно ничего устанавливать.
Если же вы получили сообщение о том, что команда gpg
не найдена, выполните следующую команду: sudo apt-get install gpg
.
Для пользователей Mac необходимо выполнить в терминале команду: gpg version
. Если в результате вы видите вывод вроде gpg (GnuPG) 2.2.21
(версия может отличаться) а не Command 'gpg' not found
, тогда вам не нужно ничего устанавливать.
Если же вы получили сообщение о том, что команда gpg
не найдена, выполните следующую команду: brew install gpg
.
Общая логика работы с OpenPGP выглядит следующим образом:
- Генерация хэша сообщения
- Шифрование хэша с помощью вашего приватного ключа (подпись)
- Отправка сообщения и подписи получателю
- Верификация подписи и содержимого сообщения получателем (с использованием вашего публичного ключа)
Это значит, что первое, что нам нужно сделать - это сгенерировать ключевую пару (keypair*).
Примечание*: мы будем использовать и русскоязычную, и англоязычную терминологию, поскольку нам придётся работать с обеими.
Чтобы себя идентифицировать, пользователи в рамках OpenPGP создают UID (User ID):
- Имя
- Комментарий
GnuGP сохраняет всю информацию в вашем домашнем каталоге - $HOME/.gnupg
(для Cygwin $HOME
так же будет работать).
Справку по работе с командой можно получить следующим образом:
gpg --help
Общий вид команд выглядит следующим образом: gpg [command] [file]
.
Важно: скриншоты команд будут приведены из Cygwin, там команда gpg2
, для ОС Linux и Mac следует использовать gpg
(без двойки).
gpg --full-generate-key
В диалоговом окне:
- Выберите тип ключа:
RSA и RSA
- Размер ключа:
2048
- Срок действия ключа -
0
(не ограничен)
Далее введите:
- Имя (ваше реальное имя)
- Комментарий оставьте пустым
Для примера (вам не нужно писать coursar
и coursar@localhost
- ДЗ будет отправлено на доработку):
После чего вас попросят ввести passphrase для защиты ключа.
gpg --list-keys
# либо в коротком формате:
gpg -k
Удостоверьтесь, что то, что вы сгенерировали на предыдущем шаге, есть в списке:
Создайте текстовый файл с сегодняшней датой в любом формате и сохраните его в файле message.txt
.
Подпишите его следующей командой (подпись будет создана в виде отдельного файла):
gpg --output message.sig --local-user coursar@localhost --detach-sign message.txt
Где coursar@localhost
- это email, который вы указали на первом шаге.
Проверьте, что подпись соответствует сообщению с помощью команды:
gpg --verify message.sig message.txt
Создайте текстовый файл modified.txt
и измените в нём дату на вчерашнюю.
Удостоверьтесь, что проверка подписи теперь не проходит:
gpg --verify message.sig modified.txt
Для того, чтобы остальные пользователи могли проверять подпись ваших сообщений, вы должны им предоставить ваш публичный ключ.
Для этого нужно его экспортировать с помощью следующей команды:
gpg --output public.gpg --armor --export coursar@localhost
Где coursar@localhost
- это email, который вы указали на первом шаге.
По умолчанию, ключ экспортируется в бинарном формате. Опция --armor
позволяет экспортировать его в текстовом виде.
В качестве результата пришлите:
- Публичный ключ (с шага 5)
- Файл сообщения и подпись к нему (с шага 3)
В этом ДЗ мы научимся расшифровывать и проверять подпись сообщений, зашифрованных с помощью GnuPG.
В отечественной терминологии различают термин расшифрование и дешифрование. Под дешифрованием фактически понимается "взлом" шифра.
В западной терминологии decrypt означает именно расшифрование.
Общая логика работы с OpenPGP выглядит следующим образом: с помощью публичного ключа получателя шифруется сообщение (расшифровать его можно только с помощью приватного ключа, который должен быть у вас). Про подпись вы уже знаете из предыдущего ДЗ.
Список ключей:
- Приватный ключ получателя
student.key
- Публичный ключ отправителя
netology.gpg
.
Приватный ключ нужен для того, чтобы вы могли расшифровать сообщение.
Сейчас мы эмулируем ситуацию, что приватный ключ каким-то образом попал к вам (а ещё, вот удача, вам стал известен passphrase), поэтому теперь вы можете попытаться расшифровать сообщение.
Когда такое может случиться?
Случается это сплошь и рядом:
- Потерянная флешка, на которой хранился "бэкап" и аккуратно в текстовом файлике passphrase "чтобы не забыть"
- Ноутбук, отданный в ремонт (с аналогичным первому пункту хранению данных)
- "Случайно" выложенный разработчиком в системы контроля версий (вроде GitHub) приватный ключ и passphrase к нему в исходных кодах приложения или конфигурационных файлах
- То же, что и предыдущий пункт, но бэкап пользовательских данных (где-нибудь в облаке)
- И т.д.
По поводу п.3 можете почитать замечательное исследование.
Важно: никогда не выкладывайте приватные и passphrase к ним в онлайн. Это неправильно и ни при каких условиях так делать не стоит.
Скачайте их и сохраните его в ваш каталог $HOME
(далее выполняйте все команды там).
Для этого выполните следующую команду:
gpg --import netology.gpg
gpg --import student.key
Passphrase для student.key 😈
Passphrase: student
.
Неправильная passphrase 😈?
Такое бывает. Достаточно часто для "стойкости" пароли набирают на другой раскладке. Попробуйте student
в русской раскладке.
Если уж совсем не получилось, то держите скрипт, который всё сделает за вас:
Импорт ключа с вводом passphrase
echo ыегвуте | gpg --batch --yes --import student.key
gpg --list-keys
gpg --decrypt message.enc
Где message.enc
- это зашифрованный файл, который вам прислал владелец netology.gpg
.
В качестве результата пришлите:
- Содержимое зашифрованного сообщения
- Результат проверки подписи
Важно: это не ДЗ, присылать его на проверку не нужно. Это доп.задание, предназначенное для ознакомления.
То, как мы распространяли публичные ключи - используется редко. В рамках OpenPGP существуют специальные сервера, предназначенные для распространения публичных ключей, например, https://keyserver.ubuntu.com/.
Соответственно, предлагаем вам ознакомиться с инструкцией, которую предлагает Ubuntu, для проверки скачанных дистрибутивов.
Для этого вам понадобятся GnuPG (который вы установили) и инструмент для подсчёта КС SHA256 (команда sha256sum
). Если вы сделали предыдущие ДЗ, то в Windows они у вас уже установлены (Cygwin), в Linux тоже, в Mac потребуется выполнить команду brew install coreutils
.
Далее необходимо пошагово пройти инструкцию.