Мотивация
ECIES-P256 значительно быстрее, чем ElGamal. Существуют несколько eepsites i2pd с типом крипто ECIES-P256, и Java должна быть способна общаться с ними и наоборот. i2pd поддерживает это с версии 2.16.0 (0.9.32 Java).
Обзор
Предложение вводит новый тип крипто ECIES-P256, который может появляться в части сертификата идентификации или как отдельный тип ключа шифрования в LeaseSet2. Может использоваться в RouterInfo, LeaseSet1 и LeaseSet2.
Местоположения ключей ElGamal
Для обзора, Публичные ключи ElGamal размером 256 байт можно найти в следующих структурах данных. Смотрите спецификацию общих структур.
В идентичности маршрутизатора Это ключ шифрования маршрутизатора.
В пункте назначения Публичный ключ пункта назначения использовался для старого шифрования i2cp-to-i2cp, которое было отключено в версии 0.6, в настоящее время не используется, за исключением IV для шифрования LeaseSet, которое устарело. Вместо этого используется публичный ключ в LeaseSet.
В LeaseSet Это ключ шифрования пункта назначения.
В 3 выше, публичный ключ ECIES все еще занимает 256 байт, хотя фактическая длина ключа составляет 64 байта. Остальное должно быть заполнено случайной подкладкой.
- В LS2 Это ключ шифрования пункта назначения. Размер ключа — 64 байта.
EncTypes в сертификатах ключей
ECIES-P256 использует тип шифрования 1. Типы шифрования 2 и 3 должны быть зарезервированы для ECIES-P284 и ECIES-P521.
Использование асимметричной криптографии
Это предложение описывает замену ElGamal для:
Сообщения о построении туннеля (ключ в RouterIdentity). Блок ElGamal — 512 байт.
Шифрование ElGamal+AES/SessionTag от клиента к клиенту (ключ в LeaseSet, ключ пункта назначения не используется). Блок ElGamal — 514 байт.
Шифрование от маршрутизатора к маршрутизатору netdb и других I2NP сообщений. Блок ElGamal — 514 байта.
Цели
- Обратная совместимость
- Без изменений для существующей структуры данных
- Значительно более эффективные вычисления по сравнению с ElGamal
Нецели
- RouterInfo и LeaseSet1 не могут публиковать ElGamal и ECIES-P256 вместе
Обоснование
Двигатель ElGamal/AES+SessionTag всегда застревает на нехватке тегов, что приводит к значительному снижению производительности в коммуникациях I2P. Сборка туннеля является наиболее ресурсоемкой операцией, поскольку инициатор должен выполнять шифрование ElGamal 3 раза для каждого запроса на сборку туннеля.
Необходимые криптографические примитивы
Генерация ключей кривой EC P256 и DH
AES-CBC-256
SHA256
Подробное предложение
Пункт назначения с ECIES-P256 публикует себя с типом крипто 1 в сертификате. Первые 64 байта из 256 в идентичности должны интерпретироваться как публичный ключ ECIES, а остальные должны быть проигнорированы. Отдельный ключ шифрования LeaseSet основан на типе ключа из идентичности.
ECIES блок для ElGamal/AES+SessionTags
Блок ECIES заменяет блок ElGamal для ElGamal/AES+SessionTags. Длина 514 байт. Состоит из двух частей по 257 байт каждая. Первая часть начинается с нуля, затем— эфемерный публичный ключ P256 длиной 64 байта, оставшиеся 192 байта — случайная подкладка. Вторая часть начинается с нуля, затем AES-CBC-256 зашифрованные 256 байт с тем же содержимым, что и в ElGamal.
ECIES блок для записи построения туннеля
Запись о построении туннеля такая же, но без ведущих нулей в блоках. Туннель может проходить через любую комбинацию типов шифрования маршрутизаторов и выполняется на уровне записи. Инициатор туннеля шифрует записи в зависимости от опубликованного типа шифрования участника туннеля, участник туннеля расшифровывает на основе собственного типа шифрования.
AES-CBC-256 ключ
Это расчет совместных ключей ECDH, где KDF — это SHA256 по координате x. Пусть Алиса будет как шифровальщик, а Боб как дешифратор. Предположим, что k — это случайно выбранный Алисы частный ключ P256, а P — публичный ключ Боба. S — общая секретная S(Sx, Sy). Алиса рассчитывает S, «согласовывая» k с P, например, S = k*P.
Предположим, что K — это эфемерный публичный ключ Алисы, а p — частный ключ Боба. Боб берет K из первого блока полученного сообщения и рассчитывает S = p*K.
AES ключ шифрования — это SHA256(Sx), а iv — это Sy.