где алгоритм обмена ключами?
crypto_box
просто crypto_box_curve25519xsalsa20poly1305
и состоит из двух частей;
Часть 1: пакетно-независимые предварительные вычисления;
Партия $А$ имеет 32-байтовый секретный ключ $sk_A$ и открытый ключ $pk_A$ куда $pk_A = [sk_A]G$
Партия $В$ имеет 32-байтовый секретный ключ $sk_B$ и открытый ключ $pk_B$ куда $pk_B = [sk_B]G$ и $G$ является базовой точкой X25519.
здесь $[а]G$ скалярное умножение и означает сложение $G$ самому себе $а$-раз.
Партия $А$ использует $sk_A$ и $pk_B$ получить ключ с помощью X25519;
$$k = Хэш(x([sk_A]pk_B))$$ Обратите внимание, что $pk_B$ является точкой на кривой, а X25519 использует только $х$ координаты точек для ECDH (отмечены $х(\кдот)$.
Как видите, однажды $А$ можно получить открытый ключ $В$ ключ $к$ можно построить сразу и аналогично для $В$, тоже. Это обмен ключами Диффи-Хеллмана на эллиптических кривых (ECDH).
Часть 2: вычисление для каждого пакета
- $А$ выбирает 24-байтовый одноразовый номер $n$ (должен быть уникальным) и никогда не должен повторяться при общении с $В$. 24-байтовый одноразовый номер безопасно генерировать случайным образом.
- $А$ развернуть ключ $к$ с одноразовым номером в ключевой поток с
хсальса20
- Сообщение шифруется потоком (просто x-or), где зарезервированы первые 32 байта.
- Первые 32 байта используются для аутентификации зашифрованного сообщения с
Поли1305
.
зачем им алгоритм обмена ключами
Если у них нет механизма обмена ключами, им нужен симметричный механизм распределения ключей это было бременем симметричного шифрования до того, как было изобретено шифрование с открытым ключом.
Публичные ключи требуют проверки. Иногда они использовались как TOFU (доверие при первом использовании), а затем проверялись с помощью некоторых механизмов, таких как Signal. В некоторых более безопасных соединениях сначала проверьте открытые ключи.
Подробнее читайте