Cómo almacenar la clave utilizada en SQLCipher para android

Estoy usando SQLCipher para Android. He hecho todas las cosas necesarias que se necesitan para cargar las libs como se menciona en http://sqlcipher.net/sqlcipher-for-android/

Observé que usted fijó la contraseña es decir la llave adentro:

SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFile, "test123", null); 

Entonces, ¿cómo está su contraseña a salvo de un hacker? Como se puede acceder desde un archivo java. ?

¿Hay alguna manera correcta donde puedo almacenar la contraseña?

Gracias, Nibs

Entonces, ¿cómo está su contraseña a salvo de un hacker?

No es. Hard-codificación de una frase de contraseña hace para las demostraciones simples, sin embargo.

¿Hay alguna manera correcta donde puedo almacenar la contraseña?

El usuario debe proporcionar la frase de acceso para la base de datos del usuario a través de su interfaz de usuario. A continuación, el usuario almacena la frase de contraseña en la cabeza del usuario, o tal vez combinar lo que hay en la cabeza del usuario con otra cosa para la autenticación de dos factores ligeros (p.

Me gustaría sugerir el siguiente enfoque:

  • La primera vez que crea la base de datos tiene que crear una contraseña aleatoria.
  • Almacena esta contraseña en el almacén de claves.
  • Cada vez que abra la aplicación, leerá la contraseña del almacén de claves y la utilizará para conectarse a la base de datos.

Entonces, ¿cómo funciona el acceso de keystore? Vea la entrada de blog 1 y la entrada de blog 2 y el repositorio github correspondiente. La solución está disponible para Android versión 2.1 a 4.3.

Grandes advertencias:

  1. La solución sólo funciona con el acceso privado a la API, por lo que podría romperse en el futuro.
  2. Se requiere una contraseña de bloqueo de pantalla para almacenar las teclas y todas las teclas se borran si un usuario elimina su contraseña de la pantalla de bloqueo.

Lo que se pasa por alto es el hecho de que la demostración dada por SQLCipher es puramente de demostración. Depende de la imaginación del desarrollador para superar lo obvio. Un poco menos obvio es que NO almacenarías la clave en una variable local privada, ya que realizar una búsqueda de cadenas en tu clase podría revelar tu clave, reduciendo el diccionario necesario en un ataque exitoso de fuerza bruta. Abra su classes.dex en un editor hexadecimal y pruébelo.

No se trata de los archivos. Java que debe preocuparse, ya que sólo sus desarrolladores deben estar allí. Es los archivos .class. El siguiente nivel de esfuerzo es un cierto esfuerzo de ofuscación, pero eso realmente sólo limita a los impacientes.

Echa un vistazo a esta discusión https://groups.google.com/forum/#!topic/sqlcipher/OkE0rUwXEb8

  • android sqlite consulta con múltiples donde
  • Ormlite leer Fecha como 'yyyy-MM-dd'
  • Cómo convertir msgstore.db.crypt7 a msgstore.db desde whatsapp en android?
  • Aplicación de Android con base de datos constantemente "inicio / espera de un bloqueo gc alloc"
  • CursorIndexOutOfBoundsException Index 0 solicitado, con un tamaño de 0
  • Tipos de datos utilizados en SQLite
  • El método SQLite .query (), la cláusula WHERE solo toma cadenas de comillas dobles
  • ¿Hay alguna posibilidad de sincronizar los datos de la tabla sqlite entre dos móviles android usando wi-fi
  • Cómo limitar los datos añadidos por bucle en sqlite android
  • Android sqlite delete no elimina realmente las filas
  • Opciones de SyncAdapter
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.