GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Befehlszeilenoperationen für elliptische Kurven

OpenSSL® stellt die folgenden Befehlszeilentools bereit, um mit Schlüsseln zu arbeiten, die für Elliptic Curve (EC) Cryptography-Algorithmen geeignet sind:

  • openssl ecparam
  • openssl ec

Derzeit unterstützt OpenSSL die folgenden EC-Algorithmen:

  • Elliptische Kurve Diffie Hellman (ECDH) für Schlüsselübereinstimmung
  • Elliptic Curve Digital Signature Algorithm (ECDSA) zum Signieren und Verifizieren

ecparams und ec unterstützen nicht den x25519 , ed25519 , und ed448 Kurven. Siehe genpkey Unterbefehl für Informationen über diese Kurven.

EC-Dateiformate für private Schlüssel

OpenSSL verwendet standardmäßig Privacy Enhanced Mail (PEM)-Dateien, um private EC-Schlüssel zu speichern. Diese Dateien enthalten Base-64-codierte Daten und verwenden die Datei .pem Verlängerung. Das folgende Beispiel zeigt eine private Schlüsseldatei im PEM-Format.

-----BEGIN EC PRIVATE KEY-----
MIIBIAIBAQQYd8yhaE899FaH3sw8aD4F/vtpMVBLfVqmoIHKMIHHAgEBMCQGByqG
SM49AQECGQD////////////////////+//////////8wSwQY////////////////
/////v/////////8BBgiEj3COVoFyqdCPa7MyUdgp9RiJWvVaRYDFQDEaWhENd6z
eMS2XKlZHipXYwWaLgQxBH0pd4EAxlodoXg3FliNziuLSu6OIo8YljipDyJjczcz
S0nctmptyPmXisp2SKlDsAIZAP///////////////3pi0DHIP0KU9kDsEwIBAaE0
AzIABBsl8ZSGJqcUpVoP8zekF92DGqDBMERcHhCXmgPXchP+ljybXbzYKINgxbp5
0g9/pw==
-----END EC PRIVATE KEY-----

Das folgende Beispiel zeigt eine verschlüsselte private Schlüsseldatei im PEM-Format.

-----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-----

Das folgende Beispiel zeigt eine private Schlüsseldatei, die den PublicKey Cryptography Standard 8 (PKCS8) im PEM-Format verwendet.

-----BEGIN PRIVATE KEY-----
MIIBMAIBADCB0wYHKoZIzj0CATCBxwIBATAkBgcqhkjOPQEBAhkA////////////
/////////v//////////MEsEGP////////////////////7//////////AQYIhI9
wjlaBcqnQj2uzMlHYKfUYiVr1WkWAxUAxGloRDXes3jEtlypWR4qV2MFmi4EMQR9
KXeBAMZaHaF4NxZYjc4ri0rujiKPGJY4qQ8iY3M3M0tJ3LZqbcj5l4rKdkipQ7AC
GQD///////////////96YtAxyD9ClPZA7BMCAQEEVTBTAgEBBBiKtwssqrxHY/gu
KDD4QgmyLDKaqBv2wEWhNAMyAAT5j6o+ojeB6jaFAfx4rtGf5hYbT1N6NnlAWiP1
+bEWtTJiEVqnpeZN0m0SLybIGZY=``
-----END PRIVATE KEY-----

Das folgende Beispiel zeigt eine verschlüsselte private PKCS8-Schlüsseldatei im PEM-Format:

-----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-----

Private PKCS8-Schlüsseldateien unterstützen neben den EC-Schlüsseln verschiedene private Schlüsseltypen. Sie können die Dateien konvertieren, um andere private Schlüsseltypen zu verwenden, und sie als verschlüsselt festlegen oder unverschlüsselt .

Verwenden Sie den folgenden Befehl, um eine PKCS8-Datei in eine herkömmliche verschlüsselte EC-Schlüsseldatei zu konvertieren:

openssl ec -aes-128-cbc -in p8file.pem -out tradfile.pem

Ersetzen Sie das Argument -aes-128-cbc mit jedem anderen gültigen OpenSSL-Verschlüsselungsnamen. (Eine Liste gültiger Verschlüsselungsnamen finden Sie in der OpenSSL-Dokumentation.)

Verwenden Sie den folgenden Befehl, um eine PKCS8-Datei in eine herkömmliche unverschlüsselte EC-Schlüsseldatei zu konvertieren:

