Chiavi simmetriche e chiavi pubbliche: differenze tra le versioni

m
 
(14 versioni intermedie di 7 utenti non mostrate)
Riga 1: Riga 1:
{{Versioni compatibili}}
==Installazione Pacchetti==
==Installazione Pacchetti==


Riga 7: Riga 8:
</pre>
</pre>


Come tutti saprete, per esser sicuri che i dati passanti per la rete siano lontani da sguardi indiscreti, e' necessario avvalersi della crittografia. Esistono fondamentalmente due tipi di crittografia: a chiavi simmetriche e a chiavi asimmetriche (o chiavi pubbliche).
Come tutti saprete, per esser sicuri che i dati passanti per la rete siano lontani da sguardi indiscreti, è necessario avvalersi della crittografia. Esistono fondamentalmente due tipi di crittografia: a chiavi simmetriche e a chiavi asimmetriche (o chiavi pubbliche).


==Chiavi simmetriche==
{{Box|Nota|La crittografia dei dati non ha nulla a che vedere ne con l'anonimizzazione degli stessi ne con le procedure necessarie a garantire l'identità di chi trasmette/riceve i suddetti dati.}}
La caratteristica fondamentale è l'esistenza di un'unica chiave utilizzata per codificare il testo in chiaro e per decodificare quello cifrato. Cinoltre da dire che gli algoritmi simmetrici sono più veloci di quelli a chiave pubblica. Vediamo in pratica ora come si può crittografare un testo con blowfish.
 
== Chiavi simmetriche ==
 
=== Introduzione ===
 
La caratteristica fondamentale è l'esistenza di un'unica chiave utilizzata per codificare il testo in chiaro e per decodificare quello cifrato. Questo punto è fondamentale perché implica la necessità di fornire in maniera riservata e sicura la suddetta chiave a tutte le persone che intendono scambiarsi dati, il che può non essere un'operazione banale (inviare per esempio la suddetta chiave di cifratura attraverso un canale non sicuro come la normale mail non sarebbe ad esempio molto furbo). Oltre a ciò è opportuno notare che gli algoritmi simmetrici sono più veloci di quelli a chiave pubblica (asimmetrici).
 
=== Utilizzo ===
 
Vediamo in pratica ora come si può crittografare un testo con blowfish.


<pre>
<pre>
Riga 19: Riga 29:
OpenSSL> exit
OpenSSL> exit
</pre>
</pre>


Verifichiamo che sia realmente crittografato:
Verifichiamo che sia realmente crittografato:
Riga 39: Riga 48:
E si può verificare che è tornato allo stato originale.
E si può verificare che è tornato allo stato originale.


==Chiavi asimmetriche==
== Chiavi asimmetriche ==
In questo caso la chiave usata per cifrare e decifrare non e' la stessa. Infatti una e' utilizzata solo per cifrare(la chiave pubblica) e l'altra solo per decifrare(la chiave privata). Di conseguenza le due chiavi devono essere fortemente connesse tra di loro.
 
La chiave pubblica, come dice il nome, deve esser resa pubblica a tutte le persone che vogliono parlare con me in maniera sicura. Ad esempio io posso pubblicarla sul mio sito oppure spedirla via mail. La chiave privata è solamente mia e non va assolutamente trasmessa via mail.
=== Introduzione ===
 
In questo caso la chiave usata per cifrare e decifrare non è la stessa. Infatti una è utilizzata solo per cifrare (la chiave pubblica) e l'altra solo per decifrare (la chiave privata). La chiave pubblica, come dice il nome, deve esser resa pubblica a tutte le persone che vogliono parlare con me in maniera sicura. Ad esempio io posso pubblicarla sul mio sito oppure spedirla via mail. La chiave privata è solamente mia e non va assolutamente trasmessa via mail.
 
Il punto focale di questo metodo è quello di eliminare la necessità di scambiarsi una chiave segreta, quindi di eliminare tutti i problemi connessi a quel tipo di operazione. Prima di passare all'utilizzo pratico è necessario avere le idee chiare su qualche aspetto teorico:
 
