ECIES-P256

Proposal 145
Open
Author оригинал
Created 2019-01-23
Last Updated 2019-01-24

Мотивация

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 для:

  1. Сообщения о построении туннеля (ключ в RouterIdentity). Блок ElGamal — 512 байт.

  2. Шифрование ElGamal+AES/SessionTag от клиента к клиенту (ключ в LeaseSet, ключ пункта назначения не используется). Блок ElGamal — 514 байт.

  3. Шифрование от маршрутизатора к маршрутизатору netdb и других I2NP сообщений. Блок ElGamal — 514 байта.

Цели

  • Обратная совместимость
  • Без изменений для существующей структуры данных
  • Значительно более эффективные вычисления по сравнению с ElGamal

Нецели

  • RouterInfo и LeaseSet1 не могут публиковать ElGamal и ECIES-P256 вместе

Обоснование

Двигатель ElGamal/AES+SessionTag всегда застревает на нехватке тегов, что приводит к значительному снижению производительности в коммуникациях I2P. Сборка туннеля является наиболее ресурсоемкой операцией, поскольку инициатор должен выполнять шифрование ElGamal 3 раза для каждого запроса на сборку туннеля.

Необходимые криптографические примитивы

  1. Генерация ключей кривой EC P256 и DH

  2. AES-CBC-256

  3. 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.