_"AndroidKeyStore"
_とともにRSAキーペアでCipher
を使用しようとしています。私が見つけることができるすべてのAndroidドキュメントでは、例は Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding")
または Cipher.getInstance("RSA/ECB/PKCS1Padding")
を示しています=。どちらもAndroid Studio:
ECB暗号化は使用しないでください
AndroidのデフォルトモードはECBであり、安全ではないため、暗号モードとしてECBを使用して、または暗号モードを設定せずにCipher#getInstanceを呼び出さないでください。
デフォルトはECBであるため、明らかに、これを省略したり、モードをNone
に設定したりすることはできません。 ECBモードが安全でない場合、どのモードを使用する必要がありますか?
(私が知っている)他のモードを使用すると、_NoSuchAlgorithmException: No provider found for RSA/{mode}/OAEPWithSHA-256AndMGF1Padding
_が得られます。パディングが問題になる可能性はありますか?
いずれにせよ、 Android KeyStore System のドキュメントによると、ECBモードはRSAの使用中にサポートされる唯一の暗号ブロックモードのようです。
これは、Android Studioが問題を見つけるためにAndroid Studioで使用するLintのバグのようです。この警告の目的は、対称のECBブロックモードの使用について警告することです。 AESなどの暗号。ただし、RSA/ECB/...暗号は入力の1つのブロックのみを受け入れる/処理するため、RSAについてこれについて警告する意味はありません。
https://code.google.com/p/Android/ に対してAndroid Lint。
私はこの説明が好きです( Maarten Bodewesから ):
"RSA/ECB/PKCS1Padding"
は実際にはECBモードの暗号化を実装していません。プレーンテキストの単一ブロック(または実際には秘密鍵)の暗号化にのみ使用できるため、"RSA/None/PKCS1Padding"
と呼ばれるべきでした。これは、Sun/Oracleの名前の間違いにすぎません。
IfあなたのAndroidバージョンにBouncyCastleが含まれている場合、None
の代わりにECB
を使用できます。
「AES/ECB/PKCS5PADDING」を「AES/CBC/PKCS5PADDING」に変更することで、このlintセキュリティ警告を修正しました。