Лабораторная работа № 6

Ключи, сертификаты и зашифрованный обмен

Пройдите шесть проверяемых технических шагов: от расшифрования учебного текста до цифровой подписи и обмена зашифрованными пакетами с сервером.

Работа индивидуальная. Понадобятся обычный браузер и контрольный отпечаток учебного CA, который преподаватель сообщит отдельно от стенда.

Цель работы

Разобраться, какой ключ и для чего нужен

На практике различить назначение открытого и закрытого ключей, цифровой подписи и сертификата. Проверить, почему подходящий ключ расшифровывает текст, другой ключ не подходит, а подпись перестаёт проходить проверку после изменения текста. Выполнить зашифрованный обмен с сервером и объяснить, что именно подтверждают его проверки.

Работа выполняется на готовом веб-стенде. Писать клиентский код, устанавливать OpenSSL и работать в паре не требуется. Полоса прогресса показывает технические результаты, а не баллы или оценку.

Перед началом

Подготовьте браузер и учебные материалы

  • Работа индивидуальная. Используйте один обычный профиль браузера на протяжении работы. Личные закрытые ключи создаются и сохраняются в этом профиле: не очищайте данные сайта и не переходите в приватное окно между шагами. Обычное закрытие и повторное открытие браузера должно сохранять возможность продолжить работу.
  • В начале укажите в стенде свои фамилию, имя и группу. Эти данные попадут в закрытую ведомость преподавателя; до отправки работы опечатку можно исправить. При совпадении фамилий в одной группе преподаватель уточнит автора при личной проверке.
  • Основной инструмент — CryptoLab. Учебный ключ, другой ключ, шифротекст и открытый сертификат CA опубликованы на GitHub; учётная запись GitHub для чтения файлов не нужна. Учебные закрытые ключи намеренно доступны всем и не являются личными ключами студента, сервера или удостоверяющего центра (CA).
  • Преподаватель отдельно сообщает контрольный отпечаток корневого сертификата и порядок проверки личности. Не устанавливайте учебный сертификат CA в системное хранилище доверия.
  • Используйте только вымышленные учебные сообщения. Кроме запрошенных фамилии, имени и группы, не вводите персональные данные, настоящие пароли, токены и другие секреты. Не пересылайте никому личные закрытые ключи.

Порядок работы

Следуйте блокам стенда сверху вниз

Откройте CryptoLab в обычном окне браузера. Вверху страницы заполните Фамилия, Имя и Группа, затем нажмите Сохранить данные. Дождитесь сообщения «Сохранено». Если исправите поле позже, нажмите эту кнопку ещё раз до отправки работы. Учётная запись exe.dev и вход через GitHub не требуются.

На странице семь пронумерованных блоков. Общий пример в блоке 01 — опыт, а одноразовое задание в блоке 02 даёт первый из шести подтверждаемых сервером результатов. Поэтому зелёная полоса растёт после проверки сервером, а не после каждого нажатия кнопки.

01. Проверьте подходящий и другой ключ

  1. В блоке Проверьте ключ откройте ссылки Открыть ключ и Открыть шифротекст. Скопируйте всё содержимое training-key.pem в поле Учебный ключ, а ciphertext.txt — в поле Шифротекст. Можно вместо копирования нажать Вставить учебный ключ и Вставить шифротекст: кнопки загружают те же файлы.
  2. Нажмите Расшифровать и убедитесь, что появился читаемый текст.
  3. Нажмите Подставить другой ключ и ещё раз Расшифровать, не меняя шифротекст. Ожидаемый результат — сообщение об отказе: этот ключ не соответствует открытому ключу, которым зашифровали текст. При желании посмотрите файл wrong-key.pem через Открыть другой ключ.
  4. Снова нажмите Вставить учебный ключ, чтобы вернуть подходящий ключ для следующего блока.

Оба файла ключей из учебных примеров на GitHub намеренно общие для всех. Расшифрование готового текста ещё не доказывает, что работу выполнили именно вы.

02. Подтвердите результат на одноразовом задании

  1. Нажмите Получить задание. Сервер выдаст новый шифротекст для вашего сеанса и покажет время окончания задания.
  2. Нажмите Расшифровать задание. Браузер заполнит поле Полученный текст с помощью учебного ключа из блока 01.
  3. Нажмите Отправить ответ на проверку. Убедитесь, что сервер подтвердил ответ и полоса показала первый результат из шести.

Если срок задания прошёл, получите новое. Если расшифрование не удалось, проверьте, что в первом блоке снова стоит training-key.pem.

03. Создайте и подтвердите личные ключи

  1. Нажмите Создать личные ключи. Браузер создаст две разные пары: шифрования и подписи. Личные закрытые ключи сохраняются в текущем профиле браузера; серверу передаются только открытые ключи.
  2. Нажмите Получить задания для проверки. Посмотрите показанные отпечатки открытых ключей, шифротекст для первого ключа и текст для подписи вторым.
  3. Нажмите Расшифровать и подписать. Браузер заполнит поля ответа и подписи. Нажмите Подтвердить владение ключами и дождитесь сообщения, что сервер проверил оба действия. Полоса покажет два результата из шести.

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

