Cryptage de vos propres données avec l’algorithme 4D

Traduit automatiquement de Deepl

Comme vous l’avez peut-être remarqué il y a quelque temps, 4D vous offre un moyen simple de crypter vos données. Désormais, 4D vous permet également d’utiliser le même algorithme que celui utilisé pour le cryptage des données, mais cette fois pour vos propres besoins. Vous pouvez donc désormais crypter et décrypter toutes les informations que vous souhaitez, qu’il s’agisse d’un simple champ dans un tableau ou de fichiers externes.

Remarque: pour illustrer les nouvelles commandes présentées dans ce billet de blog, voici un IDH contenant de fausses analyses médicales et leurs rapports PDF externes. Dans cet IDH, les rapports sont chiffrés et vous les déchiffrez pour obtenir des documents lisibles.

Devenir plus fort

De nos jours, de plus en plus de données critiques doivent être cryptées pour éviter le piratage ou les fuites de données. En vous permettant de chiffrer facilement les tableaux, 4D a déjà répondu à ce besoin principal. Mais parfois, vous avez besoin de crypter uniquement un champ dans un tableau, ou des fichiers externes liés à des enregistrements tels que des rapports, des factures ou des analyses médicales. Vous pouviez déjà le faire en utilisant la classe 4D.CryptoKey, mais les algorithmes asymétriques sont plus adaptés à des fins de signature d’information. Nous vous offrons maintenant la possibilité de crypter vos propres données ou fichiers avec un puissant algorithme symétrique AES-256, le même que celui utilisé par 4D pour le cryptage des données et des journaux.

Derrière les rideaux

La nouvelle commande Encrypt data BLOB récupère un blob et calcule un blob crypté à l’aide de paramètres tels qu’un objet passe-partout et un sel.

Un objet de passage de clé est un objet résultant d’un New data key appel de commande. Vous pouvez également utiliser directement une phrase de passe au lieu d’un objet key pass. Comme 4D utilise un algorithme de type AES pour le cryptage, le blob résultant a une taille multiple de 16 octets. Ainsi, si la taille du blob d’origine n’est pas un multiple de 16, la commande ajoutera des octets nuls terminaux pour la compléter.

Pour l’opération inverse, la nouvelle commande Decrypt data BLOB reçoit un blob crypté et calcule un blob décrypté en utilisant les mêmes paramètres. Attention cependant, si les paramètres n’ont pas exactement les mêmes valeurs que ceux utilisés lors du chiffrement, le blob déchiffré ne sera pas le même que celui d’origine. En fait, c’est le comportement attendu de la cryptographie !

Le sel n’est pas si mauvais

L’utilisation de sel est un moyen de s’assurer que les données originales ne peuvent pas être récupérées à partir de données cryptées. Une façon de pirater les données est l’analyse de fréquence, c’est-à-dire la comparaison des informations cryptées avec des informations originales très similaires. Lorsque vous chiffrez les mêmes informations avec la même phrase de passe mais des sels différents, l’empreinte digitale (informations chiffrées) sera complètement différente.

Le sel est plus pertinent car ses valeurs sont multiples. Par exemple, lorsque vous cryptez un champ ou un fichier lié à un enregistrement, vous pouvez facilement utiliser la clé primaire comme sel. De cette façon, même si le contenu original du champ ou du fichier est le même pour plusieurs enregistrements, le contenu crypté sera complètement différent.

EXEMPLE DE CRYPTAGE DE FICHIER

Pour gérer facilement le cryptage et le décryptage de fichiers avec récupération de la taille originale, vous pouvez utiliser les méthodes suivantes.

Ces méthodes gèrent le complément de 16 octets en stockant la taille originale du fichier dans le fichier crypté lui-même afin qu’elle puisse être facilement récupérée lors du décryptage.

//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

CAS D’UTILISATION

Pour illustrer comment vous pouvez utiliser ces nouvelles commandes, voici une IDH contenant de fausses analyses médicales et leurs rapports PDF externes. Dans cet IDH, les rapports sont chiffrés et vous les déchiffrez pour obtenir des documents lisibles.

HDI : Cryptage BLOB

Maintenant, c’est à vous de crypter et décrypter les données comme le fait 4D !

Avatar
- Product Owner -Damien Fuzeau a rejoint l'équipe 4D Product en février 2019. En tant que Product Owner, il est en charge de la rédaction des user stories, puis de leur traduction en spécifications fonctionnelles. Son travail consiste également à s'assurer que les implémentations de fonctionnalités livrées répondent aux besoins des clients.Damien est diplômé de l'Université de Nantes en génie logiciel. Il a passé plus de 23 ans dans son ancienne entreprise, d'abord en tant que développeur (découverte de 4D en 1997), puis en tant que responsable de l'ingénierie et architecte logiciel. Cette société est un partenaire OEM de 4D et a déployé des logiciels d'entreprise basés sur 4D pour des milliers d'utilisateurs, sur des centaines de serveurs. Damien est donc habitué au développement et au déploiement 4D dans un contexte multi-langues.