Я делаю протокол, который использует пакеты (т. Е. Не поток), зашифрованные с помощью AES.Я решил использовать GCM (на основе CTR), потому что он обеспечивает интегрированную аутентификацию и является частью пакета NSA B. Ключи AES согласовываются с использованием ECDH, где открытые ключи подписываются доверенными контактами как часть веб-интерфейса.доверия, используя что-то вроде ECDSA. Я считаю, что мне нужен 128-битный вектор одноразового номера / инициализации для GCM, потому что, хотя я использую 256-битный ключ для AES, это всегда 128-битный блочный шифр (верно?) Я будуиспользуя 96-битный IV после прочтения кода BC.
Я определенно не реализую свои собственные алгоритмы (только протокол - мой поставщик криптографии BouncyCastle), но мне все еще нужно знать, как использовать этот одноразовый номерне стреляя себе в ногу.Ключ AES, используемый между двумя людьми с одинаковыми ключами DH, останется постоянным, поэтому я знаю, что один и тот же одноразовый номер не должен использоваться для более чем одного пакета.
Могу ли я просто добавить 96-битный псевдослучайныйномер пакета и получатель должен использовать это как одноразовый номер?Это одноранговое программное обеспечение, и пакеты могут быть отправлены в любое время (например, с помощью мгновенного сообщения, запроса на передачу файла и т. Д.), А скорость является большой проблемой, поэтому было бы неплохо не использовать безопасныйисточник случайных чисел.Одноразовый номер вовсе не должен быть секретным, верно?Или обязательно такой случайный, как «криптографически безопасный» PNRG?Википедия говорит, что она должна быть случайной, иначе она восприимчива к выбранной атаке открытым текстом - но рядом с обоими утверждениями есть «нужная цитата», и я не уверен, верно ли это для блочных шифров.Могу ли я на самом деле использовать счетчик, который подсчитывает количество отправленных пакетов (отдельно от счетчика количества 128-битных блоков) с данным ключом AES, начиная с 1?Очевидно, это сделало бы одноразовый номер предсказуемым.Учитывая, что GCM аутентифицирует, а также шифрует, это поставит под угрозу его функциональность аутентификации?