ENCRYPT_AES256
La función ENCRYPT_AES256 devuelve un valor que es el resultado del cifrado de serie-datos utilizando el algoritmo de cifrado AES con una clave de cifrado de 256 bits. La contraseña utilizada para el descifrado es el valor serie-contraseña o el valor de contraseña de cifrado (asignado por la sentencia SET ENCRYPTION PASSWORD).
- serie-datos
- Expresión que devuelve el valor de serie que se va a cifrar. La expresión de serie debe ser un tipo de datos de serie incorporado.
El atributo de longitud para el tipo de datos de serie-datos está limitado a 24 bytes (o 32 bytes) menos que la longitud máxima del tipo de datos de resultado sin un argumento serie-sugerencia y 56 bytes (o 64 bytes) menos que la longitud máxima del tipo de datos de resultado cuando se especifica el argumento serie-sugerencia .
- serie-contraseña
- Expresión que devuelve un valor de serie de caracteres con al menos 6 bytes y no más de 127 bytes. La expresión no debe ser CLOB y el CCSID de la expresión no debe ser 65535. El valor representa la contraseña utilizada para cifrar la serie-datos. Si el valor del argumento de contraseña es nulo o no se proporciona, los datos se cifrarán utilizando el valor ENCRYPTION PASSWORD, que se debe haber establecido utilizando la sentencia SET ENCRYPTION PASSWORD.
- serie-sugerencia
- Expresión que devuelve un valor de serie de caracteres con un máximo de 32 bytes que ayudará a los propietarios de datos a recordar contraseñas (por ejemplo, 'Océano' es una sugerencia para recordar 'Pacífico'). La expresión no debe ser CLOB y el CCSID de la expresión no debe ser 65535. Si se especifican una serie-contraseña y una serie-sugerencia , la sugerencia se incorpora en el resultado y se puede recuperar utilizando la función GETHINT. Si se especifica una serie-contraseña y este argumento es el valor nulo o no se proporciona, no se incorporará ninguna sugerencia en el resultado. Si no se especifica una serie-contraseña , la sugerencia se puede especificar utilizando la sentencia SET ENCRYPTION PASSWORD.
El tipo de datos del resultado se determina mediante el primer argumento tal como se muestra en la tabla siguiente:
| Tipo de datos del primer argumento | Tipo de datos del resultado |
|---|---|
| BINARY o VARBINARY | VARBINARY |
| CHAR, VARCHAR, GRAPHIC o VARGRAPHIC | VARCHAR FOR BIT DATA |
| BLOB, CLOB o DBCLOB | BLOB |
El atributo de longitud del resultado depende de los argumentos especificados:
- Cuando se especifica una serie-contraseña pero no se especifica una serie-sugerencia , el atributo de longitud de serie-datos más 32 más el número de bytes hasta el siguiente límite de 16 bytes.
- De lo contrario, el atributo de longitud de serie-datos más 64 más el número de bytes hasta el siguiente límite de 16 bytes.
- La longitud real de serie-datos más un número de bytes para llegar a un límite de 16 bytes.
- La longitud real de la sugerencia más un número de bytes para llegar a un límite de 16 bytes. La longitud real de la sugerencia es cero si no se especifica serie-sugerencia como argumento de función o en la sentencia SET ENCRYPTION PASSWORD.
- n, donde n (la cantidad de sobrecarga necesaria para cifrar el valor) es 24 bytes (o 32 bytes si se utilizan valores CCSID diferentes para la serie-datos, la contraseña o la sugerencia).
Si el primer argumento puede ser nulo, el resultado puede ser nulo; si el primer argumento es nulo, el resultado es el valor nulo.
Tenga en cuenta que el resultado cifrado es más largo que el valor de serie-datos . Por consiguiente, al asignar valores cifrados, asegúrese de que el destino se declara con un tamaño suficiente para contener el valor cifrado entero.
Notas
Protección por contraseña: Para evitar el acceso involuntario a la contraseña de cifrado, no especifique serie-contraseña como una constante de serie en el origen para un programa, procedimiento o función. En su lugar, utilice la sentencia SET ENCRYPTION PASSWORD o una variable del lenguaje principal o una variable global.
Al conectarse a una base de datos relacional remota, se recomienda encarecidamente el uso de una conexión TLS para proteger la contraseña. Sin TLS, la contraseña de cifrado se envía "en el borrado". Es decir, la contraseña en sí no está cifrada.
Algoritmo de cifrado: el algoritmo de cifrado interno utilizado es del CLiC Toolkit de IBM Research. La clave de cifrado de 256 bits se deriva de la contraseña utilizando un resumen de mensaje SHA-3 .
Cifrado de contraseñas y datos: es responsabilidad del usuario realizar la gestión de contraseñas. Una vez que los datos están cifrados, sólo se puede utilizar la contraseña utilizada para cifrarlos para descifrarlos. Tenga cuidado al utilizar variables CHAR para establecer valores de contraseña ya que pueden rellenarse con espacios en blanco. El resultado cifrado puede contener un terminador nulo y otros caracteres no imprimibles.
Definición de columna de tabla: al definir columnas y tipos diferenciados para que contengan datos cifrados:
- La columna debe definirse con un tipo de datos de CHAR FOR BIT DATA, VARCHAR FOR BIT DATA, BINARY, VARBINARY o BLOB.
- El atributo de longitud de la columna debe incluir n bytes adicionales, donde n es la sobrecarga necesaria para cifrar los datos tal como se ha descrito anteriormente.
Cualquier asignación o conversión a una columna sin uno de estos tipos de datos o con una longitud menor que la longitud de datos sugerida puede dar como resultado un error de asignación o, si la asignación es satisfactoria, una anomalía y pérdida de datos cuando los datos se descifran posteriormente. Los blancos son valores de datos cifrados válidos que se pueden truncar cuando se almacenan en una columna demasiado corta.
Algunos cálculos de longitud de columna de ejemplo:
Maximum length of non-encrypted data 6 bytes
Number of bytes to the next 16 byte boundary 10 bytes
Overhead 24 bytes (or 32 bytes)
--------
Encrypted data column length 40 bytes (or 48 bytes)
Maximum length of non-encrypted data 32 bytes
Number of bytes to a 16 byte boundary 0 bytes
Overhead 24 bytes (or 32 bytes)
--------
Encrypted data column length 56 bytes (or 64 bytes)
Administración de datos cifrados: Los datos cifrados solo se pueden descifrar en servidores que dan soporte a las funciones de descifrado que corresponden a la función ENCRYPT_AES256 . Por lo tanto, la réplica de columnas con datos cifrados sólo debe realizarse en servidores que den soporte a las funciones de descifrado.
Ejemplo
- Supongamos que la tabla EMP1 tiene una columna de seguridad social denominada SSN. Este ejemplo utiliza el valor ENCRYPTION PASSWORD para contener la contraseña de cifrado.
SET ENCRYPTION PASSWORD = 'Ben123' INSERT INTO EMP1 (SSN) VALUES ENCRYPT_AES256( '289-46-8832' ) - Este ejemplo pasa explícitamente la contraseña de cifrado.
INSERT INTO EMP1 (SSN) VALUES ENCRYPT_AES256( '289-46-8832', 'Ben123' ) - La sugerencia 'Océano' se almacena para ayudar al usuario a recordar la contraseña de cifrado 'Pacífico'.
INSERT INTO EMP1 (SSN) VALUES ENCRYPT_AES256( '289-46-8832', 'Pacific', 'Ocean' ) - Este ejemplo utiliza una variable global para pasar el valor de contraseña.
CREATE VARIABLE MYLIB.EMP1_ENCRYPT_PW VARCHAR(127); SET MYLIB.EMP1_ENCRYPT_PW = 'pwd to use for emp1 table'; INSERT INTO EMP1 (SSN) VALUES ENCRYPT_AES256( '289-46-8832', MYLIB.EMP1_ENCRYPT_PW )
