web-dev-qa-db-ja.com

ECBモードの暗号は使用しないでください

_"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の使用中にサポートされる唯一の暗号ブロックモードのようです。

18
Bryan

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

https://code.google.com/p/Android/ に対してAndroid Lint。

21
Alex Klyubin

私はこの説明が好きです( Maarten Bodewesから ):

"RSA/ECB/PKCS1Padding"は実際にはECBモードの暗号化を実装していません。プレーンテキストの単一ブロック(または実際には秘密鍵)の暗号化にのみ使用できるため、"RSA/None/PKCS1Padding"と呼ばれるべきでした。これは、Sun/Oracleの名前の間違いにすぎません。

IfあなたのAndroidバージョンにBouncyCastleが含まれている場合、Noneの代わりにECBを使用できます。

8
Artjom B.

「AES/ECB/PKCS5PADDING」を「AES/CBC/PKCS5PADDING」に変更することで、このlintセキュリティ警告を修正しました。

0
shekar