2016-03-15 2 views
12

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

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

Cipher # деЫпзЬапс не должен быть вызван с ЕЦБ в качестве шифра режима или без установки режима шифрования, так как режим по умолчанию на Android - это ECB, что небезопасно.

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

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

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

ответ

14

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

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

+1

Отправлено [выпуск 204099] (https://code.google.com/p/android/issues/detail?id=204099) – Bryan

7

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

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

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

-2

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

+0

Я использую RSA для генерации ключей, предоставляя ключ RSA для 'Cipher' с преобразованием AES вызовет исключение. – Bryan

Смежные вопросы