GNU/Linux >> Tutoriels Linux >  >> Linux

Opérations de courbe elliptique en ligne de commande

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.


Linux
  1. Calculatrice en ligne de commande simple ?

  2. Effectuer des opérations d'écriture atomique dans un fichier dans Bash ?

  3. Convertir la clé privée Openssh en clé privée Ssh2 ?

  4. Partage de clés privées entre machines ?

  5. Historique de la ligne de commande sous Linux

Comment renommer des fichiers en utilisant la ligne de commande sous Linux

Pet - Un gestionnaire d'extraits de ligne de commande simple

Comment recharger .bash_profile dans la ligne de commande Linux

Comment ajouter une adresse IP supplémentaire à FreeBSD 10.1

Comment ajouter une adresse IP privée à un serveur Ubuntu

Comment ajouter une adresse IP privée à un serveur Debian