Шифр с режимом ECB не должен использоваться

Я пытаюсь использовать Cipher с парой ключей RSA вместе с "AndroidKeyStore". Во всей документации по Android, которую я могу найти, примеры показывают Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding") или Cipher.getInstance("RSA/ECB/PKCS1Padding"). Оба из них вызывают одно и то же предупреждение в Android Studio:

Шифрование ECB не должно использоваться

Cipher # getInstance не следует вызывать с помощью ECB в качестве режима шифрования или без установки режима шифрования, потому что режим по умолчанию для android является ECB, что является неустойчивым.

Очевидно, я не могу опустить это или установить режим None, потому что по умолчанию используется ECB. Если режим ECB небезопасен, какой режим я должен использовать?

Если я использую какой-либо другой режим (я знаю), я получаю NoSuchAlgorithmException: No provider found for RSA/{mode}/OAEPWithSHA-256AndMGF1Padding. Может быть проблема с заполнением?

В любом случае, согласно документации Android KeyStore System, режим ECB, по-видимому, является единственным режимом блока шифрования, который он поддерживает при использовании RSA.

Ответ 1

Это похоже на ошибку в Android Lint, используемую Android Studio, чтобы найти проблемы. Цель этого предупреждения - предупредить об использовании режима блока ECB с симметричными шифрами, такими как AES. Тем не менее, нет смысла предупреждать об этом для RSA, потому что RSA/ECB/... Cipher принимает/обрабатывает только один блок ввода.

Я предлагаю вам указать ошибку в https://code.google.com/p/android/ на Android Lint.

Ответ 2

Мне нравится это объяснение (от Maarten Bodewes):

"RSA/ECB/PKCS1Padding" фактически не реализует шифрование режима ECB. Его следовало называть "RSA/None/PKCS1Padding", поскольку его можно использовать только для шифрования одного блока открытого текста (или, действительно, секретного ключа). Это просто ошибка названия Sun/Oracle.

Если ваша версия Android включает BouncyCastle, вы можете использовать None вместо ECB.

Ответ 3

Изменив "AES/ECB/PKCS5PADDING" на "AES/CBC/PKCS5PADDING", исправлено это предупреждение безопасности.