Java алгоритм AES для 256-битного ключа - PullRequest
1 голос
/ 13 апреля 2020

Я пытаюсь реализовать 256-битный алгоритм шифрования / дешифрования AES. Я понимаю, что есть несколько режимов для этого алгоритма.

https://docs.oracle.com/javase/8/docs/api/javax/crypto/Cipher.html

Every implementation of the Java platform is required to support the following standard Cipher transformations with the keysizes in parentheses:
AES/CBC/NoPadding (128)
AES/CBC/PKCS5Padding (128)
AES/ECB/NoPadding (128)
AES/ECB/PKCS5Padding (128)
DES/CBC/NoPadding (56)
DES/CBC/PKCS5Padding (56)
DES/ECB/NoPadding (56)
DES/ECB/PKCS5Padding (56)
DESede/CBC/NoPadding (168)
DESede/CBC/PKCS5Padding (168)
DESede/ECB/NoPadding (168)
DESede/ECB/PKCS5Padding (168)
RSA/ECB/PKCS1Padding (1024, 2048)
RSA/ECB/OAEPWithSHA-1AndMGF1Padding (1024, 2048)
RSA/ECB/OAEPWithSHA-256AndMGF1Padding (1024, 2048)

Однако выше я не нашел ни одного режима с 256-битным ключом. Я что-то ошибаюсь?

1 Ответ

1 голос
/ 13 апреля 2020

AES - это 128-битный блочный шифр с ключами 128, 196 и 256-битного размера. AES примитивен, и для его использования требуется режим работы , чтобы стать схемой шифрования. Каждый режим работы допускает любые размеры клавиш, и режим работы не связан с размером ключа.

Для использования любого режима работы необходимо реализовать AES, а затем режим работы. Может потребоваться только шифрование или дешифрование AES в зависимости от режима работы.

Некоторые режимы работы

  • ECB забывает, что это небезопасно, пингвин в Википедии. * 1010 Режим *
  • CB C уязвим к атакам дополнением oracle, если используется на сервере. Режим Nonce в режиме CB C должен быть непредсказуемым .
  • Режим CTR преобразует блочный шифр в потоковый шифр и не требует расшифровки AES. Достаточно только реализации шифрования. Одноразовый номер в режиме CTR должен использоваться только один раз для каждого ключа, в противном случае конфиденциальность не удастся из-за атаки перетаскивания шпаргалки.

Все вышеперечисленное является режимом archai c и они могут обеспечить конфиденциальность только при правильном использовании.

В современной криптографии мы предпочитаем режим аутентифицированного шифрования (со связанными данными), такой как AES-GCM. Эти режимы обеспечивают не только конфиденциальность, но также целостность и аутентификацию.

В режиме GCM нужно быть осторожным с генерацией IV / Nonce, поскольку GCM внутренне использует режим CTR, который наследует ту же проблему с режимом CTR, поэтому никогда не используйте один и тот же IV под одним и тем же ключом. Эту проблему можно решить с помощью счетчика / LFSR или в комбинированном режиме со случайным .

Кроме того, повторное использование IV в GCM может привести к катастрофическому c результату подделки.

Для проблемы повторного использования IV есть другой режим, который становится стандартом в ближайшем будущем. режим SIV; AES-GCM-SIV .


Java Шифр ​​Oracle, а IBM имеет , ограниченное 128-битными размерами ключей . Вот почему вы видите 128 там. Изменено с 8u151 в 2017 году. OpenJDK или BouncyCastle не ограничены.

...