OpenSSL® fournit les outils de ligne de commande suivants pour travailler avec des clés adaptées aux algorithmes de chiffrement à courbe elliptique (EC) :
openssl ecparam
openssl ec
Actuellement, OpenSSL prend en charge les algorithmes EC suivants :
- Courbe elliptique Diffie Hellman (ECDH) pour accord clé
- Algorithme de signature numérique à courbe elliptique (ECDSA) pour la signature et la vérification
ecparams
et ec
ne supporte pas le x25519
, ed25519
, et ed448
courbes. Voir genpkey
sous-commande pour obtenir des informations sur ces courbes.
Formats de fichier de clé privée EC
OpenSSL utilise des fichiers PEM (Privacy Enhanced Mail) pour stocker les clés privées EC par défaut. Ces fichiers contiennent des données encodées en base 64 et utilisent le .pem extension. L'exemple suivant montre un fichier de clé privée au format PEM.
-----BEGIN EC PRIVATE KEY-----
MIIBIAIBAQQYd8yhaE899FaH3sw8aD4F/vtpMVBLfVqmoIHKMIHHAgEBMCQGByqG
SM49AQECGQD////////////////////+//////////8wSwQY////////////////
/////v/////////8BBgiEj3COVoFyqdCPa7MyUdgp9RiJWvVaRYDFQDEaWhENd6z
eMS2XKlZHipXYwWaLgQxBH0pd4EAxlodoXg3FliNziuLSu6OIo8YljipDyJjczcz
S0nctmptyPmXisp2SKlDsAIZAP///////////////3pi0DHIP0KU9kDsEwIBAaE0
AzIABBsl8ZSGJqcUpVoP8zekF92DGqDBMERcHhCXmgPXchP+ljybXbzYKINgxbp5
0g9/pw==
-----END EC PRIVATE KEY-----
L'exemple suivant montre un fichier de clé privée chiffré au format PEM.
-----BEGIN EC PRIVATE KEY-----<br/>
Proc-Type: 4,ENCRYPTED<br/>
DEK-Info: DES-EDE3-CBC,258248872DB25390<br/>
JIzhns0nRb+pj6RONAijJli8Rhu2bIrw8D+ruHEWL1IEH6Q5tvzqAI2PDYXbSzCn
24JPWx9khmTu6ijerANNYYk0p2Pjxr12MAYpqgtXbRrXLF4AIomzYWq16BH7Y63o
zvqWMBJO6tQ5RHPLM2FmweyPB/XSL7KvLTe+g6pz/W9wf52CyQ/VeK+yBXqEi7QF
0f9EKRlePRLAUcQPD4nkckcywX6Nz+TW/SOKt38YytM9MyQsAfcxu7u0nl/dLylk
n57qUm3nk0z0moYJbfLx59eP0/go8VjeP2fRKkgz1DOM7VkmtPrC7vnyRpKsnP2S
6n6uacerkNXTmUcz7mTCGGfrsBeACJeX1gwinDZVwkzDxNKhLXOlFFAMWE+SeiFp
kDny2v3D8sU=
-----END EC PRIVATE KEY-----
L'exemple suivant montre un fichier de clé privée qui utilise le PublicKey Cryptography Standard 8 (PKCS8) au format PEM.
-----BEGIN PRIVATE KEY-----
MIIBMAIBADCB0wYHKoZIzj0CATCBxwIBATAkBgcqhkjOPQEBAhkA////////////
/////////v//////////MEsEGP////////////////////7//////////AQYIhI9
wjlaBcqnQj2uzMlHYKfUYiVr1WkWAxUAxGloRDXes3jEtlypWR4qV2MFmi4EMQR9
KXeBAMZaHaF4NxZYjc4ri0rujiKPGJY4qQ8iY3M3M0tJ3LZqbcj5l4rKdkipQ7AC
GQD///////////////96YtAxyD9ClPZA7BMCAQEEVTBTAgEBBBiKtwssqrxHY/gu
KDD4QgmyLDKaqBv2wEWhNAMyAAT5j6o+ojeB6jaFAfx4rtGf5hYbT1N6NnlAWiP1
+bEWtTJiEVqnpeZN0m0SLybIGZY=``
-----END PRIVATE KEY-----
L'exemple suivant montre un fichier de clé privée PKCS8 chiffré au format PEM :
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIBWTAbBgkqhkiG9w0BBQMwDgQIGIcvnv17Q8oCAggABIIBOK+i1pk7em94F0Bn
+yKxU5p7e2+cnnW/8b2mjvga0Uj8JVxRHi5eR2/u+3fjHQItq0df+qzyVC0TTCPz
YZVrgHO9hPilgbGQKQQSpy9bpbGGiZ7I+aFpriEaJzugHUi8XTXY6XtnxgHAqTOX
nma2HHoGRic2wNgIGKQ+B1pULy2kFDMvQ/AwvYS13uH2Trfja9M9wRqYjM2MS0Ky
ii03OsNhJjZQcPmy2ALciR+umG4IQ7qszfrCA7L95F3qVXa7DgAPDZyUSdF3ucSh
IlrEvaP7FeLfJ1/ilUaXK6XC9EDYPDWMErUQJZJAywczQMqjY4/pdhb8Y+TpbN/r
q1I5j+JbRwfvvJV7CAHv1EEjvWiWvjHamlb7iqh3gneOYPbvSfjuaOyVd5YhwQ7P
nGOah+eEf9uyDSZabg==``
-----END ENCRYPTED PRIVATE KEY-----
Les fichiers de clés privées PKCS8 prennent en charge différents types de clés privées, à l'exception des clés EC. Vous pouvez convertir les fichiers pour utiliser différents types de clés privées et les définir comme chiffrés ou non chiffré .
Utilisez la commande suivante pour convertir un fichier PKCS8 en un fichier de clé EC crypté traditionnel :
openssl ec -aes-128-cbc -in p8file.pem -out tradfile.pem
Remplacer l'argument -aes-128-cbc
avec tout autre nom de chiffrement OpenSSL valide. (Consultez la documentation OpenSSL pour obtenir une liste des noms de chiffrement valides.)
Utilisez la commande suivante pour convertir un fichier PKCS8 en un fichier de clé EC traditionnel non chiffré :
openssl ec -in p8file.pem -out tradfile.pem
Utilisez la commande suivante pour convertir un fichier de clé EC au format PKCS8 chiffré :
openssl pkcs8 -topk8 -in tradfile.pem -out p8file.pem
Utilisez la commande suivante pour convertir un fichier de clé EC au format PKCS8 non chiffré :
openssl pkcs8 -topk8 -nocrypt -in tradfile.pem -out p8file.pem
Remarque :Les fichiers de clé privée EC ne sont pas chiffrés par défaut. Vous devez définir explicitement le fichier sur chiffré et spécifier l'algorithme de chiffrement. Les fichiers PKCS8 sont chiffrés par défaut. Utilisez le -nocrypt
option pour définir le fichier sur non crypté.
Un fichier PEM est constitué de données DER codées à l'aide de règles de codage en base 64, avec un en-tête et un pied de page. Les fichiers PEM sont lisibles par l'homme, ils sont donc plus pratiques à utiliser. Cependant, vous pouvez stocker tous les fichiers indiqués ci-dessus au format DER. Le format DER est un format binaire et, contrairement à un fichier PEM, il n'est pas lisible par l'homme.
La plupart des openssl
les commandes ont des options -inform DER
et -outform DER
.-inform DER
spécifie que le fichier d'entrée est DER, et -outform DER
spécifie que le fichier de sortie est DER.
Utilisez la commande suivante pour convertir le format PKCS8 en une clé EC cryptée traditionnelle au format DER.
openssl ec -in p8file.pem -outform DER -out tradfile.der
Vous ne pouvez pas chiffrer un fichier de clé privée EC traditionnel au format DER. Si vous essayez de le faire, la commande ignore silencieusement l'argument. Cependant, vous pouvez chiffrer les fichiers PKS8 au format DER.
Utilisez la commande suivante pour convertir un fichier de clé EC traditionnel en PKCS8 chiffré au format DER :
openssl pkcs8 -topk8 -in tradfile.pem -outform DER -out p8file.der
Formats de fichier de clé publique EC
Le format PEM prend en charge plusieurs types de clés publiques dans OpenSSL. Le fichier suivant montre les clés publiques EC au format PEM.
-----BEGIN PUBLIC KEY-----
MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQMDMgAE+Y+qPqI3geo2hQH8eK7Rn+YWG09T
ejZ5QFoj9fmxFrUyYhFap6XmTdJtEi8myBmW
-----END PUBLIC KEY-----
Utilisez la commande suivante pour créer un fichier de clé publique à partir d'un fichier de clé privée au format PEM. Notez qu'il n'est pas possible de créer un fichier de clé privée à partir d'un fichier de clé publique.
openssl ec -in ecprivkey.pem -pubout -out ecpubkey.pem
Utilisez la commande suivante pour créer un fichier de clé publique à partir d'un fichier de clé privée au format DER :
openssl ec -in ecprivkey.pem -pubout -outform DER -out ecpubkey.der
Génération des clés et paramètres EC
Le fichier de paramètres EC contient toutes les informations nécessaires pour définir une courbe elliptique pour les opérations cryptographiques. OpenSSL utilise les algorithmes ECDH et ECDSA. Utilisez la commande suivante pour obtenir une liste des courbes intégrées :
openssl ecparam -list_curves
Utilisez la commande suivante pour générer un fichier de paramètres EC de courbe secp256k1
:
openssl ecparam -name secp256k1 -out secp256k1.pem
Remplacez secp256k1
avec tout autre nom obtenu à partir de openssl ecparam -list_curves
commande.
Vous pouvez générer des clés en utilisant le ecparam
commande, soit en utilisant un fichier de paramètres préexistant, soit en utilisant le nom de la courbe. Utilisez la commande suivante pour générer une paire de clés privée/publique à partir d'un fichier de paramètres :
openssl ecparam -in secp256k1.pem -genkey -noout -out secp256k1-key.pem
Utilisez la commande suivante pour générer une paire de clés privée/publique à partir du nom de la courbe :
openssl ecparam -name secp256k1 -genkey -noout -out secp256k1-key.pem
Le fichier de clé contient les informations des paramètres utilisés pour générer la clé intégrée. OpenSSL stocke le nom de la courbe dans le fichier de paramètres ou le fichier de clé. Il ne stocke pas explicitement l'ensemble complet des paramètres associés au nom par défaut. Utilisez la commande suivante pour confirmer le nom de la courbe dans le fichier de paramètres :
openssl ecparam -in secp256k1.pem -text -noout
Exemple de sortie :
ASN1 OID: secp256k1
Utilisez la commande suivante pour répertorier les détails des paramètres d'un fichier de paramètres :
openssl ecparam -in secp256k1.pem -text -param_enc explicit -noout
Utilisez la commande suivante pour répertorier les détails des paramètres à partir du nom d'une courbe, en remplaçant le nom de la courbe en conséquence :
openssl ecparam -name secp256k1 -text -param_enc explicit -noout
Exemple de sortie :
Field Type: prime-field
Prime:
00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:
ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:fe:ff:
ff:fc:2f
A: 0
B: 7 (0x7)
Generator (uncompressed):
04:79:be:66:7e:f9:dc:bb:ac:55:a0:62:95:ce:87:
0b:07:02:9b:fc:db:2d:ce:28:d9:59:f2:81:5b:16:
f8:17:98:48:3a:da:77:26:a3:c4:65:5d:a4:fb:fc:
0e:11:08:a8:fd:17:b4:48:a6:85:54:19:9c:47:d0:
8f:fb:10:d4:b8
Order:
00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:
ff:fe:ba:ae:dc:e6:af:48:a0:3b:bf:d2:5e:8c:d0:
36:41:41
Cofactor: 1 (0x1)
Vous pouvez générer des fichiers de paramètres et des fichiers de clés qui incluent explicitement l'ensemble complet de paramètres au lieu du seul nom de la courbe. Ceci est important lorsque certains systèmes cibles ne savent pas les détails de la courbe. OpenSSL version1.0.2 a ajouté de nouvelles courbes, telles que brainpool512t1
. Versions antérieures d'OpenSSL qui utilisent un fichier de paramètres ou un fichier de clé configuré avec brainpool512t1
entraînant l'erreur suivante :
bash$ openssl ecparam -in brainpoolP512t1.pem -text -noout
unable to load elliptic curve parameters
140138321110720:error:1009E077:elliptic curve routines:EC_ASN1_PKPARAMETERS2GROUP:ec group new by name failure:ec_asn1.c:1035:
140138321110720:error:1009107F:elliptic curve routines:d2i_ECPKParameters:pkparameters2group failure:ec_asn1.c:1080:
140138321110720:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_oth.c:83:
Utilisez des paramètres explicites pour éviter ce problème, comme indiqué dans la commande suivante avec OpenSSL 1.0.2 :
openssl ecparam -name brainpoolP512t1 -out brainpoolP512t1.pem -param_enc explicit
La commande génère un fichier de paramètres plus long avec tous les paramètres.
-----BEGIN EC PARAMETERS-----
MIIBogIBATBMBgcqhkjOPQEBAkEAqt2duNvpxIs/1OauM8n8B8swjbOzydIO1mOc
ynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2CxoUoqmBWWDpI8zCBhARAqt2duNvp
xIs/1OauM8n8B8swjbOzydIO1mOcynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2C
xoUoqmBWWDpI8ARAfLu8+UQc+rduGJDkaITq4yH3DAvLSYFSeJdQS+w+NqYrzfoj
BJdlQPZFAIXy2uFFwiVTtGV2NokYDqJXGGdCPgSBgQRkDs5cEniHF7nBugbLwqb+
uoWEJFjFbd6dsXWNOcAxPYK6UXNc2z6kmap3p9aUOmT3o/Jf4m8GtRuqJpb6kDXa
W1NL1ZX1rw+iyJI3bISs4btOMBm3FjTAETEVnK4DzunZkyGEvu8ha9cd8trfhqYn
MG7P+W27i6zhmLYeAPizMgJBAKrdnbjb6cSLP9TmrjPJ/AfLMI2zs8nSDtZjnMpw
MwhwVT5cQUypJhlBhmEZf6wQRx2x04EIXdrdtYeWgpypAGkCAQE=
-----END EC PARAMETERS-----
Les versions antérieures d'OpenSSL peuvent traiter le fichier de paramètres. Utilisez la commande suivante dans OpenSSL version 1.0.1 :
openssl ecparam -in brainpoolP512t1.pem -text -noout
OpenSSL version 1.0.1. affiche les paramètres même s'il ne connaît pas la courbe.
Utilisez la commande suivante pour générer un fichier clé avec des paramètres explicites :
openssl ecparam -name brainpoolP512t1 -genkey -noout -out brainpoolP512t1-key.pem -param_enc explicit
Les versions antérieures d'OpenSSL peuvent traiter le fichier de clé que vous obtenez.
Remarque :Une fois les paramètres modifiés en paramètres explicites, n'annulez pas les modifications. Il n'y a pas d'utilité pour trouver quels paramètres explicites correspondent à une courbe.
Références
- Cryptage à courbe elliptique
- Courbe elliptique Diffie Hellman
- Utilitaires de ligne de commande
Utilisez l'onglet Commentaires pour faire des commentaires ou poser des questions. Vous pouvez également démarrer une conversation avec nous.