Шифр с режимом 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", исправлено это предупреждение безопасности.