GNU/Linux >> Linux Esercitazione >  >> Linux

Operazioni sulla curva ellittica della riga di comando

OpenSSL® fornisce i seguenti strumenti da riga di comando per lavorare con chiavi adatte per algoritmi di crittografia a curva ellittica (EC):

  • openssl ecparam
  • openssl ec

Attualmente, OpenSSL supporta i seguenti algoritmi EC:

  • Curva ellittica Diffie Hellman (ECDH) per accordo chiave
  • Algoritmo di firma digitale a curva ellittica (ECDSA) per la firma e la verifica

ecparams e ec non supportano il x25519 , ed25519 e ed448 curve. Vedere la genpkey sottocomando per informazioni su quelle curve.

Formati file chiave privata EC

OpenSSL utilizza i file PEM (Privacy Enhanced Mail) per archiviare le chiavi private EC per impostazione predefinita. Questi file contengono dati codificati in base 64 e utilizzano .pem estensione. L'esempio seguente mostra un file di chiave privata in formato PEM.

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

L'esempio seguente mostra un file di chiave privata crittografato in formato 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'esempio seguente mostra un file di chiave privata che utilizza PublicKey Cryptography Standard 8 (PKCS8) in formato PEM.

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

L'esempio seguente mostra un file di chiave privata PKCS8 crittografato in formato 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-----

I file di chiavi private PKCS8 supportano diversi tipi di chiavi private, a parte le chiavi EC. Puoi convertire i file per utilizzare diversi tipi di chiavi private e impostarli come crittografati o non crittografato .

Utilizzare il comando seguente per convertire un file PKCS8 in un file di chiave EC crittografato tradizionale:

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

Sostituisci l'argomento -aes-128-cbc con qualsiasi altro nome di crittografia OpenSSL valido. (Vedi la documentazione di OpenSSL per un elenco di nomi di cifratura validi.)

Utilizzare il comando seguente per convertire un file PKCS8 in un file chiave EC non crittografato tradizionale:

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

Utilizzare il comando seguente per convertire un file di chiave EC in formato PKCS8 crittografato:

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

Utilizzare il comando seguente per convertire un file di chiave EC in formato PKCS8 non crittografato:

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

Nota :i file della chiave privata EC non sono crittografati per impostazione predefinita. È necessario impostare esplicitamente il file su crittografato e specificare l'algoritmo di crittografia. I file PKCS8 sono crittografati per impostazione predefinita. Usa il -nocrypt opzione per impostare il file su non crittografato.

Un file PEM è costituito da dati DER codificati utilizzando regole di codifica di base 64, con un'intestazione e un piè di pagina. I file PEM sono leggibili dall'uomo, quindi sono più comodi da usare. Tuttavia, puoi archiviare tutti i file mostrati sopra in formato DER. DER è un formato binario e, a differenza di un file PEM, non è leggibile dall'uomo.

La maggior parte di openssl i comandi hanno opzioni -inform DER e -outform DER .-inform DER specifica che il file di input è DER e -outform DER specifica che il file di output è DER.

Utilizzare il comando seguente per convertire il formato PKCS8 in una chiave EC crittografata tradizionale in formato DER.

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

Non è possibile crittografare un file di chiave privata EC tradizionale in formato DER. Se si tenta di farlo, il comando ignora silenziosamente l'argomento. Tuttavia, puoi crittografare i file PKS8 in formato DER.

Utilizzare il comando seguente per convertire un file di chiave EC tradizionale in PKCS8 crittografato in formato DER:

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

Formati di file della chiave pubblica EC

Il formato PEM supporta diversi tipi di chiavi pubbliche in OpenSSL. Il file seguente mostra le chiavi pubbliche EC in formato PEM.

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

Utilizzare il comando seguente per creare un file di chiave pubblica da un file di chiave privata in formato PEM. Nota che non è possibile creare un file di chiave privata da un file di chiave pubblica.

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

Utilizzare il comando seguente per creare un file di chiave pubblica da un file di chiave privata in formato DER:

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

