2016-03-15 24 views
12

Cipher"AndroidKeyStore"と一緒にRSAキーペアを使用しようとしています。私が見つけることができるすべてのAndroidドキュメントでは、例はCipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding")またはCipher.getInstance("RSA/ECB/PKCS1Padding")を示しています。 ECBの暗号化がECBモードの暗号を使用しないでください

暗号#のgetInstanceは、暗号モードとして、あるいはので、暗号モードを設定せずにECBと呼ばれるべきではありませんを使用すべきではない

:Androidのメーカーでも同じ警告が出て、どちらもアンドロイドのデフォルトモードはECBですが、これは安全ではありません。

明らかに、デフォルトはECBであるため、これを省略することも、モードをNoneに設定することもできません。 ECBモードが安全でない場合、どのモードを使用しますか?

私が知っている他のモードを使用すると、私はNoSuchAlgorithmException: No provider found for RSA/{mode}/OAEPWithSHA-256AndMGF1Paddingとなります。パディングが問題になることはありますか?

どちらの方法でも、の文書によれば、ECBモードはRSAを使用している間にサポートする唯一の暗号ブロックモードのようです。

答えて

14

これは、Androidスタジオで問題を見つけるために使用されるAndroid Lintのバグのようです。この警告の目的は、AESなどの対称暗号を使用するECBブロックモードの使用について警告することです。しかし、RSA/ECB/... Cipherは1ブロックの入力のみを受け入れ/処理するため、RSAの警告については何の注意もありません。

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を使用していますが、RSAキーを「暗号」に提供していますAES変換では例外が発生します。 – Bryan

関連する問題