database - para - herramientas de android studio pdf
Contraseñas de aplicación y seguridad SQLite (1)
1) La recuperación de contraseña es peligrosa. La solidez de la contraseña se ve minada por la respuesta a una pregunta, este es el principal del enlace más débil. El pirateo de correo electrónico de Sara Palin fue posible debido a esta característica (muy insegura). Además, si almacena la contraseña en un "formato recuperable" como en un cifrado de bloque como AES o un cifrado de flujo como RC4 o un cifrado asimétrico como RSA, entonces está en clara violación de CWE-257 . Si realmente necesita esta característica, debe solicitar que el usuario restablezca su contraseña, si no la conoce, ¿por qué debería decirla?
Las contraseñas siempre deben ser hash usando un resumen seguro de mensajes. Actualmente, muchas funciones de resumen de mensajes son inseguras, md4, md5, sha0 y sha1 están todas rotas y nunca se deben usar para contraseñas. Actualmente, cualquier miembro de la familia sha2 es la mejor función para usar, recomiendo SHA-256. NIST actualmente está llevando a cabo un concurso para sha3 y no se finalizará hasta algún momento en 2012.
Las contraseñas también deben estar "saladas" con un gran valor aleatorio. Esta podría ser otra columna en su base de datos que luego se agrega a la contraseña de texto sin formato antes de pasarla a la función de resumen del mensaje. Esto hace que los ataques de diccionario sean imposibles a menos que el atacante pueda obtener la sal, también hace que los ataques pre calculados sean mucho más intensivos en recursos para llevar a cabo con éxito. A pesar del conocimiento popular, la salazón no detiene las tablas arcoiris, solo significa que necesita un conjunto MUCHO MÁS GRANDE de tablas de arcoiris.
2) ¿Dónde vas a poner la clave para tu base de datos encriptada? Sqlite es solo un archivo en el que puedes encriptar esto y luego descifrarlo cuando la aplicación se inicia, esto solo agrega algo de tiempo de carga, pero en tiempo de ejecución será igual de rápido. El verdadero problema es que no hay absolutamente ningún lugar en el que pueda poner un secreto en el dispositivo que un atacante no puede obtener. Un atacante tiene más control sobre el dispositivo que tú, un atacante puede hacer un jailbreak en el dispositivo y hacer lo que quiera. Incluso si la clave se transfiere en tiempo de ejecución, aún se puede obtener mirando la memoria del dispositivo. Cualquier esfuerzo para encriptar la base de datos puede verse menoscabado, puede hacerlo más difícil pero no detendrá a un hacker experto.
He estado buscando en Google información sobre las contraseñas de las aplicaciones y la seguridad de SQLite durante algún tiempo, y nada de lo que he encontrado realmente ha respondido a mis preguntas.
Esto es lo que trato de descubrir:
1) Mi aplicación va a tener una actividad de contraseña opcional que se llamará cuando se abra por primera vez la aplicación. Mis preguntas para esto son a) Si almaceno la contraseña a través de la preferencia de android o la base de datos SQLite, ¿cómo puedo garantizar la seguridad y privacidad de la contraseña, yb) cómo debe manejarse la recuperación de contraseña?
En cuanto a b) desde arriba, he pensado en solicitar una dirección de correo electrónico cuando la función de contraseña está habilitada, y también una pregunta de sugerencia de contraseña para usarla al solicitar la recuperación de contraseña. Al responder con éxito la pregunta, la contraseña se envía por correo electrónico a la dirección de correo electrónico que se envió. No estoy completamente seguro de la seguridad y privacidad del método de correo electrónico, especialmente si el correo electrónico se envía cuando el usuario está conectado a una red inalámbrica abierta y pública.
2) Mi aplicación utilizará una base de datos SQLite, que se almacenará en la tarjeta SD si el usuario tiene una. Independientemente de si está almacenado en el teléfono o la tarjeta SD, ¿qué opciones tengo para el cifrado de datos y cómo afecta eso el rendimiento de la aplicación?
Gracias de antemano por el tiempo tomado para responder estas preguntas. Creo que puede haber otros desarrolladores que luchan con las mismas preocupaciones.