# Come già detto una sola chiave deve essere usata per criptare i dati ed una sola per decifrarli, tuttavia questo non significa che sia realmente impossibile usare la chiave dedicata alla decrittazione per criptare i dati, ma semplicemente che un messaggio può essere decriptato solo se si usano le chiavi "nel giusto ordine". Posto ad esempio che key1 sia la chiave per criptare e key2 quella per decriptare, usando key2 su un messaggio criptato con key1 si ottiene il messaggio di partenza, mentre usando key1 o key2 su un messaggio criptato attraverso key2 sarebbe impossibile ricostruire il messaggio di partenza. Ovviamente è anche impossibile usare key1 per decifarare un messaggio criptato con key1.
# I dati che si vuole inviare in modo sicuro devono essere criptati con la chiave "criptatrice" (pubblica) del ricevente e non con quella dello spedente, ecco perché la chiave per criptare deve necessariamente essere pubblica (o almeno nota alle persone dalle quali ci si aspetta di ricevere dati criptati). Questo fatto implica anche che chi spedisce non è più in grado di leggere i (suoi) dati una volta criptati con la chiave pubblica del ricevente. Chiaramente se chi spedisce è interessato a poter accedere a tali dati deve averne una copia, in chiaro oppure criptata con un sistema di cui possieda la chiave di decrittazione.
# Sebbene la chiave di decrittazione sia sconosciuta a tutti (si spera...) eccetto che al legittimo possessore, questo non significa che sia teoricamente impossibile ricostruirla autonomamente partendo dalla chiave pubblica. Chiave pubblica e privata condividono necessariamente un legame matematico, per quanto nascosto (altrimenti sarebbe impossibile decifrare a chiunque i dati di partenza), tuttavia il tempo necessario a ricostruire autonomamente tale legame, e quindi la chiave di decrittazione, è talmente elevato da rendere la suddetta operazione concretamente impossibile. Si noti che col passare degli anni si rende necessario l'uso di chiavi più lunghe a parità di sistema di criptazione usato, infatti l'aumento delle capacità di calcolo degli elaboratori comporta che a parità di lunghezza di una chiave il tempo necessario per ricostruirla si riduce.
 
=== Utilizzo ===


Vediamo ora sul lato pratico come si procede.
Vediamo ora sul lato pratico come si procede.
Riga 73: Riga 92:
</pre>
</pre>


Qui scegliamo la dimensione massima...
Qui scegliamo la dimensione massima.


Quindi decidiamo la validità della chiave...
Quindi decidiamo la validità della chiave.


Poi si segue la procedura che fa' inserire alcuni dati e alla fine vengono create le due chiavi.
Poi si segue la procedura che fa inserire alcuni dati e alla fine vengono create le due chiavi.


