В чем разница между алгоритмами шифрования AES и AES_128 - PullRequest
2 голосов
/ 13 января 2020

В соответствии с документацией для разработчиков приложений AES_128 и AES_256 поддерживаются с API 26. https://developer.android.com/reference/javax/crypto/Cipher. Например, сейчас я использую AES ( GCM mode) с 128-битным ключом. В чем разница между AES с 128-битным ключом и AES_128 ?

Ответы [ 2 ]

2 голосов
/ 13 января 2020

Нет никакой разницы между AES с помощью клавиши 128-bit и AES_128.

Как вы можете видеть в документах, с которыми вы связаны, до API 26 существовал один примитив для AES, с различными вариантами заполнения / режимами работы.

Чтобы упростить задачу, в API 26+ теперь есть два примитива для устранения неоднозначности использования AES с определенной клавишей 128-bit или 256-bit.

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

AES-GCM работает с 32-разрядным счетчиком, поэтому, к сожалению, с тем же паром ключ, nonce (IV), вы можете только безопасно зашифровать ~ 64GB данных (2^39-256 bits).

Если вы хотите перейти к еще более безопасному шифру, я рекомендую XSalsa20 или XChaCha20, которые обеспечивают размер одноразового номера 192-bit, эффективно позволяя шифровать практически "неограниченный" объем данных с тем же ключом, одноразовой парой.

1 голос
/ 13 января 2020

AES_128 не существует. Однако константы в Java обычно не используют символ дефиса (-), поэтому подчеркивание используется для обозначения AES-128 (все еще странный выбор для String, если вы спросите меня).

AES-128 - это просто AES , настроенный для использования 128-битного ключа. Внутренне он использует определенный c вывод подключей и 10 раундов. AES-256 имеет другой вывод подключей и использует 14 раундов. AES-192 (12 раундов) используется не часто, так как имеет неудобный размер ключа и не полностью защищает от атак, которые могут быть применимы к AES-128.

На практике может быть два различия, когда дело доходит до общего использования. Прежде всего, API может быть в состоянии выбрать реализацию 128 или 256 битов AES до вызова методов init. Во-вторых, я предполагаю, что метод init принимает 128-битные ключи только при настройке AES-128.

...