Protección de datos en la aplicación de Android con un PIN de 6 dígitos

5

Digamos que en una aplicación de Android, el usuario debe ingresar un PIN de 6 dígitos al inicio. Digamos también que tenemos algunos datos confidenciales en esta aplicación que nos gustaría cifrar.

La forma en que lo haría es:

  • Usando una función de derivación de clave (por ejemplo, PBKDF2) generamos una clave desde el PIN.
  • Cifre los datos confidenciales con AES usando la clave (y una configuración decente como el relleno CBC +).
  • Almacena datos encriptados donde sea, por ejemplo, en preferencias compartidas.

El problema principal que veo aquí: el espacio del PIN original para un PIN de 6 dígitos es 10 ^ 6, que es ridículamente pequeño para usar como base de su cifrado ...

¿Podemos realmente ajustar esto para que los datos almacenados sean razonablemente seguros por un tiempo?

Incluso si ajustamos nuestro KDF de modo que una derivación simple demore 1 segundo (no creo que podamos esperar que nuestros usuarios esperen mucho más durante el inicio de la aplicación), luego pasar por 1'000'000 de ellos tomará solo 11.5 días (asumiendo la misma potencia de procesamiento que el teléfono, lo cual no es probable ...).

  

Restricciones:
  Obviamente, el uso de un PIN más largo / fuerte ayudaría, pero lamentablemente incluso un PIN de 6 dígitos es visto como un obstáculo para los usuarios, por lo que esta no es una opción. Además, la fuerza KDF está limitada por la cantidad de tiempo que podemos esperar que esperen los usuarios durante el inicio de la aplicación, lo que yo diría que es del orden de 1 segundo.

    
pregunta fgysin 20.04.2017 - 10:52
fuente

2 respuestas

1

Mi opción recomendada sería almacenar los datos, o al menos almacenar el lado del servidor clave.

Ya que esto no es posible para usted, le devolvería a la administración que existen requisitos conflictivos. Yo diría que el espacio de claves es demasiado pequeño para que el cifrado proporcione un valor real. Recomendaría dar a la administración una estimación real de 156 conjeturas por segundo (de este artículo enlace ), lo que significaría que un cracker tendría todos los resultados posibles dentro de dos horas. El hardware de craqueo personalizado será mucho más rápido que un dispositivo móvil. Vea aquí un ejemplo: enlace .

Informaría a la gerencia que el requisito fuera de línea con un espacio de teclas tan pequeño impediría proteger adecuadamente los datos. Si desean que los datos estén seguros, deberán cambiar el pin de 6 dígitos, o deberán cambiar el requisito sin conexión.

    
respondido por el user52472 24.04.2017 - 16:32
fuente
1

El código PIN no debe considerarse un token de seguridad. Es solo una cuestión de la interfaz de usuario y, como tal, puede restringir la cantidad de intentos fallidos para ingresar y / o introducir esperas incrementales entre dichos intentos.

Los datos en sí pueden (y deben) cifrarse con una clave segura. Esto protege los datos locales del craqueo fuera de línea (agente malintencionado que intenta leer el disco directamente). En Android 7.0 y superior, puede confiar en Direct Boot . Su aplicación puede verificar Estado de cifrado de almacenamiento y comportarse en consecuencia.

Esto no proporciona una protección completa contra los usuarios malintencionados que instalan su aplicación en un dispositivo rooteado y desean descifrar sus datos. Definitivamente, le recomendamos que verifique si el dispositivo está rooteado, pero debe saber que un agente determinado (usuario o malware) puede habilitar la raíz que su inspección no detectará.

    
respondido por el Alex Cohn 19.02.2018 - 12:19
fuente

Lea otras preguntas en las etiquetas