{{Box|Nota|La passphrase che viene richiesta e' consigliabile sceglierla particolarmente lunga e complicata.}}
{{Box|Nota|La passphrase che viene richiesta è consigliabile sceglierla particolarmente lunga e complicata.}}


Per vedere le chiavi nel nostro portachiavi si utilizza il comando:
Per vedere le chiavi nel nostro portachiavi si utilizza il comando:
Riga 136: Riga 155:
</pre>
</pre>


Dove Prova e' il commento per la chiave pubblica del nostro destinatario. (Vedi sopra).
Dove <code>Prova</code> è il commento per la chiave pubblica del nostro destinatario. (Vedi sopra).


Bene. Proviamo a decifrarla con la chiave privata, fingendoci il destinatario.
Bene. Proviamo a decifrarla con la chiave privata, fingendoci il destinatario.
Riga 152: Riga 171:


Bene, visto che funziona, facciamo un passo avanti. Con la nostra
Bene, visto che funziona, facciamo un passo avanti. Con la nostra
chiave privata si può inoltre "firmare".Così sono sicuro
chiave privata si può inoltre "firmare". Così sono sicuro
della provenienza dell'e-mail. Spesso le due tecniche vengono combinate:
della provenienza dell'e-mail. Spesso le due tecniche vengono combinate:
prima la mail viene cifrata con la chiave pubblica del destinatario, poi
prima la mail viene cifrata con la chiave pubblica del destinatario, poi
Riga 167: Riga 186:
''di gad--''
''di gad--''


Non capisco propio perchè hai usato openssl per la cifratura a chiavi simmetriche e gpg per quella con chiavi asimmetriche. Per precisione è meglio dire che anche con openssl puoi criptare con la chiave pubblica. Ti riporto un esempio:
Non capisco proprio perché hai usato openssl per la cifratura a chiavi simmetriche e gpg per quella con chiavi asimmetriche. Per precisione è meglio dire che anche con openssl puoi criptare con la chiave pubblica. Ti riporto un esempio:


<pre>
<pre>
#generi la chiave privata di lunghezza 1024 con l'algoritmo di cifratura des3
# generi la chiave privata di lunghezza 1024 con l'algoritmo di cifratura des3


openssl genrsa -out rsaprivatekey.pem -des3 1024
openssl genrsa -out rsaprivatekey.pem -des3 1024


#crei la chiave pubblica
# crei la chiave pubblica


openssl rsa -in rsaprivatekey.pem -pubout -out rsapublickey.pem
openssl rsa -in rsaprivatekey.pem -pubout -out rsapublickey.pem


#a questo punto hai la coppia di chiavi. Usi la chiave pubblica x criptare il testo
# a questo punto hai la coppia di chiavi. Usi la chiave pubblica x criptare il testo


openssl rsautl -encrypt -pubin -inkey rsapublickey.pem -in testodacifrare.txt -out testocifrato.txt
openssl rsautl -encrypt -pubin -inkey rsapublickey.pem -in testodacifrare.txt -out testocifrato.txt


#lo riporti in chiaro applicando la chiave privata
# lo riporti in chiaro applicando la chiave privata


openssl rsautl -decrypt -inkey rsaprivatekey.pem -in testocifrato.txt -out testoinchiaro.txt
openssl rsautl -decrypt -inkey rsaprivatekey.pem -in testocifrato.txt -out testoinchiaro.txt
Riga 191: Riga 210:


Sembra che con RSA puro si possa cifrare una quantità di dati molto limitata (dipende dalla lunghezza della chiave, comunque si parla di 117 byte per chiavi di 1024 bit) quindi nella maggior parte dei casi pratici l'esempio sopra non può essere applicabile direttamente.
Sembra che con RSA puro si possa cifrare una quantità di dati molto limitata (dipende dalla lunghezza della chiave, comunque si parla di 117 byte per chiavi di 1024 bit) quindi nella maggior parte dei casi pratici l'esempio sopra non può essere applicabile direttamente.
Solitamente infatti si usa RSA per cifrare una chiave casuale che viene usata per cifrare il file con un algorimo simmetrico. Sembra che non sia possibile fare questo in modo banale con openssl (occorre fare diversi passaggi e distribuire le informazioni in file separati, per un esempio vedere http://www.dmst.aueb.gr/dds/secimp/crypto/indexw.htm al paragrafo "Case Study: Public Key Cryptography") a meno di non utilizzare la codifica S/MIME di cui parli sotto.
Solitamente infatti si usa RSA per cifrare una chiave casuale che viene usata per cifrare il file con un algoritmo simmetrico. Sembra che non sia possibile fare questo in modo banale con openssl (occorre fare diversi passaggi e distribuire le informazioni in file separati, per un esempio vedere http://www.dmst.aueb.gr/dds/secimp/crypto/indexw.htm al paragrafo "Case Study: Public Key Cryptography") a meno di non utilizzare la codifica S/MIME di cui parli sotto.


Scusate se il commento non é inserito nel modo più ortodosso ma passavo di qui per caso.
Scusate se il commento non è inserito nel modo più ortodosso ma passavo di qui per caso.


'''''Fine dell'osservazione sul commento di gad:'''''
'''''Fine dell'osservazione sul commento di gad:'''''


Sono d'accordo con te quando dici che pgp è il più usato, perchè supportato da quasi tutti i client email. Comunque anche openssl comprende un protocollo specifico per criptare le email. Il protocollo S/MIME – Secure Multipurpose Internet Mail Extensions. Dunque i due software sono funzionalmente equivalenti, tranne per un aspetto rilevante: il modello di fiducia.
Sono d'accordo con te quando dici che pgp è il più usato, perché supportato da quasi tutti i client email. Comunque anche openssl comprende un protocollo specifico per criptare le email. Il protocollo S/MIME – Secure Multipurpose Internet Mail Extensions. Dunque i due software sono funzionalmente equivalenti, tranne per un aspetto rilevante: il modello di fiducia.


La differenza fondamentale tra i due sistemi è che mentre PGP utilizza una gestione "utente-centrica" delle chiavi pubbliche (il cosiddetto web of trust), S/MIME impiega una struttura gerarchica di certificazione (le Certification Authorities o CA).
La differenza fondamentale tra i due sistemi è che mentre PGP utilizza una gestione "utente-centrica" delle chiavi pubbliche (il cosiddetto web of trust), S/MIME impiega una struttura gerarchica di certificazione (le Certification Authorities o CA).
Riga 208: Riga 227:


<pre>
<pre>
#cripti l'email con la chiave publica estrata dal certificato
# cripti l'email con la chiave pubblica estratta dal certificato
openssl smime -encrypt -in mail.txt -des3 -out mail.enc cert.pem
openssl smime -encrypt -in mail.txt -des3 -out mail.enc cert.pem
#decripta l'email usando la chiave privata
# decripta l'email usando la chiave privata
openssl smime -decrypt -in mail.enc -recip cert.pem -inkey privatekey.pem -out mail .txt
openssl smime -decrypt -in mail.enc -recip cert.pem -inkey privatekey.pem -out mail .txt
#etc...
# etc...
</pre>
</pre>


P.S.: Spero che con questo contribuito ho aggiunto qualcosa in + al articolo che cmq è ottimo.
P.S.: Spero, con questo contribuito, di aver aggiunto qualcosa in più all'articolo.
 
== Link ==
 
* [http://www.gnupg.org/gph/it/concetti.html Manuale GNU sulla privacy: Concetti] - Per approfondire i concetti di algoritmi simmetrici, asimmetrici o ibridi.
 
{{Autori
|Autore = [[Utente:TheNoise|TheNoise]]
}}
 
[[Categoria:Crittografia]]
2 894

contributi