openssl ec -in p8file.pem -out tradfile.pem

Verwenden Sie den folgenden Befehl, um eine EC-Schlüsseldatei in das verschlüsselte PKCS8-Format zu konvertieren:

openssl pkcs8 -topk8 -in tradfile.pem -out p8file.pem

Verwenden Sie den folgenden Befehl, um eine EC-Schlüsseldatei in das unverschlüsselte PKCS8-Format zu konvertieren:

openssl pkcs8 -topk8 -nocrypt -in tradfile.pem -out p8file.pem

Hinweis :Die privaten EC-Schlüsseldateien sind standardmäßig nicht verschlüsselt. Sie müssen die Datei explizit auf verschlüsselt setzen und den Verschlüsselungsalgorithmus angeben. Die PKCS8-Dateien sind standardmäßig verschlüsselt. Verwenden Sie den -nocrypt Option, um die Datei auf unverschlüsselt zu setzen.

Eine PEM-Datei sind DER-Daten, die unter Verwendung von Base-64-Codierungsregeln mit einer Kopf- und Fußzeile codiert sind. PEM-Dateien sind für Menschen lesbar und daher bequemer zu verwenden. Sie können jedoch alle oben gezeigten Dateien im DER-Format speichern. DER-Format ist ein Binärformat und im Gegensatz zu einer PEM-Datei nicht für Menschen lesbar.

Die meisten openssl Befehle haben Optionen -inform DER und -outform DER .-inform DER gibt an, dass die Eingabedatei DER und -outform DER ist gibt an, dass die Ausgabedatei DER.

ist

Verwenden Sie den folgenden Befehl, um das PKCS8-Format in einen herkömmlichen verschlüsselten EC-Schlüssel im DER-Format zu konvertieren.

openssl ec -in p8file.pem -outform DER -out tradfile.der

Sie können eine herkömmliche private EC-Schlüsseldatei nicht im DER-Format verschlüsseln. Wenn Sie dies versuchen, ignoriert der Befehl das Argument stillschweigend. Sie können jedoch PKS8-Dateien im DER-Format verschlüsseln.

Verwenden Sie den folgenden Befehl, um eine herkömmliche EC-Schlüsseldatei in verschlüsseltes PKCS8 im DER-Format zu konvertieren:

openssl pkcs8 -topk8 -in tradfile.pem -outform DER -out p8file.der

EC-Dateiformate für öffentliche Schlüssel

Das PEM-Format unterstützt mehrere Arten von öffentlichen Schlüsseln in OpenSSL. Die folgende Datei zeigt öffentliche EC-Schlüssel im PEM-Format.

-----BEGIN PUBLIC KEY-----
MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQMDMgAE+Y+qPqI3geo2hQH8eK7Rn+YWG09T
ejZ5QFoj9fmxFrUyYhFap6XmTdJtEi8myBmW
-----END PUBLIC KEY-----

Verwenden Sie den folgenden Befehl, um eine öffentliche Schlüsseldatei aus einer privaten Schlüsseldatei im PEM-Format zu erstellen. Beachten Sie, dass es nicht möglich ist, eine private Schlüsseldatei aus einer öffentlichen Schlüsseldatei zu erstellen.

openssl ec -in ecprivkey.pem -pubout -out ecpubkey.pem

Verwenden Sie den folgenden Befehl, um eine öffentliche Schlüsseldatei aus einer privaten Schlüsseldatei im DER-Format zu erstellen:

openssl ec -in ecprivkey.pem -pubout -outform DER -out ecpubkey.der

Generieren von EC-Schlüsseln und -Parametern

Die EC-Parameterdatei enthält alle Informationen, die zum Definieren einer elliptischen Kurve für kryptografische Operationen erforderlich sind. OpenSSL verwendet ECDH- und ECDSA-Algorithmen. Verwenden Sie den folgenden Befehl, um eine Liste der integrierten Kurven zu erhalten:

openssl ecparam -list_curves

Verwenden Sie den folgenden Befehl, um eine EC-Parameterdatei der Kurve secp256k1 zu generieren :

openssl ecparam -name secp256k1 -out secp256k1.pem

Ersetzen Sie secp256k1 mit jedem anderen Namen aus openssl ecparam -list_curves Befehl.

Sie können Schlüssel generieren, indem Sie ecparam verwenden entweder durch Verwendung einer bereits vorhandenen Parameterdatei oder durch Verwendung des Namens der Kurve. Verwenden Sie den folgenden Befehl, um ein privates/öffentliches Schlüsselpaar aus einer Parameterdatei zu generieren:

