lundi 20 décembre 2021

Chapitre 94 : Blockchain suite : gestion des clés publique et privée avec la librairie openssl

 

Dans le chapitre précédent, nous avons vu la création des clés publique et privée avec openssl dans le source portefeuille.s. Mais si nous voulons avoir des portefeuilles indépendants, il est nécessaire de pouvoir sauvegarder les clés sur des fichiers.

Dans les fonctions de openssl, il existe bien des fonctions pour sauvegarder les clés mais elles font appel à des fichiers adaptés au langage C et pas aux fichiers gérés directement par les appels système de Linux.

Heureusement, en cherchant dans le fouillis des fonctions proposées par openssl, j’ai trouvé des fonctions qui recopient les clés dans des zones mémoire que nous pouvons exploitées pour les sauvegarder sur des fichiers.

Dans le répertoire suivant sur github :

https://github.com/vincentARM/ARMassembly64/tree/master/projet64_014

vous trouverez plusieurs programmes pour gérer les clés, signer, vérifier, chiffrer et déchiffrer un fichier.

Dans le premier programme genkey64.s nous retrouvons la fonction de génération des clés que nous avons utilisée pour la blockchain. Cette fonction appelle les fonctions d’openssl qui créent les clés dans des structures internes.

Puis nous trouvons 2 fonctions qui vont écrire les clés sur les fichiers. Dans la fonction ecrireClePublique, nous créons d’abord une entité BIO et grâce à la fonction openssl PEM_write_bio_PUBKEY nous transférons la clé publique dans cette entité puis avec la fonction BIO_read nous transférons la clé dans un buffer sous le format standard de clé publique. Il ne nous reste plus qu’à écrire le buffer sur le fichier avec les appels système Linux 64 bits.

La fonction ecrireClePrivée effectue les mêmes opérations mais en utilisant la fonction PEM_write_bio_PrivateKey qui nécessite en plus le passage dans les paramètres d’une phrase de mot de passe (pass phrase)qui va permettre de chiffre la clé privée avant son écriture sur le fichier.

Cette phrase sera redemandée à chaque utilisation de la clé privée, ce qui assure sa confidentialité.

Dans le programme traiket64.s nous trouvons les fonctions pour relire les clés des fichiers et alimenter les structures BIO puis les structures internes d’openssl.

Mais la question qui se pose maintenant est celle de savoir si ces opérations sont correctes et si les clés sont utilisables.

Pour cela dans les programmes signerFichier64.s et verifierSign64.s, nous allons utiliser les fonctions de signature et de vérification utilisée pour la blockchain.

Dans le programme signerFichier64, nous allons utiliser le fichier de clé privée pour extraire la clé, signer un petit fichier texte, et générer la signature.

Puis dans le programme verifierSign64.s, nous allons utiliser le fichier de clé publique pour extraire la clé et l’utiliser pour vérifier la signature.

Tout fonctionne parfaitement !!!

Les 2 derniers programmes chiffrerFichier64.s et dechiffrerFichier64.s montre l’utilisation des clés pour chiffrer et déchiffrer un fichier texte. Je me suis servi des exemples en langage C d’openssl pour écrire ces programmes en assembleur.

Il y a donc une bizarrerie car le chiffrage exige l’utilisation d’une clé secondaire et d’une entité appelée IV qui doivent être passées au programme de déchiffrement. Normalement dans le cas d’un chiffrement asymétrique seules les clés publiques et privées devraient être utilisées. Ce point reste à éclaircir !!

Les programmes fonctionnent correctement.



Aucun commentaire:

Enregistrer un commentaire