где алгоритм обмена ключами?
 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. В некоторых более безопасных соединениях сначала проверьте открытые ключи.
Подробнее читайте