Сервер должен использовать только псевдослучайный генератор для создания первого одноразового номера при инициализации, и об этом значении клиент должен знать. Этот одноразовый номер должен использоваться в первом запросе на шифрование, а затем сервер вычисляет следующее значение одноразового номера на основе определенных атрибутов этого ответа, что может сделать как клиент, так и сервер. Второй запрос шифрования будет использовать обновленное значение одноразового номера и так далее. Это похоже на то, как вектор инициализации работает в других решениях.
Поскольку nonce являются общедоступными значениями и основаны на первоначальном исследовании, их публичная c видимость не влияет на безопасность, мой вопрос здесь касается только генерации цепочки одноразовых значений, а не случайным образом. Преимущество заключается в том, что он формирует связь между клиентом и сервером в запросах на шифрование.
Я использую криптографическую систему libsodium.