Security implications of public nonce
I'm planning to use the crypto_box()
functions of Nacl to encrypt messages as part of a client/server protocol. The server has to deal with multiple clients and each message from a client to the server is encrypted using the public key of the server and signed with the private key of the client.
cypto_box()
Функции также требуют от меня предоставить одноразовый номер. Текущий номер сообщения может быть использован как одноразовый номер - насколько я понимаю, одноразовый номер обязательно известен злоумышленнику, который способен отслеживать, сколько сообщений было обменено. И клиент, и сервер будут затем поддерживать счетчик сообщений и просто использовать новейшее значение счетчика в качестве одноразового номера.
Однако я должен разобраться со случаем, когда сообщения переупорядочиваются или теряются. Поэтому я бы отправил одноразовый номер в виде открытого текста вместе с зашифрованным сообщением. Пока один и тот же одноразовый номер не используется дважды, я не вижу проблем с этим подходом. Я что-то упустил?
1 ответ
Нет, nonce и IV могут считаться общедоступными. Я только что проверил сайт NaCl и не вижу явных замечаний, которые противоречат этому.
Режим работы CBC имеет некоторые дополнительные требования к IV (непредсказуемость), но это, конечно, не проблема в NaCl.
Однако вы должны убедиться, что вы не принимаете одноразовые номера <= последний полученный одноразовый номер, иначе злоумышленник может переслать или изменить порядок сообщений.