openssl
Nous allons faire les meme étapes que le protocole openPGP avec la suite d'outils de chiffrement donné par openSSL pour bien séparer les différentes étapes. Si vous voulez utiliser pleinement le protocole openPGP, utilisez cependant plutôt un outil dédié gomme Gnupg, ci-après.
Placez vous dans un dossier où vous pourrez placer tous les fichiers nécessaires
Installation
On utilise la version 3 d'openssl :
❯ openssl --version
OpenSSL 3.6.0 1 Oct 2025 (Library: OpenSSL 3.6.0 1 Oct 2025)Linux
❯ sudo apt install opensslMacos
❯ brew install opensslWindows
On utilise winget, le gestionnaire de paquet de Windows 11.
- recherche de openssl dans la liste des paquets disponibles : https://winget.run/
- on utilise le paquet OpenSSL.Light
Une fois le parquet installé, il faut encore ajouter le chemin d'exécution. Pour cela :
- commencez par trouver l'endroit où est installé openssl (qui moi c'estC:\Program Files\OpenSSL-Win64\bin\)
- utilisez ce tutoriel pour l'ajouter aux chemins d'exécution
Clés du chiffrement asymétrique
openssl genpkey -helpOn commence par générer un couple de clés publique/privée avec RSA :
openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048Cette commande va produire un fichier private_key.pem au format PEM. Ce fichier va faire office de clé privée mais il contient bien le couple des clés publique et privée :
openssl rsa -in private_key.pem -textExtrayons la clé publique du fichier private_key.pem et stockons là dans le fichier public_key.pem :
openssl rsa -pubout -in private_key.pem -out public_key.pemLa taille du fichier public_key.pem ne contient que la clé publique (il est bien plus petit que le fichier private_key.pem)
openssl rsa -pubin -in public_key.pem -textPour bien faire, changez les droits du fichier private_key.pem pour qu'il ne soit lisible que par vous.
solution
solution
chmod go-r private_key.pem On peut distribuer notre clé publique pour pouvoir recevoir des messages privés.
Envoyez par mail votre clé publique à la personne avec laquelle vous voulez échanger un message privé. Vous devrez chacun avoir la clé publique de l'autres :
- vous devrez avoir la clé publique de l'autre personne pour chiffrer la clé symétrique
- l'autre personne devra avoir votre clé publique pour vérifier la signature du message chiffré
Clé du chiffrement symétrique
Créons une clé de 32B = 256b pour être utilisée par chacha20.
openssl rand -hex -out symmetric_key 32Le fichier symmetric_key.pem contient la clé.
Vérifiez que la taille du fichier symmetric_key.pem est bien compatible avec une clé de 256b.
solution
solution
wc -c symmetric_keyDonne 65. C'est cohérent :
- 1 caractère pour le retour à la ligne final
- un byte est codée sur 2 digit hexadécimaux. Il y a donc $(65-1) / 2 = 32B$
- un Byte vaut 8b, on a bien $32 \cdot 8 = 256b$
Chiffrement symétrique
On écrit un petit message à envoyer :
echo "Un coucou chiffré." > msg.txtOn commence par compresser ce fichier (on utilise ici zip, mais vous pouvez utiliser ce que vous voulez) :
zip -u msg.txt.zip msg.txtOpenSSL permet le chiffrement symétrique avec plein d'algorithmes différents :
openssl enc -ciphersChiffrons avec chacha20 :
openssl enc -p -chacha20 -in msg.txt.zip -out msg.txt.zip.encrypted -kfile symmetric_key -pbkdf2On utilise ici un passphrase qui va dériver les paramètres de chacha : une clé de chiffrement et un IV. On a utilisé ici des clés explicites. On peut aussi passer via des passphrases dont sont dérivées les clés et IV :
openssl enc -p -chacha20 -in msg.txt.zip -out msg.txt.zip.encrypted -K $(openssl rand -hex -out symmetric_key 32) -iv $(openssl rand -hex 16)TBD faire avec K et IV sans -p
Chiffrement asymétrique de la clé symétrique
TBD faire avec sign then encrypt. Comme ça on cache l'expéditeur puis zip les trois fichiers à envoyer.
Signature
On signe un hash. OpenSSL propose plein de fonction de hash différente :
 openssl dgst -listOn va utiliser sha256 pour signer le message chiffré avec notre clé privée :
openssl dgst -sha256 -sign private_key.pem -out msg.txt.zip.encrypted.sign.sha256 msg.txt.zip.encryptedChiffrement de la clé
Chiffrons la clé symétrique avec la clé publique de notre interlocuteur :
openssl pkeyutl -encrypt -in symmetric_key -pubin -inkey public_key.pem -out symmetric_key.encryptedEnvoi du message
Il faut envoyer :
- le message chiffré : msg.txt.zip.encrypted
- la signature du message chiffré : msg.txt.zip.encrypted.sign.sha256
- la clé symétrique chiffrée avec la clé publique de l'interlocuteur : symmetric_key.encrypted
Déchiffrement
Vous devez avoir :
- la clé publique de l'envoyeur
- votre clé privée
Vérification de la signature
openssl dgst -verify public_key.pem -signature msg.txt.zip.encrypted.sign.sha256 msg.txt.zip.encrypted    Si tout s'est bien passé vous devriez voir Verified OK comme réponse (sinons vous auriez eu Verification failure comme réponse).
Déchiffrement de la clé symétrique
openssl pkeyutl -decrypt -inkey private_key.pem -in symmetric_key.encrypted -out symmetric_keyDéchiffrement du message
openssl enc -d -p -chacha20 -in msg.txt.zip.encrypted -kfile symmetric_key -pbkdf2 -out msg.txt.zipDézippage du message
unzip msg.txt.zipEt normalement, vous devriez avoir le fichier initial !