Ce billet nĂ©cessite OpenSSL 1.1.1 minimumâŠ
Pour vĂ©rifier votre version dâOpenSSL utiliser la commande suivante :
openssl version
Vous devriez avoir quelque chose comme :
OpenSSL 1.1.1 11 Sep 2018
Encrypter un fichier
openssl enc -aes-256-cbc -md sha512 -pbkdf2 -iter 100000 -salt -in FICHIER_D_ENTREE -out FICHIER_DE_SORTIE
Par exemple :
openssl enc -aes-256-cbc -md sha512 -pbkdf2 -iter 100000 -salt -in ~/chemin/README.md -out ~/chemin/README.md.crypt
OĂč les commutateurs ont la fonction suivante :
-aes-256-cbc
est ce que vous devez utiliser pour une protection maximale ou la version 128 bits (avecaes-128-cbc
). Notez que le3DES
(Triple DES) a Ă©tĂ© abandonnĂ© (dĂ©conseillĂ© depuis 2017).LâAES
est maintenant accĂ©lĂ©rĂ© par tous beaucoup de processeurs modernes; vous pouvez simplement vĂ©rifier si votre CPU dispose du jeu dâinstructionsAES-NI
, par exemple en utilisantgrep aes /proc/cpuinfo
.-md sha512
est la variante la plus rapide de la famille de fonctionsSHA-xxx
et câest de plus la mĂ©thode la plus sĂ©curisĂ©e.-pbkdf2
utilise lâalgorithmePBKDF2
(Password-Based Key Derivation Function 2)-iter 100000
dĂ©fini le nombre dâitĂ©rations sur le mot de passe pour dĂ©river la clĂ© de chiffrement. Des valeurs Ă©levĂ©es augmentent le temps nĂ©cessaire pour forcer le fichier rĂ©sultant (« brut force »). Cette option permet dâutiliser lâalgorithmePBKDF2
pour dériver la clé.
DĂ©crypter un fichier
openssl enc -aes-256-cbc -md sha512 -pbkdf2 -iter 100000 -salt -d -in FICHIER_D_ENTREE -out FICHIER_DE_SORTIE
Par exemple :
openssl enc -aes-256-cbc -md sha512 -pbkdf2 -iter 100000 -salt -d -in ~/chemin/README.md.crypt -out ~/chemin/README.md.decrypt
Il suffit de mettre les mĂȘme paramĂštres et d'ajouter le commutateur -d
.
Pour les anciennes versions dâOpenSSL
Notez que pour les versions antérieures à OpenSSL 1.1.1
Ă commencer par la version 1.1.0
, il faut utiliser la syntaxe suivante :
openssl aes-256-cbc -in FICHIER_D_ENTREE -out FICHIER_DE_SORTIE
puis ajouter le commutateur -d
pour lâopĂ©ration rĂ©ciproque.
Automatisation
Pour automatiser ces actions, vous aurez besoin de passer le mot de passe automatiquement, voici comment le faire:
openssl ⊠-passin pass:LE_MOT_DE_PASS1 -passout pass:LE_MOT_DE_PASS2
Par exemple :
openssl enc -aes-256-cbc -md sha512 -pbkdf2 -iter 100000 -salt -in README.md -out README.md.crypt -pass pass:test1
Notez que la syntaxe de la ligne de commande est toujours -pass
suivi dâun espace, puis du type de phrase secrĂšte que vous fournissez, câest-Ă -dire pass:
pour la phrase secrÚte simple, puis la phrase secrÚte réelle aprÚs les deux points (un mot de passe sans espace du coup).
La documentation prĂ©cise que vous pouvez fournir dâautres sources de phrase secrĂšte en procĂ©dant comme suit :
env:somevar
pour obtenir le mot de passe dâune variable dâenvironnement, ici la variablesomevar
,file:somepathname
pour obtenir le mot de passe de la premiĂšre ligne du fichiersomepathname
,fd:number
pour obtenir le mot de passe à partir du numéro de descripteur de fichier,stdin
pour lire Ă partir de lâentrĂ©e standard.
A notez que la documentation, fait référence aux options -passin
et -passout
pour « certaines commandes » en non à -pass
. Il me semble que câest un des points de la documentation qui est assez peu clair. Il est notoirement reconnu que la documentation dâOpenSSL nâest pas lipide, toute prĂ©cision est bienvenue en commentaire, ce qui est assez logique si lâon considĂšre lâĂ©tendue des fonctionnalitĂ©s couverte pas cette commande.
Références
- [Man page d'OpenSSL]
https://www.openssl.org/docs/man1.1.0/man1/openssl.html
(lien cassé), - Manuel d'OpenSSL en français.
኿