Cifra tus propios datos con el algoritmo 4D

Traducido automáticamente de Deepl

Como habrá notado hace tiempo, 4D le ofrece una forma sencilla de encriptar sus datos. Ahora, 4D también le permite utilizar el mismo algoritmo que el utilizado para la encriptación de datos, pero esta vez para sus propias necesidades. Así que ahora puede encriptar y desencriptar cualquier información que desee, ya sea un solo campo de una tabla o archivos externos.

Nota: Para ilustrar los nuevos comandos presentados en esta entrada del blog, he aquí un IDH que contiene análisis médicos falsos y sus informes externos en PDF. En este IDH, los informes están encriptados y usted los desencripta para obtener documentos legibles.

Hazte más fuerte

Hoy en día, cada vez más datos críticos necesitan ser encriptados para evitar hackeos o fugas de datos. Al permitirle encriptar fácilmente las tablas, 4D ya ha respondido a esta necesidad principal. Pero a veces, usted necesita encriptar sólo un campo de una tabla, o archivos externos vinculados a registros como informes, facturas o análisis médicos. Ya podía hacerlo utilizando la clase 4D.CryptoKey, pero los algoritmos asimétricos están más adaptados a los fines de la firma de información. Ahora le ofrecemos la capacidad de cifrar sus propios datos o archivos con un fuerte algoritmo simétrico AES-256, el mismo que 4D utiliza para el cifrado de datos y diarios.

Detrás de las cortinas

El nuevo Encrypt data BLOB obtiene un blob y calcula un blob encriptado utilizando parámetros como un objeto de pase de clave y una sal.

Un objeto de pase de clave es un objeto resultante de una New data key llamada al comando. También puede utilizar una frase de paso directamente en lugar de un objeto de paso de clave. Como 4D utiliza un algoritmo de tipo AES para el cifrado, el blob resultante tiene un tamaño múltiplo de 16 bytes. Así que si el tamaño del blob original no es un múltiplo de 16, el comando añadirá bytes nulos terminales para complementarlo.

Para la operación inversa, el nuevo comando Decrypt data BLOB obtiene un blob cifrado y calcula un blob descifrado utilizando los mismos parámetros. Sin embargo, ten cuidado, si los parámetros no tienen exactamente los mismos valores que los utilizados al encriptar, el blob desencriptado no será el mismo que el original. De hecho, ¡es el comportamiento esperado de la criptografía!

La sal no es tan mala

El uso de la sal es una forma de asegurarse de que los datos originales no pueden ser recuperados de los datos encriptados. Una forma de hackear los datos es mediante el análisis de frecuencias, es decir, comparando la información encriptada con información original muy idéntica. Si se encripta la misma información con la misma frase de contraseña pero con diferentes sales, la huella digital (información encriptada) será completamente diferente.

La sal es más relevante ya que sus valores son múltiples. Por ejemplo, cuando se encripta un campo o un archivo vinculado a un registro, se puede utilizar fácilmente la clave principal como sal. De este modo, aunque el contenido del campo o archivo original sea el mismo para varios registros, el contenido cifrado será completamente diferente.

EJEMPLO DE ENCRIPTACIÓN DE ARCHIVOS

Para manejar fácilmente el cifrado y descifrado de archivos con recuperación del tamaño original, puede utilizar los siguientes métodos.

Estos métodos gestionan el complemento de 16 bytes almacenando el tamaño original del archivo en el propio archivo encriptado para poder recuperarlo fácilmente durante la desencriptación.

//encryptFile
#DECLARE($originalFile : 4D .File; $passPhrase : Text ; $salt : Integer ; $encryptedFile : 4D .File)->$result : Boolean
// AES-type encryption : as resulting blob size is a multiple of 16 bytes, some final null bytes may be added.
var $fileContent ; $blobToEncrypt; $blobEncrypted : Blob
var $contentLength ; $offset : Integer

$fileContent:=$originalFile.getContent()
// Store original file length at the beginning of the blob to encrypt
$contentLength :=BLOB size($fileContent)
VARIABLE TO BLOB ($contentLength; $blobToEncrypt; $offset)
COPY BLOB ($fileContent; $blobToEncrypt; 0; $offset; $contentLength)
$result :=Encrypt data BLOB($blobToEncrypt; $passPhrase; $salt; $blobEncrypted)
If ($result)
$encryptedFile .setContent($blobEncrypted)
End if

//decryptFile
#DECLARE($encryptedFile : 4D .File; $passPhrase : Text ; $salt : Integer ; $decryptedFile : 4D .File)->$result: Boolean
// AES-type decryption : as encrypted blob size is a multiple of 16 bytes, some final null bytes may have been added.
var $fileContent ; $blobToDecrypt; $blobDecrypted : Blob
var $contentLength ; $offset : Integer

$blobToDecrypt:=$encryptedFile.getContent()
$result :=Decrypt data BLOB($blobToDecrypt; $passPhrase; $salt; $blobDecrypted)
If ($result)
// Retrieve original file length at the beginning of the decrypted blob
BLOB TO VARIABLE ($blobDecrypted; $contentLength; $offset)
COPY BLOB ($blobDecrypted; $fileContent; $offset; 0; $contentLength)
$decryptedFile .setContent($fileContent)
End if

CASO DE USO

Para ilustrar cómo se pueden utilizar estos nuevos comandos, a continuación se muestra un IDH que contiene algunos análisis médicos falsos y sus informes externos en PDF. En este IDH, los informes están encriptados y usted los desencripta para obtener documentos legibles.

IDH: Encriptación de BLOB

Ahora, depende de ti encriptar y desencriptar los datos como lo hace 4D.

Avatar
• Propietario de producto - Damien Fuzeau se ha unido al equipo de 4D Product en febrero de 2019. Como Propietario de producto, está a cargo de escribir historias de usuario, y luego traducirlas a especificaciones funcionales. Su trabajo también implica asegurarse de que las implementaciones de funcionalidades entregadas estén cumpliendo con las necesidades del cliente. Damien es licenciado en ingeniería de software por la Universidad de Nantes. Estuvo más de 23 años en su anterior empresa, primero como desarrollador (descubriendo 4D en 1997), y más tarde como gerente de ingeniería y arquitecto de software. Esta compañía es un Partner OEM de 4D y ha desplegado softwares empresariales basados en 4D para miles de usuarios, en cientos de servidores. Por lo tanto, Damien está acostumbrado al desarrollo y despliegue de 4D en un contexto multilingüe.