Шифрование AES-GCM с помощью JDK 1.8

Планируем добавить поддержку ниже Enc Algo:

через реализацию на основе JDK 1.8, с учетом javax.crypto.spec.GCMParameterSpec & javax.crypto.Cipher, Здесь я узнал, что для шифра нужен объект GCMParameterSpec:

public final void init(int opmode, Key key, AlgorithmParameterSpec params)

Теперь хотим узнать, какими будут значения (IV & tLen) для всех перечисленных выше алгоритмов для создания объекта GCMParameterSpec.

Будут ли эти значения различаться для разных выше перечисленных алгоритмов (нет, мне кажется, что только изменения - это размер ключа)

И, пожалуйста, опишите назначение этих двух атрибутов (IV & tLen) GCMParameterSpec, а также

1 ответ

Решение

Источник здесь:

Для целей настоящей спецификации AES-GCM должен использоваться с 96-битным вектором инициализации (IV) и 128-битным тегом аутентификации (T).

IV или одноразовый номер (число использованных один раз) требуется, чтобы убедиться, что идентичные сообщения не шифруются с одинаковым значением. Для режима GCM, в котором используется режим CTR, крайне важно, чтобы IV никогда не повторялся.

Если вы продолжите читать, вы обнаружите, что:

Для режима Галуа / Счетчика (GCM), используемого в данной спецификации, IV не должен повторно использоваться для какого-либо ключа и должен быть случайным, но он не должен быть секретным.

Для Java это означает получение 12 случайных байтов из SecureRandom пример; просто получить это с помощью new SecureRandom() желательно.


Тег аутентификации, конечно, будет аутентифицировать зашифрованный текст и, следовательно, зашифрованное сообщение. Это обеспечит сохранение подлинности и целостности сообщения. Для GCM размер тега аутентификации имеет большое значение; лучше держать на максимуме. размер 128 бит, что действительно делает эта спецификация.


Размер ключа действительно полностью отделен от размера IV и тега аутентификации.

Если не уверены, прочитайте стандарт.

Другие вопросы по тегам