SQLCipher y clave PRAGMA en iOS

1

Estoy un poco confundido en cuanto a cómo SQLCipher maneja la clave PRAGMA proporcionada para cifrar la base de datos SQLite

Para el fondo: Estoy buscando opciones para cifrar los datos de la aplicación en reposo. Desde la investigación que he realizado, iOS tiene una seguridad bastante robusta hasta que el dispositivo está desbloqueado, entonces es básicamente gratuito para todos. Lo que quiero hacer es asegurar que incluso si el dispositivo se ve comprometido, hará que sea muy difícil para un atacante acceder a los datos dentro de la aplicación. Para esto, hemos implementado una contraseña de aplicación, y después de una cierta cantidad de conjeturas incorrectas, se borran los datos de la aplicación. Sin embargo, tengo entendido que si un atacante obtiene un dispositivo y lo desbloquea, puede volcar cualquier dato de llavero y también puede ver cualquiera de los datos de la aplicación almacenados en texto sin formato (ya que todo se descifra una vez que se desbloquea el dispositivo). ).

Después de investigar más, parece que la única opción viable sería utilizar SQLCipher y cifrar la base de datos utilizada en la aplicación. Entiendo que para hacer eso, debemos proporcionar una clave PRAGMA (frase de contraseña) a SQLCipher para que pueda ejecutarlo a través de una función PBKDF2 y calcular los HMAC de la página para cada página que esté encriptando. Así que de la frase de contraseña, se deriva una clave.

Mi pregunta es: ¿la introducción de la contraseña de la aplicación como clave PRAGMA de la base de datos representa una amenaza para la seguridad? Si es así, ¿cómo puedo minimizar esa amenaza? Mi idea fue usar la contraseña de la aplicación para crear una clave estirando y usando la contraseña (usando PBKDF2) y junto con algún otro dato (es decir, el UID del dispositivo o algo similar) para crear un HMAC que pueda usar como frase de contraseña para pasar junto a SQLCipher.

El objetivo aquí es tratar de evitar el almacenamiento de cualquier parte de la información reveladora que un atacante puede usar para descifrar la base de datos sin un poco de trabajo por su parte (es decir, evitar el almacenamiento de claves / contraseñas en el llavero para la aplicación, fácil de adivinar) PRAGMA clave, etc.). Si hay alguna sugerencia sobre cómo lograrlo, hágamelo saber.

Gracias de antemano por cualquier ayuda que pueda proporcionar.

    
pregunta jrgonzalez 29.04.2016 - 16:20
fuente

0 respuestas

Lea otras preguntas en las etiquetas