Elaborazione delle chiavi DSA.
Openssl dsa [openssl dsa [-inform PEM|DER] [-outform PEM|DER] [-in filename] [-passin arg] [-out filename] [-passout arg] [-des] [-des3] [-idea] [-text] [-noout] [-modulus] [-pubin] [-pubout]
I comandi dsa elaborano le chiavi DSA. Essi possono essere convertiti tra vari formati e i suoi componenti vengono stampati. N.B. questi comandi usano il tradizionale formato SSLeay compatibile per cifratura a chiave privata: applicazioni più nuove usano il più sicuro formato PKCS#8 usando il comando pkcs8.
Il formato PEM della chiave privata usa le seguenti linee di intestazione e di fine:
Il formato PEM della chiave pubblica usa le seguenti linee di intestazione e di fine:
1) Rimuovere la pass phrase sulla chiave privata DSA:
openssl dsa –in key.pem –out keyout.pem
2) Cifrare una chiave privata usando il DES triplo:
openssl dsa –in key.pem –des3 –out keyout.pem
3) Convertire la chiave privata dal formato PEM al formato DER:
openssl dsa –in key.pem –outform DER –out keyout.der
4) Stampare le componenti della chiave privata sullo standard output:
openssl dsa –in key.pem –text –noout
5) Emettere la parte pubblica della chiave privata:
openssl dsa –in key.pem –pubout –out pubkey.pem
dsaparam(1), gendsa(1), rsa(1), genrsa(1).
dsparam – generazione e manipolazione di parametri DSA.
openssl dsaparam [-inform DER|PEM][-outform DER|PEM][-in filename][-out filename][-noout][-text][-C] [-rand file(s)][-genkey][numbits]
Questi comandi sono usati per la generazione o la manipolazione di file di parametri DSA.
Il formato PEM dei parametri DSA usa le seguenti linee di intestazione e di fine:
La generazione di parametri DSA è un processo lento e come risultato lo stesso insieme di parametri DSA è spesso usato per generare diverse differenti chiavi.
gendsa – genera una chiave privata DSA da un insieme di parametri
openssl gendsa [-out nome_file] [-des] [-des3] [-idea] [-rand file(s)] [paramfile]
Il comando gendsa genera una chiave privata DSA da un file di parametri DSA (che sarà tipicamente generato dal comando OpenSSL dsaparam).
La generazione della chiave DSA è poco più di una generazione di numeri casuali, per cui essa è molto più veloce della generazione, per esempio, della chiave RSA.
dsaparam(1), dsa(1), genrsa(1), rsa(1).
genrsa – genera una chiave privata RSA
openssl genrsa [-out nome_file] [-passout arg] [-des] [-des3] [-idea] [-f4] [-3] [-rand file(s)] [numbits]
Il comando genrsa genera una chiave privata RSA
La generazione della chiave privata RSA coinvolge sostanzialmente la generazione di due numeri primi. Quando è in corso la generazione della chiave privata, diversi simboli vengono inviati in output per indicare i progressi della generazione. Un ‘.’ rappresenta ogni numero che ha passato un test iniziale di validità, un ‘+’ indica un numero che ha passato un singolo round del test di primalità di Miller-Rabin. Un ‘newline’ indica un numero che ha passato tutti i test di primalità (il numero attuale dipende dalla dimensione della chiave).
Poiché la generazione di una chiave è un processo casuale, il tempo richiesto può variare di parecchio.
Un problema dell’algoritmo di generazione dei primi è che esso non può generare numeri primi piccoli. Pertanto, il numero di bits non deve essere inferiore a 64. Per chiavi private tipiche, questo non accade dato che per ragioni di sicurezza vengono richiesti molti più bits (tipicamente 1024).
rsa – strumento per processare la chiave RSA.
openssl rsa[-inform] [-outform |PEM|NET|DER] [-in filename] [-passin arg] [-out filename] [passout arg] [-sgckey] [-des] [-des3] [-idea] [-text] [-noout] [-modulus] [-check] [-pubin] [-pubout]
Il comando rsa processa le chiavi RSA. Esse possono essere convertite in varie forme e le loro componenti possone essere stampate. Nota che questo comando usa il formato tradizionale compatibile SSLeay per la cifratura della chiave privata: applicazioni più nuove dovrebbero usare il formato più sicuro PKCS#8 che usa l’utility pkcs8.
Il formato PEM della chiave privata usa le linee di intestazione e di fine:
Il formato PEM per la chiave pubblica usa le seguenti linee di intestazione e di fine:
Il formato NET è un formato compatibile con il piu vecchio server Netscape e Microsoft IIS. Il file di chiavi usa l’RC4 unsalted per la sua cifratura. Esso non è molto sicuro per cui dovrebbe essere usato solo se necessario.
Alcune delle versioni più recenti di IIS hanno dati addizionali nei file di chiavi esportati. Per usarle insieme alle utility guarda il file con un editor binario e contralla la stringa private-key successivamente tracciare la sequenza di byte 0x30, 0x82 (questa è un ANS1 SEQUENCE). A questo punto copia tutti i dati in un altro file e usa come input l’utility rsa con l’opzione –inform NET. Se si ha un errore dopo aver inserito la password provare a specificare l’opzione –sgckey.
1) Rimuovere la pass phrase in una chiave privata RSA:
openssl rsa-in key.pem –out keyout.pem
2) Cifrare una chiave privata usando il DES triplo:
openssl rsa –in key.pem –des3 –out keyout.pem
3) Convertire una chiave privata dal formato PEM al DER:
openssl rsa –in key.pem –outform DER –out keyout.der
4) Stampare le componenti di una chiave privata sullo standard output:
openssl rsa –in key.pem –text –noout
5) Produrre la parte pubblica di una chiave privata:
openssl rsa –in key.pem –pubout –out pubkey.pem
Gli argomenti della password del commando di linea non lavorano correntemente con il formato NET. Ci dovrebbe essere una opzione che automaticamente tratta i key files, senza averli compilati manualmente.
pkcs8(1), dsa(1), genrsa(1), gendsa(1)
rsautl – utility RSA
openssl rsautl [-in file][-out file][-inkey file][pubin][-certin][-sign][-verify][-encrypt] [-decrypt][-pkcs][-ssl][-raw][-hexdump][-asn1parse]
Il comando rsautl potrebbe essere usato per firmare, verificare, cifrare e decifrare dati usando l’algoritmo RSA.
Poichè rsautl usa l’algoritmo RSA direttamente può solo essere usato per firmare o verificare piccoli pezzi di dati.
1) Firmare alcuni dati usando una chiave privata:
openssl rsault –sign –in file –inkey key.pem –out sig
2) Recuperare i dati firmati:
openssl rsault –verify –in sig –inkey key.pem
3) Esaminare i dati firmati:
openssl rsault –verify –in file –inkey key.pem –raw –hexdump
Questo fornisce un output del tipo seguente:
0000 | – |
00 | 01 |
ff | ff |
ff | ff |
ff | ff |
- | ff |
ff | ff |
ff | ff |
ff | ff |
ff | .... |
.... | |
0010 | – |
ff | ff |
ff | ff |
ff | ff |
ff | ff |
- | ff |
ff | ff |
ff | ff |
ff | ff |
ff | .... |
.... | |
0020 | – |
ff | ff |
ff | ff |
ff | ff |
ff | ff |
- | ff |
ff | ff |
ff | ff |
ff | ff |
ff | .... |
.... | |
0030 | – |
ff | ff |
ff | ff |
ff | ff |
ff | ff |
- | ff |
ff | ff |
ff | ff |
ff | ff |
ff | .... |
.... | |
0040 | – |
ff | ff |
ff | ff |
ff | ff |
ff | ff |
- | ff |
ff | ff |
ff | ff |
ff | ff |
ff | .... |
.... | |
0050 | – |
ff | ff |
ff | ff |
ff | ff |
ff | ff |
- | ff |
ff | ff |
ff | ff |
ff | ff |
ff | .... |
.... | |
0060 | – |
ff | ff |
ff | ff |
ff | ff |
ff | ff |
- | ff |
ff | ff |
ff | ff |
ff | ff |
ff | .... |
.... | |
0070 | – |
ff | ff |
ff | ff |
00 | 68 |
65 | 6c |
- | 6c |
6f | 20 |
77 | 6f |
72 | 6c |
64 | .... |
.... | hello world |
Il blocco formattato PKCS#1 è evidente da questo. Se questo è stato fatto usando
la cifratura e la decifratura il blocco potrebbe essere di tipo 2 (il secondo
byte) e padding casuale dei dati visibili invece dei bytes 0xff.
E' possibile analizzare la firma dei certficati usando questa utility insieme
all’opzione asn1parse.
4) Esaminare la firma:
openssl asn1parse –in pca-cert.pem
Si ottiene una sequenza del tipo seguente:
0: | d=0 | hl=4 |
l=742 | cons:SEQUENZA |
|
4: | d=1 | hl=4 |
l=591 | cons:SEQUENZA |
|
8: | d=2 | hl=2 |
l=3 | cons:cont[0] |
|
10: | d=3 | hl=2 |
l=1 | prim:INTERI |
|
13: | d=2 | hl=2 |
l=1 | prim:INTERI |
|
16: | d=2 | hl=2 |
l=13 | cons:SEQUENZA |
|
18: | d=3 | hl=2 |
l=9 | prim:OGGETTO |
md5ConCifraturaRSA |
29: | d=3 | hl=2 |
l=0 | prim:NULL |
|
31: | d=2 | hl=2 |
l=92 | cons:SEQUENZA |
|
33: | d=3 | hl=2 |
l=11 | cons:SET |
|
35: | d=4 | hl=2 |
l=9 | cons:SEQUENZA |
|
37: | d=5 | hl=2 |
l=3 | prim:OGGETTO |
countryName |
45: | d=5 | hl=2 |
l=2 | prim:PRINTABLESTRING: AU |
|
... | ... | ... |
... | ... |
|
599: | d=1 | hl=2 |
l=13 | cons:SEQUENZA |
|
601: | d=2 | hl=2 |
l=9 | prim:OGGETTO |
md:md5WithRSAEncryption |
612: | d=2 | hl=2 |
l=0 | prim:NULL |
|
614: | d=1 | hl=3 |
l=129 | prim:BIT STRING |
5) Il BIT STRING finale contiene l’attuale firma. Esso può essere estratto con:
openssl asn1-parse –in pca-cert.pem –out sig –noout -strparse 614
6) La chiave pubblica del certificato può essere estratto con:
openssl x509 –in test/testx509.pem –pubout –noout >pubkey.pem
7) La firma può essere analizzata con:
openssl rsault –in sig –verify –asn1parse –inkey.pem –pubin
0: | d=0 | hl=2 |
l=32 | cons:SEQUENZA |
|
2: | d=1 | hl=2 |
l=12 | cons:SEQUENZA |
|
4: | d=2 | hl=2 |
l=8 | prim:OGGETTO |
:md5 |
14: | d=2 | hl=2 |
l=0 | prim:NULL |
|
16: | d=1 | hl=2 |
l=16 | prim:OCTET STRING |
0000 | – |
f3 | 46 |
9e | aa |
1a | 4a |
73 | c9 |
- | 37 |
ea | 93 |
00 | 48 |
25 | 08 |
b5 |
|
.F...Js.7..H%.. |
Questa è una versione analizzata dalla struttura DigestInfo ASN1. Da essa può essere visto che il digest usato fu md5.
8) L'attuale parte del certificato che fu firmato può essere estratta con:
openssl asn1parse –in pca-cert.pem –out tbs –noout –strparse 4
9) e il suo digest calcolato con:
openssl md5 –c tbs
ottenendo valori del tipo:
MD5(tbs)= f3:46:pe:aa:1a:4a:73:c9:37:ea:93:00:48:25:08:b5
Che può essere visto in accordo con i valori recuperati sopra.