openssl ecparam -in secp256k1.pem -genkey -noout -out secp256k1-key.pem

Verwenden Sie den folgenden Befehl, um ein privates/öffentliches Schlüsselpaar aus dem Namen der Kurve zu generieren:

openssl ecparam -name secp256k1 -genkey -noout -out secp256k1-key.pem

Die Schlüsseldatei enthält die Informationen der Parameter, die zum Generieren des eingebetteten Schlüssels verwendet werden. OpenSSL speichert den Namen der Kurve in der Parameterdatei oder der Schlüsseldatei. Es speichert standardmäßig nicht explizit den vollständigen Satz von Parametern, die dem Namen zugeordnet sind. Verwenden Sie den folgenden Befehl, um den Namen der Kurve in der Parameterdatei zu bestätigen:

openssl ecparam -in secp256k1.pem -text -noout

Beispielausgabe:

ASN1 OID: secp256k1

Verwenden Sie den folgenden Befehl, um Parameterdetails aus einer Parameterdatei aufzulisten:

openssl ecparam -in secp256k1.pem -text -param_enc explicit -noout

Verwenden Sie den folgenden Befehl, um Parameterdetails aus dem Namen einer Kurve aufzulisten, und ersetzen Sie den Namen der Kurve entsprechend:

openssl ecparam -name secp256k1 -text -param_enc explicit -noout

Beispielausgabe:

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)

Sie können Parameterdateien und Schlüsseldateien generieren, die explizit den vollständigen Satz von Parametern statt nur den Namen der Kurve enthalten. Dies ist wichtig, wenn einige Zielsysteme nicht wissen die Details der Kurve. OpenSSL Version 1.0.2 hat neue Kurven hinzugefügt, wie z. B. brainpool512t1 . Frühere Versionen von OpenSSL, die eine mit brainpool512t1 konfigurierte Parameterdatei oder Schlüsseldatei verwenden führt zu folgendem Fehler:

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:

Verwenden Sie explizite Parameter, um dieses Problem zu vermeiden, wie im folgenden Befehl mit OpenSSL 1.0.2 gezeigt:

openssl ecparam -name brainpoolP512t1 -out brainpoolP512t1.pem -param_enc explicit

Der Befehl liefert eine längere Parameterdatei mit allen Parametern.

-----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-----

Frühere Versionen von OpenSSL können die Parameterdatei verarbeiten. Verwenden Sie den folgenden Befehl in OpenSSL Version 1.0.1:

openssl ecparam -in brainpoolP512t1.pem -text -noout

OpenSSL-Version 1.0.1. zeigt die Parameter an, auch wenn die Kurve nicht bekannt ist.

Verwenden Sie den folgenden Befehl, um eine Schlüsseldatei mit expliziten Parametern zu generieren:

openssl ecparam -name brainpoolP512t1 -genkey -noout -out brainpoolP512t1-key.pem -param_enc explicit

Frühere Versionen von OpenSSL können die erhaltene Schlüsseldatei verarbeiten.

Hinweis :Nachdem sich die Parameter in explizite Parameter geändert haben, die Änderungen nicht rückgängig machen. Es ist nicht hilfreich herauszufinden, welche expliziten Parameter einer Kurve entsprechen.

Referenzen

  • Elliptische-Kurven-Kryptographie
  • Elliptische Kurve Diffie Hellman
  • Befehlszeilenprogramme

Verwenden Sie die Registerkarte „Feedback“, um Kommentare abzugeben oder Fragen zu stellen. Sie können auch ein Gespräch mit uns beginnen.


Linux
  1. Einfacher Befehlszeilenrechner?

  2. Durchführen von atomaren Schreibvorgängen in einer Datei in Bash?

  3. Private Schlüssel über Maschinen hinweg teilen?

  4. Befehlszeilenverlauf in Linux

  5. Befehlszeilen-Texteditoren unter Linux

So benennen Sie Dateien über die Befehlszeile in Linux um

Pet – Ein einfacher Befehlszeilen-Snippet-Manager

So laden Sie .bash_profile in der Linux-Befehlszeile neu

So fügen Sie FreeBSD 10.1 eine zusätzliche IP hinzu

So fügen Sie einem Ubuntu-Server eine private IP hinzu

So fügen Sie einem Debian-Server eine private IP hinzu