Crittografia Asimmetrica (a chiave pubblica) con OpenSSL

Vediamo come utilizzare OpenSSL per cifrare i nostri files usando un algoritmo di crittografia a chiave asimmetrica.

In questo articolo abbiamo visto come sia possibile cifrare facilmente i nostri files di testo con VI tramite un algoritmo di cifratura simmetrico. Gli algoritmi simmetrici hanno un punto debole: la trasmissione della chiave; è necessario accordarsi preventivamente sulla password da usare o trovare un modo per trasmetterla in maniera sicura. È per questo motivo che è stata inventata la crittografia asimmetrica.

La crittografia asimmetrica utilizza, al posto di una sola chiave unica condivisa, una coppia di chiavi:

  • Una chiave pubblica, che deve essere condivisa affinché la crittografia abbia buon fine e con cui verranno cifrati i files diretti a voi.
  • Una chiave privata, che verrà usata da voi per decifrare il file inviatovi.

Le due chiavi sono strettamente legate, ma è virtualmente impossibile risalire alla chiave privata partendo dalla chiave pubblica.

Ecco un esempio per chiarire il funzionamento:

Alice deve inviare a Bob un messaggio cifrato, Bob ha già condiviso in passato la sua chiave pubblica con Alice, perciò ad Alice basterà cifrare il messaggio con la chiave pubblica di Bob.

Quando Bob riceverà il messaggio userà la propria chiave privata per decifrarlo.

Ora usiamo OpenSSL per la cifratura vera e propria dei nostri FIles. Apriamo il terminale.

Iniziamo creando la nostra chiave privata con il comando:

openssl genrsa -out miachiave.privata 2048

che produrrà una chiave privata da 2048 bit. Ovviamente non ce ne facciamo nulla se non abbiamo una chiave pubblica da condividere, per cui ora estraiamo la chiave pubblica da quella privata:

openssl rsa -in miachiave.privata -pubout > miachiave.pubblica

Il parametro -pubout fa in modo che openSSL generi la chiave pubblica in uscita. Questa è la chiave che andrà condivisa e con cui verranno cifrati i messaggi che vi verranno inviati.

Per criptare un file basta usare il comando:

openssl rsautl -encrypt -inkey miachiave.pubblica -pubin -in doc.txt -out doc.txt.cfr

Questa usa la chiave pubblica per cifrare il file doc.txt e mandando in uscita il file doc.txt.cfr. Se provate ad aprire quest'ultimo vedrete che le informazioni in esso contenute sono illeggibili.

Per decriptare il file basta usare il comando:

openssl rsautl -decrypt -inkey miachiave.privata -in doc.txt.cfr -out doc.txt

che userà la nostra chiave privata per decifrare il messaggio.

Provate a decifrare il messaggio usando la stessa chiave pubblica con cui è stato cifrato

Ora passiamo ai limiti della Crittografia Asimmetrica.

Il primo è sicuramente la protezione della chiave privata, se questa viene condivisa è un guaio. Un piccolo trucco consiste nell'aggiungere l'opzione -des3 durante la creazione della chiave privata. Questo comando la cifrerà con l'algoritmo simmetrico TripleDES, usate una password e sarete mediamente al sicuro.

openssl genrsa -des3 -out miachiave.privata.cifrata 2048

Ogni volta che farete un'operazione che coinvolga la chiave privata, vi verrà chiesta la password.

Il secondo limite è il fatto che la chiave di cifratura deve essere più grande del file cifrato.

Il problema è facilmente risolvibile, cifrate il vostro grosso file con la cifratura simmetrica e poi usate la cifratura asimmetrica per cifrare la password.

E con questo è tutto. Saluti!

Penaz

social