Шифрование AES-GCM с помощью JDK 1.8
Планируем добавить поддержку ниже Enc Algo:
- AES128-GCM: http://www.w3.org/2009/xmlenc11
- AES192-GCM: http://www.w3.org/2009/xmlenc11
- AES256-GCM: http://www.w3.org/2009/xmlenc11
через реализацию на основе 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 и тега аутентификации.
Если не уверены, прочитайте стандарт.