Sqlcipher 'open' performance con cordova y Cordova-SQLitePlugin

Tengo un sqlcipher DB que es relativamente complejo (27 tablas) pero con entradas pequeñas (entre 50-200 entradas por tabla). Cuando estoy ejecutando una instrucción SELECT (igual con la vista correspondiente), uniendo 3 tablas, haciendo un par de "LIKE's" (optimizado con EXPLAIN), la CPU del cliente de escritorio (con sqlcipher) toma 3ms para la consulta.

Sin embargo la misma consulta en Android con el Cordova-SQLitePlugin tarda casi 1900ms – debido al hecho de abrir la base de datos cuesta unos 1800ms , que obviamente se repite después de cada carga de página.

Las consultas se emiten así:

var db = window.sqlitePlugin.openDatabase({name: "myDatabase", key: "mySecret", bgType: 1}); db.transaction(function(transaction) { transaction.executeSql(query, [],function(transaction, result) { callback(result); }, null); },null,null); 

¿Hay algo que pueda hacer? Gracias de antemano por cualquier pista y pistas …

Saludos Chris

El rendimiento de SQLCipher para abrir una base de datos es deliberadamente lento. SQLCipher utiliza la clave PBKDF2 para realizar la derivación clave (es decir, miles de operaciones SHA1) para defenderse contra ataques de fuerza bruta y diccionario. Consulte http://sqlcipher.net/design para obtener más información.

La mejor opción es almacenar en caché la conexión de la base de datos de modo que pueda ser utilizada varias veces sin tener que abrir y llave la base de datos en cada pantalla. Si esto es posible, abrir la base de datos una vez durante el inicio es el curso de acción preferido. El acceso subsiguiente en el mismo identificador de base de datos no activará la derivación clave, por lo que el rendimiento será bastante rápido.

Si esto no es posible, la otra opción es desactivar o debilitar la derivación clave. Esto hará que SQLCipher utilice menos rondas de PBKDF2 al derivar la clave. Si bien esto hará que la base de datos abra más rápido, es significativamente más débil desde una perspectiva de seguridad. Por lo tanto, no se recomienda generalmente. Dicho esto, aquí está la información sobre cómo reducir las iteraciones de KDF:

http://sqlcipher.net/sqlcipher-api/#kdf_iter

  • Android Proguard SqlCipher NoClassDefFoundError
  • Estoy usando SQLCIPHER para leer o escribir la base de datos que consigue el error
  • Java.lang.UnsatisfiedLinkError: No se pudo cargar stlport_shared: findLibrary devuelto null (tess-two)
  • SQLCipher - Abrir una base de datos cifrada en el escritorio
  • Error de enlace no satisfecho al utilizar la biblioteca SQLCipher
  • Usando SQLCipher con el archivo de base de datos SQLite enviado sqlite
  • Uso de DBFlow, ¿cómo cifrar una base de datos ya existente?
  • Net.sqlcipher.database.SQLiteException: no es un error:
  • ¿Cómo puedo usar ORMLite con SQLCipher juntos en Android?
  • Integración de SQLCIPHER en el proyecto de Android Studio
  • ¿Puede alguien explicarme el paso de compilación en la creación de un archivo binario sqlcipher?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.