sql >> Base de Datos >  >> RDS >> Mysql

¿Cuál es la mejor manera de almacenar datos confidenciales en MySQL?

En serio, NO USE aes_encrypt() de MySQL Es el método más inseguro de usar un cifrado de bloque. Está usando el modo ECB, y puedo dar un ejemplo simple de demostración de por qué esto es un error grave.

Mensaje de texto sin formato:

El mismo mensaje encriptado con el modo ECB (no importa qué cifrado use):

El mismo mensaje EXACTO usando el modo CBC (nuevamente, no importa qué cifrado use):

Hay aún más razones no usar aes_encrypt de mysql, en particular, cada consulta que envíe también tendrá la clave aes que usa. Si la base de datos se ve comprometida, el atacante habilitará el registro y simplemente obtendrá su clave aes y descifrará la base de datos completa. .

Entonces, ¿qué debería ¿tu usas? Me gusta CAPÍTULO06/mcrypt.php&q=lang:php%20cbc%20aes%20mcrypt">esta clase Siendo por el momento. Está usando el modo CBC con una función String2Key y un IV. Puede usar la clave principal como su IV, cada mensaje debe tener un IV único. Está bien si el atacante conoce el IV y si son secuenciales, siempre y cuando la implementación del cifrado de bloque sea segura. Reutilización de un IV hecho WEP mucho menos seguro .