Перейти к содержанию

Криптография

1. Ассимметричные алгоритмы и электронные подписи

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

Список используемых алгоритмов:

ID Шифрование (согласования ключа) Электронная подпись Шифрование (симметричный алгоритм) Хэш-функция i2p.i2p-bote pboted
1 ElGamal-2048 DSA-1024 AES-CBC-256 SHA-256 активен нет (устарел)
2 ECDH-256 ECDSA-256 AES-CBC-256 SHA-256 активен активен
3 ECDH-521 ECDSA-521 AES-CBC-256 SHA-512 активен активен
4 NTRUEncrypt-1087 GMSS-512 AES-CBC-256 SHA-512 активен скоро
5 X25519 ED25519 AES-CBC-256 SHA-512 нет активен

2. Форматы Почтовых назначений

После введения новых алгоритмов для Почтовых назначений возникла проблема неоднозначности определения типа Почтового назначения по его длине в формате Base64.

Был разработан более полный формат Почтового назначения, который дополнительно позволяет использовать различные комбинации алгоритмов, а не только несколько предопределённых.

Ранее используемый вариант хранения и передачи Почтовых назначений и Почтовых идентичностей теперь имеет версию 0.

Версия 0

Используется в pboted и i2p.i2p-bote

  • Почтовое Назначение в виде строки, закодированной в Base64, которая содержит:
    • публичный ключ шифрования (согласования ключа);
    • публичный ключ для подтверждения электронной подписи.
  • Почтовая идентичность в виде строки, закодированной в Base64, которая содержит:
    • публичный ключ шифрования (согласования ключа);
    • публичный ключ для подтверждения электронной подписи;
    • приватный ключ шифрования (согласования ключа);
    • приватный ключ для подтверждения электронной подписи.

Пример 512-символьной Почтового назначения (ElGamal-2048/DSA-1024):

  uQtdwFHqbWHGyxZN8wChjWbCcgWrKuoBRNoziEpE8XDt8koHdJiskYXeUyq7JmpG
  In8WKXY5LNue~62IXeZ-ppUYDdqi5V~9BZrcbpvgb5tjuu3ZRtHq9Vn6T9hOO1fa
  FYZbK-FqHRiKm~lewFjSmfbBf1e6Fb~FLwQqUBTMtKYrRdO1d3xVIm2XXK83k1Da
  -nufGASLaHJfsEkwMMDngg8uqRQmoj0THJb6vRfXzRw4qR5a0nj6dodeBfl2NgL9
  HfOLInwrD67haJqjFJ8r~vVyOxRDJYFE8~f9b7k3N0YeyUK4RJSoiPXtTBLQ2RFQ
  gOaKg4CuKHE0KCigBRU-Fhhc4weUzyU-g~rbTc2SWPlfvZ6n0voSvhvkZI9V52X3
  SptDXk3fAEcwnC7lZzza6RNHurSMDMyOTmppAVz6BD8PB4o4RuWq7MQcnF9znElp
  HX3Q10QdV3omVZJDNPxo-Wf~CpEd88C9ga4pS~QGIHSWtMPLFazeGeSHCnPzIRYD

Пример 86-символьной Почтового Назначения (ECC-256):

  1Lcvly8no5of6juJKxqy-xA-MStM2c2XKorepH1oqs5
  yKBkg9-ZcG4G4kZY1E~2672cMA806l9EicQLmlehB1m

Тип Почтового Назначения может быть определён только по длине Base64 строки:

ID Публичная часть Приватная часть
1 512 880
2 86 172
3 174 348
4 2079 97813

Версия 1

Используется в pboted

Шаблон: <data format>.<encoded data>

  • data format - сообщает об используемом кодировании, на данный момент может быть:
    • b32 (Base32)
    • b64 (Base64)
  • encoded data - кодированные байты с:
    • Почтовым назначением (только публичные ключи)
    • Почтовой идентичностью (публичные и приватные ключи)

Формат Почтового назначения

Поле Размер Описание
VER 1 byte Версия формата
CTYPE 1 byte Тип шифрования (согласования ключа)
STYPE 1 byte Тип электронной подписи
SMTYPE 1 byte Тип щифрования (симметричный алгоритм)
HTYPE 1 byte Тип хэш-функции
CDATA N byte Публичный ключ шифрования (длина поля зависит от типа)
SDATA M byte Публичный ключ подписи (длина поля зависит от типа)

Пример:

b64.AQUFAgJI2e47rS9VkSEfM4ZHfuimMA1EoUmLZd1DNSX8fqocLA3v8cv~XSnQpUSax~9Gs2cFH2rtNOZekhF4i2RQ7QOI

Формат Почтовой идентичности

Поле Размер Описание
VER 1 byte Версия формата
CTYPE 1 byte Тип шифрования (согласования ключа)
STYPE 1 byte Тип электронной подписи
SMTYPE 1 byte Тип щифрования (симметричный алгоритм)
HTYPE 1 byte Тип хэш-функции
CDATA N byte Публичный ключ шифрования (длина поля зависит от типа)
SDATA M byte Публичный ключ подписи (длина поля зависит от типа)
CPDATA X byte Приватный ключ шифрования (длина поля зависит от типа)
SPDATA Y byte Приватный ключ подписи (длина поля зависит от типа)

Пример:

b64.AQUFAgJI2e47rS9VkSEfM4ZHfuimMA1EoUmLZd1DNSX8fqocLA3v8cv~XSnQpUSax~9Gs2cFH2rtNOZekhF4i2RQ7QOISPTr4NDUvlFrAt3SfPtZe6iF-NvfKlkuB8caWNqhR1jvOTDon2w~pDh~0yloEMkwONyugyKmTgscruV4SaAfBQ==

3. Отпечатки для записей каталога

ToDo: Looks specific to i2p.i2p-bote, remove from protocol description

TODO H = scrypt(name, dest, zuf.wert); die letzten 8 Binärstellen von H müssen 0 sein 13*7+22+18 = 131


Последнее обновление: 2023-03-09