不应使用ECB模式的密码

Bry*_*yan 16 encryption android rsa android-keystore

我正在尝试使用Cipher带有RSA密钥对的a "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系统文档,ECB模式似乎是它在使用RSA时支持的唯一密码块模式.

Ale*_*bin 20

这看起来像Android Studio中用于查找问题的Android Lint中的错误.该警告的目的是警告使用具有对称密码的ECB块模式,例如AES.但是,对于RSA,没有必要对此进行警告,因为RSA/ECB/... Cipher只接受/处理一个输入块.

我建议你在https://code.google.com/p/android/上针对Android Lint 提交一个错误.


Art*_* B. 8

我喜欢这个解释(来自Maarten Bodewes):

"RSA/ECB/PKCS1Padding"实际上并没有实现ECB模式加密.应该调用"RSA/None/PKCS1Padding"它,因为它只能用于加密单个明文块(或者实际上是一个密钥).这只是Sun/Oracle的命名错误.

如果您的Android版本包含BouncyCastle,那么您可以使用None而不是ECB.