Криптография
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
)
- b32 (
- 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