04. Получите и проверьте сертификаты

  1. Нажмите Показать корневой сертификат, затем Получить сертификаты. На странице появятся сертификат учебного удостоверяющего центра (CA) и два ваших сертификата — для шифрования и подписи. Корневой сертификат также опубликован на GitHub.
  2. Посмотрите сведения рядом с сертификатами: владелец, назначение, серийный номер, срок действия и отпечаток корня. Обратите внимание, что сертификат содержит открытый, а не закрытый ключ.
  3. Получите контрольный SHA-256 отпечаток CA от преподавателя отдельно от стенда. Это 32 байта (64 шестнадцатеричных символа), записанные парами через двоеточие, например: ee:6b:54:26:b1:39:e6:b8:b1:69:59:29:6c:a0:5d:5d:c7:68:0d:07:8b:b9:fe:34:c5:f5:1e:86:b6:38:68:ec. Введите всю строку в поле Контрольный отпечаток CA от преподавателя и нажмите Сверить и подтвердить сертификаты. Сверяйте отпечаток, полученный от преподавателя, с отпечатком корневого сертификата на странице. После успешной проверки полоса покажет три результата из шести.

Значение, скопированное только с самой страницы, не будет независимой проверкой. Устанавливать учебный CA в системное хранилище доверия не нужно.

05. Сравните три результата проверки подписи

  1. Нажмите Получить текст для подписи. Задание действует пять минут.
  2. Нажмите Подписать своим ключом. Подпись подходит к исходному тексту и открытому ключу из вашего сертификата подписи.
  3. Нажмите Создать временный ключ и подписать. Эта подпись верна для временного открытого ключа, но проверка по вашему сертификату даст отказ.
  4. Нажмите Изменить один символ, затем Проверить прежнюю подпись. Теперь ключ тот же, но исходный текст изменился, поэтому прежняя подпись не подходит.
  5. Нажмите Отправить три результата на сервер. Сервер повторит проверки; при успехе полоса покажет четыре результата из шести.

Сравните причины отказа в пунктах 3 и 4. Если время задания истекло, получите новый текст и выполните три опыта заново.

06. Отправьте серверу зашифрованное сообщение

  1. Нажмите Получить сертификат и ID пакета. Изучите сведения о серверном участнике: его сертификат, серийный номер и отпечаток CA.
  2. В поле Короткий учебный текст введите вымышленное сообщение длиной до 500 символов, например «Проверка обмена №6». Нажмите Зашифровать в браузере.
  3. Посмотрите на Пакет JSON. Найдите данные, которые видны без расшифрования, и шифротекст. Затем нажмите Отправить пакет серверу. При успешной проверке полоса покажет пять результатов из шести.

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

07. Расшифруйте ответ сервера

  1. Нажмите Получить пакет. Сервер зашифрует одноразовый ответ для открытого ключа из вашего сертификата шифрования.
  2. Посмотрите JSON и нажмите Расшифровать своим ключом. Закрытый ключ работает в браузере; сервер его не получает.
  3. Нажмите Отправить ответ на проверку. После подтверждения сервером полоса заполнится зелёным целиком: получены все шесть результатов.

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

Завершение: отправьте работу на проверку

В блоке Отправка на проверку нажмите Отправить на проверку. Дождитесь статуса «Ожидает проверки». Если кнопка недоступна при полной зелёной полосе, проверьте блок с фамилией, именем и группой: все три поля должны быть заполнены и сохранены. После отправки изменить их в стенде нельзя.

Одноразовые задания и пакеты имеют ограниченный срок действия. Если срок истёк, запросите новое задание в соответствующем блоке. Если пропали ключи после очистки данных браузера или смены профиля, сообщите преподавателю: автоматического восстановления доступа пока нет.

Что предъявить преподавателю

Покажите результат и объясните наблюдения

  • Полностью заполненную зелёную полосу шести подтверждённых технических результатов и статус «Ожидает проверки» после нажатия «Отправить на проверку». В интерфейсе семь пронумерованных блоков: общий пример и одноразовое задание вместе образуют первый результат.
  • Сохранённые в стенде фамилию, имя и группу: они должны быть видны рядом с техническим результатом в закрытой выгрузке преподавателя.
  • Короткое объяснение четырёх наблюдений: почему другой ключ не расшифровал готовый текст; чем отказ при другом ключе подписи отличается от отказа при изменённом тексте; какие поля пакета открыты; почему серверу не нужен ваш личный закрытый ключ для отправки зашифрованного ответа.
  • Сертификаты шифрования и подписи, отпечаток учебного CA и пример JSON-пакета на экране стенда. Закрытые ключи и тексты одноразовых ответов показывать или пересылать не требуется.

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

Когда работа считается выполненной

Шесть результатов и отправка на проверку

  • Сервер подтвердил все шесть технических результатов; они отражены на полосе прогресса. Отказ неверного ключа и изменение текста рассмотрены как разные наблюдения, а не как ошибки, которые надо скрыть.
  • Работа отправлена на проверку и имеет статус «Ожидает проверки». Повторная отправка не должна создавать ещё одну сдачу.
  • Студент может своими словами объяснить назначение двух личных пар ключей, сертификата CA, подписи и зашифрованного пакета, а также причины отрицательных результатов. Преподаватель проверяет объяснения отдельно и принимает итоговое решение по работе; зелёная полоса не означает «Работа принята».