2016-03-15 33 views
12

Sto tentando di utilizzare uno Cipher con una coppia di chiavi RSA insieme allo "AndroidKeyStore". In tutta la documentazione di Android che posso trovare, gli esempi mostrano Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding") o Cipher.getInstance("RSA/ECB/PKCS1Padding"). Entrambi i quali venire con lo stesso avvertimento su Android Studio:Cipher con modalità ECB non deve essere utilizzato

BCE La crittografia non deve essere utilizzato

Cipher # getInstance non deve essere chiamato con BCE, in quanto la modalità di cifratura o senza impostare la modalità di cifratura in quanto la la modalità predefinita su Android è ECB, che non è sicura.

Ovviamente non posso ometterlo o impostare la modalità su None, perché l'impostazione predefinita è ECB. Se la modalità ECB non è sicura, quale modalità dovrei usare?

Se uso un'altra modalità (che io sappia) ottengo un NoSuchAlgorithmException: No provider found for RSA/{mode}/OAEPWithSHA-256AndMGF1Padding. Potrebbe essere il problema il riempimento?

In entrambi i casi, in base alla documentazione Android KeyStore System, la modalità ECB sembra essere l'unica modalità di blocco di crittografia supportata durante l'utilizzo di RSA.

risposta

14

Questo sembra un bug in Android Lint utilizzato da Android Studio per trovare problemi. L'intenzione di questo avvertimento è di mettere in guardia circa l'uso della modalità di blocco ECB con cifrari simmetrici, come AES. Tuttavia, non c'è motivo di avvertire questo per RSA, perché RSA/ECB/... Cipher accetta/elabora solo un blocco di input.

Ti suggerisco di segnalare un bug in https://code.google.com/p/android/ contro Android Lint.

+1

Inviato [Issue 204099] (https://code.google.com/p/android/issues/detail?id=204099) – Bryan

7

mi piace questa spiegazione (from Maarten Bodewes):

"RSA/ECB/PKCS1Padding" in realtà non implementa la crittografia modalità BCE. Dovrebbe essere stato chiamato "RSA/None/PKCS1Padding" in quanto può essere utilizzato solo per crittografare un singolo blocco di testo in chiaro (o, in effetti, una chiave segreta). Questo è solo un errore di denominazione di Sun/Oracle.

Se la versione Android include BouncyCastle, quindi è possibile utilizzare al posto di NoneECB.

-2

Cambiando "AES/ECB/PKCS5PADDING" su "AES/CBC/PKCS5PADDING" è stato risolto questo avviso di sicurezza.

+0

Sto utilizzando RSA per generare le chiavi, fornendo una chiave RSA a un 'Cipher' con una trasformazione AES genererà un'eccezione. – Bryan