CryptoKey : Cryptage, décryptage, signature et vérification !

Traduit automatiquement de Deepl

Les solutions 4D ont toujours été sûres et stables. Cela s’explique par le fait que 4D investit énormément dans le développement et la mise à jour des fonctions de sécurité. 4D poursuit cet effort dans 4D v18 R4 avec une nouvelle fonctionnalité qui améliore encore sa boîte à outils de sécurité. Une nouvelle classe fournissant un ensemble de méthodes pour effectuer des opérations cryptographiques courantes est maintenant disponible : La classe CryptoKey.

HDI Sign and verify

Fonctions cryptographiques

Les fonctions cryptographiques peuvent être utilisées pour mettre en œuvre des fonctions de sécurité telles que la confidentialité et l’authentification. La classe CryptoKey fournit les fonctions cryptographiques suivantes :

  • sign() et verify() : création et vérification de signatures numériques
  • encrypt() et decrypt() : crypter et décrypter des données.

En plus de ces opérations, la classe CryptoKey vous permet également de générer de nouvelles clés RSA ou ECDSA, ou de charger une paire de clés existante à partir d’une définition PEM.

Signer et vérifier

Les fonctions sign() et verify() vous permettent de signer et de vérifier les signatures de messages. Cela vous permet de fournir une preuve d’authenticité pour les messages numériques ou les documents électroniques.

Les signatures numériques fournissent :

  • L’authentification du message: la preuve qu’un expéditeur connu a créé et signé le message.
  • l’intégrité du message: la preuve que le message n’a pas été modifié après avoir été signé
  • lanon-répudiation: le signataire ne peut pas nier la signature d’un document une fois que la signature a été créée.

Un message est signé par une clé privée et la signature est vérifiée par la clé publique correspondante :

Exemple

Voici un extrait de code montrant comment vous pouvez signer et vérifier la signature d’un message grâce aux méthodes de la nouvelle classe CryptoKey de 4D :

Du côté de Bob

// Create the message
$message:="hello world"
Folder(fk desktop folder).file("message.txt").setText($message)

// Create a key
$type:=New object("type";"RSA")
$key:=4D.CryptoKey.new($type)

// Get the public key and save it
Folder(fk desktop folder).file("public.pem").setText($key.getPublicKey())

// Get signature as base64 and save it
Folder(fk desktop folder).file("signature").setText($key.sign($message;$type))


/*Bob sent the message, the public key and the signature to Alice*/

Côté Alice

// Get message, public key & signature
$message:=Folder(fk desktop folder).file("message.txt").getText()
$publicKey:=Folder(fk desktop folder).file("public.pem").getText()
$signature:=Folder(fk desktop folder).file("signature").getText()

// Create a key
$type:=New object("type";"PEM";"pem";$publicKey)
$key:=4D.CryptoKey.new($type)

// Verify signature
If ($key.verify($message;$signature;$type).success)

// The signature is valid

End if 

ENCRYPTAGE et DECRYPTAGE

Le cryptage et le décryptage sont réalisés à l’aide de paires de clés. Le processus de cryptage transforme l’information originale en une forme méconnaissable, tandis que le processus de décryptage convertit les données cryptées en une forme qui peut être lue et comprise par un humain ou un ordinateur.

Une sécurité efficace exige :

  • Les clés privées restent privées
  • Les clés publiques peuvent être distribuées ouvertement sans compromettre la sécurité.

blank

Exemple

Imaginons que je veuille crypter « hello world ». Voici comment faire :

$encrypted:=$key.encrypt("hello world")

Et pour le décryptage :

$status:=$key.decrypt($encrypted)

Pour des informations plus détaillées, n’hésitez pas à consulter la documentation!

Dans un prochain article de blog, nous vous montrerons jusqu’où vous pouvez aller avec cette classe et les possibilités qu’elle offre pour construire des applications sophistiquées. En attendant, n’hésitez pas à partager vos expériences en matière de crypto-monnaie sur le forum 4D !

David Azancot
- 4D for iOS Product Owner -David Azancot a rejoint l'équipe de 4D Product en tant que Product Owner en 2017. Il est chargé de rédiger les user stories et de les traduire en spécifications fonctionnelles. Son rôle consiste également à s'assurer que les implémentations des fonctionnalités répondent aux besoins des clients.David est diplômé d'un MBA en marketing, Internet et mobilité de l'Institut Léonard De Vinci et a commencé sa carrière en 2011 au sein d'une start-up mobile, rachetée ensuite par Madvertise (groupe de marketing mobile). Passionné par les interfaces mobiles, il a été le choix naturel pour développer des formats publicitaires mobiles interactifs pour le groupe en 2015. En parallèle, David développe ses propres applications iOS et Android depuis 2012.