realization of Russian TLS 1.2
pip3 install -r requirements.txt
cd TLS/kuznyechik
python3 setup.py build_ext --inplace
- Languange: python3
- Codestyle: PEP8
- Separate branch for each team
https://www.overleaf.com/11271867qqtctbhwksqy
I ЭТАП. Реализация криптографических примитивов и алгоритмов для TLS 1.2 с российскими криптонаборами
Реализация всех необходимых примитивов и алгоритмов распределяется между тремя группами (по 2-3 человек в группе). Интерфейс алгоритмов должен соответствовать.
Состав группы: Ибрагимов, Грамович, ...
Базовые режимы
- Режим шифрования CTR-ACPKM (см. стандарт 1)
- Режим выработки имитовставки OMAC (см. стандарт 4)
Высокоуровневые алгоритмы на основе базовых режимов
- Stateful AtE алгоритм аутентифицированного шифрования (см. стандарт 2)
- Алгоритмы KExp15/KImp15 (см. стандарт 1)
Состав группы: Забелин, Кошкин, Печатнов
http://wwwold.tc26.ru/standard/rs/Р%2050.1.114-2016.pdf - стандарт 2, эллиптические кривые http://kaf401.rloc.ru/Criptfiles/GOST_R_34.10-2001.pdf - стандарт 6, электронная подпись
Базовый функционал работы с эллиптической кривой (класс с методами)
- Инициализация объекта класса с помощью id кривой (p,m,q,P,a,b)
- Метод сложения точек
- Метод удвоения точки
- Метод вычисления кратной точки
- Метод проверки принадлежности точки кривой
Необходимо поддержать работу с двумя кривыми, используемыми для контрольных примеров стандарта 2:
- id-tc26-gost-3410-2012-256-paramSetA, «1.2.643.7.1.2.1.1.1».
- id-tc26-gost-3410-2012-512-paramSetC, «1.2.643.7.1.2.1.2.3».
Высокоуровневые алгоритмы: алгоритмы подписи и проверки подписи (см. стандарт 6) после получения реализации хэш-функции от 3 группы.
Состав группы: Захаров, Дмитриев
Примитив: хэш-функция с длиной выхода 256 и 512 (стандарт 5) Высокоуровневые алгоритмы (стандарт 3)
- Функция KDF_TREE_GOSTR3411_2012_256
- Функция PRF_TLS_GOSTR3411_2012_256
После получения реализации функционала работы с эллиптической кривой от группы 2:
- Алгоритм VKO_GOSTR3410_2012_256
- Алгоритм VKO_GOSTR3410_2012_256
Как вы могли заметить, в первой части задании от вас требовалось реализовать все примитивы, алгоритмы и схемы, необходимые для работы протокола TLS 1.2 с российскими криптонаборами. Во второй части вам предстоит реализовать уже сам протокол и на его базе организовать мини-чат в рамках своей группы. На экзамене у вас будут проверять как наличие и корректность функционирования данного чата на вашей машине, так и код реализованной именно вами части ПО.
Нас интересует протокол TLS 1.2 только с одним c криптонабором TLS_GOSTR341112_256_WITH_KUZNYECHIK_CTR_OMAC (так как Кузнечик вы реализовывали в прошлом семестре). Основной документ, которым вам предстоит пользоваться, можно найти здесь http://wwwold.tc26.ru/standard/draft/%D0%A2%D0%9A26_TLS_2015.pdf. В качестве кривой предлагается использовать кривую id-tc26-gost-3410-12-512-paramSetC (http://wwwold.tc26.ru/methods/recommendation/CPECC14-TC26.pdf) в форме Вейерштрасса.
Вам необходимо реализовать установление сессии и в ее рамках одного (!) соединения с помощью полного протокола Рукопожатия (Handshake) с двухсторонней аутентификацией и последующую защиту канала с помощью протокола Записи (Record). Отметим, что соблюдение форматов сообщений протоколов Handshake и Record (заголовки, длины) является обязательным (см. 6.2 и 5.2 документа). Разобраться с форматами вам также поможет приложение в конце документа (Приложение B2), где все сообщения разобраны по полям и прокомментированы. Также можете пользоваться ASN1 coder/encoder.
Процедуры неполного Handshake, session resumption, renegotiation реализовывать не нужно. Протокол Alert можно реализовать в усеченном виде, где на ошибку любого типа (или при закрытии сессии) будет возвращаться сообщение протокола Alert уровня fatal с любым значением поля description.
Проверять пересылаемые сертификаты на действительность также не нужно. Вместо сертификата разрешается передавать идентификатор и открытый долговременный ключ.
То есть в поле body сообщений Certificate протокола Рукопожатия достаточно передать строку, состоящую из идентификатора (вашей группе хватит одного байта) и ключа в формате (x,y) (128 байт для указанной кривой).
К каждому человеку, выполняющему данный практикум, должны быть привязаны идентификатор и долговременная ключевая пара. Так как сертификатами разрешено не пользоваться, взамен стоит, например, организовать следующее. Совместно составить таблицу соответствия идентификаторов и открытых ключей и распространить ее между машинами, тогда валидность долговременного ключа в протоколе может проверяться по данной таблице.
Организация сети между машинами и реализация протокола Record.
Можно реализовывать в виде класса, полями которого являются ключевой материал и текущий номер записи, а методами – <сформировать запись>, <распарсить запись>, <обновить ключевой материал>.
Таким образом, для записи и чтения вам понадобятся два класса.
Реализация функционала серверной части протокола Handshake.
Функционал Handshake лучше реализовывать в виде функций-обработчиков классов Client и Server: <обработать сообщение>, <сформировать сообщение>.
Реализация функционала клиентской части протокола Handshake.
Функционал Handshake лучше реализовывать в виде функций-обработчиков классов Client и Server: <обработать сообщение>, <сформировать сообщение>.
To use protocols you need key pair. First of all make following changes in master branch. To create key pair you should choose id - number from 0 to 255. It should differ from ids from table below. Run generate_key_pair.py:
cd TLS/certificates
python3 generate_key_pair.py --id <YOUR_ID>
Add your id to table below. Now commit this README with updated table and public_keys.py file.
| ID | name |
|---|---|
| 0 | Alex Zabelin |
| 1 | Pavel Koshkin |
| 2 | Bulat Ibragimov |
| 3 | Alex Zakharov |
| 4 | Pavel Gramovich |
- Р 1233565.1.___-2018 «Информационная технология. Криптографическая защита информации. Криптографические алгоритмы, сопутствующие применению алгоритмов блочного шифрования»
- Р 50. . - 20_____ «Информационная технология. Криптографическая защита информации. Использование российских криптографических алгоритмов в протоколе безопасности транспортного уровня (TLS 1.2)»
- Р 50.1.113–2016 «Информационная технология. Криптографическая защита информации. Криптографические алгоритмы, сопутствующие применению алгоритмов электронной цифровой подписи и функции хэширования»
- ГОСТ Р 34.13–2015 «Информационная технология. Криптографическая защита информации. Режимы работы блочных шифров»
- ГОСТ Р 34.11–2012 «Информационная технология. Криптографическая защита информации. Функция хэширования»
- ГОСТ Р 34.10–2012 «Информационная технология. Криптографическая защита информации. Процессы формирования и проверки электронной цифровой подписи»