MySQL AES_ENCRYPT Logs Output

0

Necesario: Necesito poder almacenar datos de usuario cifrados AES (entradas de diario) en mi base de datos y esas entradas deben poder buscarse en texto sin formato.

Problema: MySQL envía las consultas a sus registros en texto sin formato.

Historial: Ya he logrado el comportamiento deseado al permitir que MySQL maneje el cifrado y buscar con AES_DYCRYPT y LIKE , pero eso significa que MySQL está generando las entradas de mis usuarios junto con mi Clave AES en texto plano a sus registros.

Posible solución: Intenté mover mi paso de encriptación al servidor antes de enviar datos a MySQL, pero no puedo hacer que el DB maneje el descifrado y, por lo tanto, la búsqueda de texto sin formato complica las cosas. No quiero tener que ingresar todas las entradas de un usuario específico y luego filtrarlas según la consulta de texto del servidor.

Pregunta: ¿Qué tan grande es un agujero de seguridad que MySQL envía todas las consultas a sus registros en texto sin formato cuando decide utilizar la función AES_ENCRYPT de MySQL? Debería usar las funciones de encriptación de MySQL para poder usar su función LIKE , o debería encriptar en el servidor y buscar otras soluciones, como almacenar un índice de palabras con hash como una nueva columna para poder proporcionar algún tipo de texto. buscar?

Debo tener en cuenta que estoy usando una solución MySQL alojada que, al precio que estoy pagando actualmente, no me permite administrar la configuración del administrador. La empresa de alojamiento tiene acceso a los registros.

    
pregunta jpodwys 29.01.2016 - 00:24
fuente

1 respuesta

1

Por lo general, no se recomienda el uso de las funciones integradas de MySQL para cifrar y descifrar información por la razón que describió: MySQL a menudo está configurado para registrar consultas. Si ese es el caso, los datos de texto sin formato (y las claves de cifrado / descifrado) se escriben en texto sin formato en los registros.

Habiendo dicho eso: si debe usar aes_encrypt y aes_decrypt para cifrar la información que está almacenando en su base de datos, debe deshabilitar el registro. Consulte enlace para obtener información sobre cómo hacerlo.

Si su instancia de MySQL se está ejecutando en un host que no le permite deshabilitar el registro, entonces puede ser el momento de hospedar MySQL (lo que no es difícil de hacer en un VPS).

Por último, pero no menos importante, las declaraciones como ... where aes_decrypt(fieldname, key) like '%xyz%' se mostrarán cuando sus tablas comiencen a crecer, ya que MySQL tendrá que descifrar los datos en cada fila y aplicar la comparación similar. Ambas operaciones (el descifrado y similares) requieren bastante recursos, y los índices no ayudan.

    
respondido por el mti2935 29.01.2016 - 03:00
fuente

Lea otras preguntas en las etiquetas