¿Son seguras las funciones de encriptación y compresión de MariaDB?

3
MariaDB [(none)]> SET @key_str = SHA2('Is it secure?',512);
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> SET @crypt_str = AES_ENCRYPT('cleartext',@key_str);
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> select @crypt_str from dual;
+------------------+
| @crypt_str       |
+------------------+
| ���5��!$�l           |
+------------------+
1 row in set (0.00 sec)

MariaDB [(none)]> SELECT AES_DECRYPT(@crypt_str,@key_str) from dual;
+----------------------------------+
| AES_DECRYPT(@crypt_str,@key_str) |
+----------------------------------+
| cleartext                        |
+----------------------------------+
1 row in set (0.01 sec)

Docs in MariaDB KB Funciones de cifrado, hashing y compresión, como ENCRYPT, DECRYPT , COMPRIMIR, CONTRASEÑA . MariaDB KB no escribe sobre qué tan seguras son esas funciones.

¿Recomienda una aplicación nativa en la nube (factor 12) para descargar el cifrado en la base de datos (en mi caso, MariaDB)? ¿Se puede mejorar mi código de ejemplo para que sea más seguro (pero solo con las funciones de MariaDB)?

Encontré una (quizás) revisión sesgada de un proveedor de productos MyDiamo (desean vender):

  

Por qué las funciones de cifrado interno de MySQL no son suficientes

     

1. Los algoritmos de cifrado interno de MySQL no son seguros

     

MySQL proporciona muchos algoritmos como AES, DES, SHA-1 y MD5   algoritmos Entre estos algoritmos, se ha comprobado que MD5 y SHA-1 no están   Seguro como han sido rajados. Además, para los algoritmos AES, el actual   La versión de MySQL 5.6 generalmente disponible proporciona solo la operación ECB   modo que también se ha demostrado que no es seguro.

     

2. Las funciones de cifrado interno de MySQL no proporcionan administración de claves

     

Al cifrar datos, no solo es importante el cifrado en sí, sino que también   También la gestión de la clave es importante. La importancia de la clave no puede ser   Destacó lo suficientemente fuerte cuando el cifrado es importante. La mayoría de cifrado   Sin embargo, las soluciones no prestan mucha atención a la clave. Cuando usas   MySQL funciones de cifrado interno, la clave está expuesta a la fuente,   por lo tanto, no existe una gestión de claves adecuada.

    
pregunta Ivanov 18.04.2018 - 08:11
fuente

1 respuesta

2

Mientras que MySQL actualmente proporciona otros modos de cifrado, MariaDB parece que todavía es compatible con el modo ECB inseguro . En MySQL, puede establecer el modo en el modo CBC ligeramente mejor con:

SET @@session.block_encryption_mode = 'aes-256-cbc';

Si no puede hacer esto en MariaDB, entonces no es compatible con ningún modo alternativo. Incluso en MySQL donde se admite, CBC no es un gran modo. Lo que realmente se necesita es cifrado autenticado . Ya que ni MySQL ni MariaDB admiten eso, debería estar a la altura de la aplicación que usa la base de datos.

El hashing de la contraseña también es pobre. De manera predeterminada, (desafortunadamente) la documentación lo alienta a eliminar la contraseña con SHA-1 o SHA-2, que son hashes rápidos pero no están diseñados para ser un KDF. Debido a la velocidad, pueden ser atacados muy efectivamente. Este peligro se amplifica porque no se usa sal por defecto. A menos que la "contraseña" sea una cadena generada aleatoriamente, esto es inadecuado para la seguridad. Debe utilizar un KDF seguro , que no se proporciona de forma nativa.

En cuanto a las funciones de compresión, ¿qué las haría seguras o inseguras? Usan la biblioteca de compresión con la que se compiló MariaDB y solo devuelven datos comprimidos. La seguridad en términos de ejecución de código arbitrario debe recaer principalmente en la biblioteca vinculada que se está utilizando (por ejemplo, zlib).

  

¿Recomienda una aplicación nativa en la nube (factor 12) para descargar el cifrado en la base de datos (en mi caso, MariaDB)? ¿Se puede mejorar mi código de ejemplo para que sea más seguro (pero solo con las funciones de MariaDB)?

Lamentablemente, las recomendaciones de productos están fuera de tema para este sitio. Debe diseñar la aplicación que utilice la base de datos de modo que admita un cifrado sólido y autenticado con un KDF sólido. Si simplemente necesita cifrar todos de su base de datos con la misma clave y solo se preocupa por la seguridad de los datos en reposo, simplemente puede colocar los archivos de la base de datos en un directorio cifrado.

    
respondido por el forest 18.04.2018 - 08:51
fuente

Lea otras preguntas en las etiquetas