Generazione di chiavi e parametri EC

Il file dei parametri EC contiene tutte le informazioni necessarie per definire la curva anellittica per le operazioni crittografiche. OpenSSL utilizza gli algoritmi ECDH e ECDSA. Utilizzare il comando seguente per ottenere un elenco di curve integrate:

openssl ecparam -list_curves

Utilizzare il comando seguente per generare un file di parametri EC della curva secp256k1 :

openssl ecparam -name secp256k1 -out secp256k1.pem

Sostituisci secp256k1 con qualsiasi altro nome ottenuto da openssl ecparam -list_curves comando.

Puoi generare chiavi usando ecparam comando, utilizzando un file di parametri preesistente o utilizzando il nome della curva. Utilizzare il comando seguente per generare una coppia di chiavi privata/pubblica da un file di parametri:

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

Utilizzare il comando seguente per generare una coppia di chiavi privata/pubblica dal nome della curva:

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

Il file chiave contiene le informazioni sui parametri utilizzati per generare il keyembedded. OpenSSL memorizza il nome della curva nel file dei parametri o nel file della chiave. Per impostazione predefinita, non memorizza in modo esplicito l'intero set di parametri associati al nome. Utilizzare il seguente comando per confermare il nome della curva nel file dei parametri:

openssl ecparam -in secp256k1.pem -text -noout

Esempio di output:

ASN1 OID: secp256k1

Utilizzare il comando seguente per elencare i dettagli dei parametri da un file di parametri:

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

Utilizzare il comando seguente per elencare i dettagli del parametro dal nome di una curva, sostituendo il nome della curva di conseguenza:

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

Esempio di output:

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)

È possibile generare file di parametri e file chiave che includono esplicitamente l'insieme completo di parametri anziché solo il nome della curva. Questo è importante quando alcuni sistemi di destinazione non sanno i dettagli della curva. OpenSSL versione 1.0.2 ha aggiunto nuove curve, come brainpool512t1 . Versioni precedenti di OpenSSL che utilizzano un file di parametri o un file di chiavi configurato con brainpool512t1 risulta il seguente errore:

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:

Utilizzare parametri espliciti per evitare questo problema, come mostrato nel comando seguente con OpenSSL 1.0.2:

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

Il comando restituisce un file di parametri più lungo con tutti i parametri.

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

Le versioni precedenti di OpenSSL possono elaborare il file dei parametri. Usa il comando seguente in OpenSSL versione 1.0.1:

openssl ecparam -in brainpoolP512t1.pem -text -noout

OpenSSL versione 1.0.1. visualizza i parametri anche se non conosce la curva.

Utilizzare il comando seguente per generare un file chiave con parametri espliciti:

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

Le versioni precedenti di OpenSSL possono elaborare il file della chiave che ottieni.

Nota :Dopo che i parametri sono cambiati in parametri espliciti, non annullare le modifiche. Non esiste alcuna utilità per trovare quali parametri espliciti corrispondono a una curva.

Riferimenti

  • Crittografia a curva ellittica
  • Curva ellittica Diffie Hellman
  • Utilità della riga di comando

Utilizza la scheda Feedback per inserire commenti o porre domande. Puoi anche avviare una conversazione con noi.


Linux
  1. Semplice calcolatrice da riga di comando?

  2. Eseguire operazioni di scrittura atomica in un file in Bash?

  3. Converti la chiave privata Openssh in una chiave privata Ssh2?

  4. Condivisione di chiavi private tra macchine?

  5. Linux:comprensione delle operazioni dei comandi di sincronizzazione in Linux?

Come rinominare i file usando la riga di comando in Linux

Pet:un semplice gestore di frammenti da riga di comando

Come ricaricare .bash_profile nella riga di comando di Linux

Come aggiungere un IP aggiuntivo a FreeBSD 10.1

Come aggiungere un IP privato a un server Ubuntu

Come aggiungere un IP privato a un server Debian