MySQL AES_ENCRYPT longitud de clave de cadena

1

En MySQL hay funciones incorporadas AES_ENCRYPT() y AES_DECRYPT() que toman la forma de:

AES_ENCRYPT(str, key_str)

¿Qué longitud se requiere para el argumento key_str ? ¿Puede ser variable? ¿Cuál es la longitud mínima y máxima de la clave de cadena?

    
pregunta Justin 30.07.2018 - 08:24
fuente

2 respuestas

2

La función AES_ENCRYPT de MySQL es insegura por defecto, ya que utiliza Modo ECB a menos que se configure de otro modo . La documentación proporciona un ejemplo de cómo usar el modo CBC con una clave de 256 bits (aunque su ejemplo de una clave es terrible):

mysql> SET block_encryption_mode = 'aes-256-cbc';
mysql> SET @key_str = SHA2('My secret passphrase',512);
mysql> SET @init_vector = RANDOM_BYTES(16);
mysql> SET @crypt_str = AES_ENCRYPT('text',@key_str,@init_vector);
mysql> SELECT AES_DECRYPT(@crypt_str,@key_str,@init_vector);

La longitud de la clave que desea utilizar depende de lo que block_encryption_mode usted configura. Las longitudes de clave admitidas son 128, 192 y 256 (que también son las únicas longitudes de clave permitidas por AES).

Se puede ver aquí eso si la clave proporcionada es demasiado pequeña, se rellenará con un valor nulo (debido al memset ), y si es demasiado grande, xo los bytes adicionales con el primer key_size bytes (por ejemplo, si el tamaño de la clave es de 4 bytes y la clave provista es 12345678, será xor 5678 con 1234 y usará el resultado como la clave). Para mayor seguridad, debe usar una clave aleatoria del tamaño que configure AES para usar. Para AES-128 desea una clave aleatoria de 128 bits, o 32 caracteres hexadecimales:

SELECT AES_ENCRYPT('text', UNHEX('6133C3D40B2BF9267E85ED0C2FDDC686'), @init_vector);

Para AES-256, desea una clave aleatoria de 256 bits, que es de 64 caracteres hexadecimales:

SELECT AES_ENCRYPT('text', UNHEX('08672D4D2424CFE10E5221BF2EB8409C57431B30B55D6AE2D167E5F9682EF711'), @init_vector);

La documentación de MySQL no tiene en cuenta que el IV (vector de inicialización) no debe ser reutilizado para múltiples encriptaciones, y por supuesto, el IV debe almacenarse para permitir el descifrado.

También se debe tener en cuenta que ninguno de los modos de cifrado que MySQL los apoyos proporcionan autenticidad , y de los modos admitidos, ECB es terrible y CBC, CFB y OFB son todos malleable .

    
respondido por el AndrolGenhald 31.07.2018 - 22:47
fuente
0

Longitud de clave variable:

Sí, puede utilizar una longitud de clave diferente si va a utilizar varias claves. Y el tamaño de la clave depende del tipo de datos.

Por ejemplo, NSA considera que las claves de 128 bits son lo suficientemente buenas solo para datos con la designación SECRET. Para TOP SECRET, sin embargo, requiere claves de 256 bits. El informe de la Red Europea de Excelencia en Criptología también recomienda claves de 128 bits para la protección a largo plazo, pero dice que las claves de 256 bits son la única buena protección contra las computadoras cuánticas.

Tamaños de clave:

AES admite tres tamaños de clave diferentes. Si especifica una clave más pequeña, entonces se rellenará automáticamente con AES.

  1. 128 bits
  2. 192 bits
  3. 256 bits

Las claves estándar de 128 bits se utilizan en AES_Encrypt () y AES_Decrypt () . Sin embargo, puedes extenderlo a 256.

Asegúrese de seleccionar el tipo de campo como binario porque AES_ENCRYPT() cifra una cadena y devuelve una cadena binaria. AES_DECRYPT() descifra la cadena cifrada y devuelve la cadena original.

Código de ejemplo:

Tabla :

CREATE  TABLE 'user' (
  'id' BIGINT UNSIGNED NOT NULL AUTO_INCREMENT ,
  'first_name' VARBINARY(100) NULL ,
  'address' VARBINARY(200) NOT NULL ,
  PRIMARY KEY ('id'));

Insertar declaración con función de cifrado:

INSERT into user (first_name, address) VALUES (AES_ENCRYPT('John', 'usa2018'), AES_ENCRYPT('Obama', 'usa2019'));

Declaración de selección con función de descifrado:

SELECT AES_DECRYPT(first_name, 'usa2018'), AES_DECRYPT(address, 'usa2019') from user;
    
respondido por el Atlas_Gondal 30.07.2018 - 08:54
fuente

Lea otras preguntas en las etiquetas