El cifrado con modo ECB no debe usarse

Estoy tratando de utilizar un Cipher con un par de claves RSA junto con la "AndroidKeyStore" . En toda la documentación de Android que puedo encontrar, los ejemplos muestran Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding") o Cipher.getInstance("RSA/ECB/PKCS1Padding") . Ambos vienen con la misma advertencia en Android Studio:

El cifrado ECB no debe utilizarse

Cipher # getInstance no debe ser llamado con ECB como el modo de cifrado o sin establecer el modo de cifrado porque el modo predeterminado en android es ECB, que es inseguro.

Obviamente, no puedo omitirlo, o establecer el modo en None , porque el valor predeterminado es ECB. Si el modo ECB es inseguro, ¿qué modo debo usar?

Si utilizo cualquier otro modo (que yo sepa) recibo una NoSuchAlgorithmException: No provider found for RSA/{mode}/OAEPWithSHA-256AndMGF1Padding . ¿Podría el relleno ser el problema?

De cualquier manera, de acuerdo con la documentación del sistema Android KeyStore , el modo ECB parece ser el único modo de bloque de cifrado que admite al utilizar RSA.

Esto parece un error en Android Lint utilizado por Android Studio para encontrar problemas. La intención de esa advertencia es advertir sobre el uso del modo de bloque del ECB con cifras simétricas, como AES. Sin embargo, no hay ningún punto en advertir sobre esto para RSA, porque RSA / ECB / … Cipher acepta / procesa sólo un bloque de entrada.

Le sugiero que presente un error en https://code.google.com/p/android/ contra Android Lint.

Me gusta esta explicación ( de Maarten Bodewes ):

"RSA/ECB/PKCS1Padding" realidad no implementa cifrado de modo ECB. Se debería haber llamado "RSA/None/PKCS1Padding" ya que sólo se puede utilizar para cifrar un solo bloque de texto sin formato (o, de hecho, una clave secreta). Esto es sólo un error de nombre de Sun / Oracle.

Si su versión de Android incluye BouncyCastle, puede utilizar None lugar de ECB .

Cambiando "AES / ECB / PKCS5PADDING" a "AES / CBC / PKCS5PADDING" fijo esta advertencia de seguridad de pelusa.

  • Cómo cargar adbkey.pub con Python RSA
  • Proporcionar autenticación segura de Facebook con mi servidor
  • Obteniendo 1 byte extra en el módulo RSA Key ya veces para exponentes también
  • Mensaje firmado usando OpenSSL; No se puede verificar con Android Java
  • Clave de String en Java RSA
  • Práctica recomendada para descifrar archivos grandes con menos memoria
  • ¿Cómo puedo verificar un Google oficial apk
  • Descodificación RSA con clave pública
  • Servidor Android y PHP: cifrar y descifrar datos
  • KeyPairGeneratorSpec reemplazo con los equivalentes de KeyGenParameterSpec.Builder - falló la operación del almacén de claves
  • Diferencia de cifrado asimétrica - Android vs Java
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.