Chiavi simmetriche e chiavi pubbliche: differenze tra le versioni
m (aggiunto link) |
S3v (discussione | contributi) Nessun oggetto della modifica |
||
Riga 7: | Riga 7: | ||
</pre> | </pre> | ||
Come tutti saprete, per esser sicuri che i dati passanti per la rete siano lontani da sguardi indiscreti, | 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== | ==Chiavi simmetriche== | ||
Riga 40: | Riga 40: | ||
==Chiavi asimmetriche== | ==Chiavi asimmetriche== | ||
In questo caso la chiave usata per cifrare e decifrare non | 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). 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. | 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. | ||
Riga 77: | Riga 77: | ||
Quindi decidiamo la validità della chiave... | Quindi decidiamo la validità della chiave... | ||
Poi si segue la procedura che fa | 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 | {{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 136: | ||
</pre> | </pre> | ||
Dove Prova | Dove Prova è 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 152: | ||
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 167: | ||
''di gad--'' | ''di gad--'' | ||
Non capisco | 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> | ||
Riga 191: | Riga 191: | ||
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 | 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 | 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, | 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). |
Versione delle 22:44, 2 gen 2010
Installazione Pacchetti
Prima di iniziare a parlare di crittografia e chiavi, installiamo l'occorrente con un semplice:
# apt-get install gnupg openssl
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
La caratteristica fondamentale è l'esistenza di un'unica chiave utilizzata per codificare il testo in chiaro e per decodificare quello cifrato. C'è inoltre 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.
davide@portatile:~$ openssl OpenSSL> bf -in testoInChiaro.txt -out testoCifrato.txt enter bf-cbc encryption password: Verifying - enter bf-cbc encryption password: OpenSSL> exit
Verifichiamo che sia realmente crittografato:
davide@portatile:~$ vi testoCifrato.txt Salted__üÉX��øƒmºïÏć«´â>EEX�À¹®&¨Ùiu�÷éÁÀj¦1òŠí�?D¸_ã3
Bene. Ora proviamo a riportarlo in chiaro:
davide@portatile:~$ openssl OpenSSL> bf -d -in testoCifrato.txt -out testoDiNuovoInChiaro.txt enter bf-cbc decryption password: OpenSSL> exit
E si può verificare che è tornato allo stato originale.
Chiavi asimmetriche
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). 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.
Vediamo ora sul lato pratico come si procede.
Per generare una chiave usiamo gpg:
davide@portatile:~$ gpg --gen-key gpg (GnuPG) 1.2.4; Copyright (C) 2003 Free Software Foundation, Inc. This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the file COPYING for details. Per favore scegli che tipo di chiave vuoi: (1) DSA e ElGamal (default) (2) DSA (firma solo) (4) RSA (firma solo) Cosa scegli?
Scegliamo la prima opzione, in quanto le altre due consentono solamente di firmare.
Cosa scegli? 1 La coppia DSA avrà 1024 bit. Sto per generare una nuova coppia di chiavi ELG-E. la dimensione minima è 768 bit la dimensione predefinita è 1024 bit la dimensione massima consigliata è 2048 bit Di che dimensioni vuoi la chiave? (1024)
Qui scegliamo la dimensione massima...
Quindi decidiamo la validità della chiave...
Poi si segue la procedura che fa inserire alcuni dati e alla fine vengono create le due chiavi.
Nota La passphrase che viene richiesta è consigliabile sceglierla particolarmente lunga e complicata. |
Per vedere le chiavi nel nostro portachiavi si utilizza il comando:
davide@portatile:~$ gpg --list-keys /home/davide/.gnupg/pubring.gpg ------------------------------- pub 1024D/84050639 2005-01-18 Paolo Rossi (Prova) <paolo.rossi@libero.it> sub 1024g/C02A6DF1 2005-01-18
Se voglio esportare la mia chiave pubblica posso procedere così:
davide@portatile:~$ gpg --armor --export Paolo Rossi (l'opzione --armor mi indica che voglio esportare la chiave in formato ASCII) -----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.2.4 (GNU/Linux) mQGiBEHs9lYRBADL2Pke4aVfdx62B25cRvV8A78V6lw6kS50kx2eeFiKdjRmfpr1 c7pZJEjUCYtiWkKCZnOiEJfnN3YPCEAugNJyD/VSS1Jw9Chlhtga43q1BI3AgoIi 1yNQQ0q67kA6i2KEgoou9h4xPae3OVFWDfp2C+qivJ4W2psWEv+CP0GRvwCgtTMm OUHvCR8k6mznh4iK/WAlDTcEAI4m3TWNAsmY4iXA8gtFh4S1Zmg2h7w+e2HzbXjQ 91ZdzjxN27dN/2q6t42/YQSBPlNmtQgSOY4OcK+BPg8ugzveAC6rBm1ZDgxmhq1b NVWn4gOxlq2gl0l/xQbTfyyMZ/V+KfpoN8kH/kzP3olrKxfqirH/9qrcQY3zgStM ZL9QA/9Bys3TwZD2FnIIdjlHTDQs40KEzc/4i4Ks9VBTZrUgHnnZOyHK+DvH9QTZ 8WXaJNgXEB/uU8weNoZX94ncqdW3d5DfyP5999Z5sXUlm4lRwWKKijMgIp6gOf8O MwVtAEBBjd7sAFmpsZZ2bktL1799FmixHeZtxGuw3ul0dWf6CLYAAAArUGFvbG8g Um9zc2kgKFByb3ZhKSA8cGFvbG8ucm9zc2lAbGliZXJvLml0PoheBBMRAgAeBQJB 7PZWAhsDBgsJCAcDAgMVAgMDFgIBAh4BAheAAAoJEIMe3VSEBQY5NMYAmwU+KCnA f/rlTbddLQpZTigt5PXEAJ0eIaBK0h9HdkuHConBDz5edDXwwrkBDQRB7PZYEAQA qQKvxUlAPVpXdwkFCnEmD0/xveEi0Edwgi5vKqlL17HgpSZDgQel7y1GnDd2ENLs OleKXFJ/02k/+fnUAcn2jMzjWo8jgchW+AUc1hL8xhoQV/LFBiXJQUBRg3BwT1Y3 z1I8xP31tRWbt3CPa9Yi5k3T8I0N/Kfvg1CAPAAgGrcABAsD/3N5RszeKjvCsHzg yfrcjF2ZndHEvkHYNEpGLCglXT9+N84KO6+OJpe8K9943PyxVgds2li4fjvwlA4k L01dvKqJqndoDTcr/lAM6ML0LTM1YKTnk4LPNgQj1E1g6nVQ2rPLJ7yYzitfNiLT Nn+5kIrtLcHYGOhd66sTddaeUqa9iEkEGBECAAkFAkHs9lgCGwwACgkQgx7dVIQF BjkWLgCePHfhrb1j3zOhFyqb2bpePWD2Pc0An1lbk7jMMo4U1FGONcHm3pM2VDhB =UFTN -----END PGP PUBLIC KEY BLOCK-----
Così io posso prendere il testo e salvarlo.
Quando voglio importare una chiave pubblica:
davide@portatile:~$ gpg --import chiaveMario.gp
Vediamo ora come si usa:
davide@portatile:~$ gpg --encrypt --output testoSegreto.txt --recipient Prova testoInChiaro.txt
Dove Prova è il commento per la chiave pubblica del nostro destinatario. (Vedi sopra).
Bene. Proviamo a decifrarla con la chiave privata, fingendoci il destinatario.
davide@portatile:~$ gpg --decrypt --output decifrato.txt testoSegreto.txt Ti serve una passphrase per sbloccare la chiave segreta dell'utente: "Paolo Rossi (Prova) <paolo.rossi@libero.it>" chiave ELG-E di 1024 bit, ID C02A6DF1, creata il 2005-01-18 (key ID principale 84050639) gpg: cifrato con la chiave ELG-E di 1024 bit, ID C02A6DF1, creata il 2005-01-18 "Paolo Rossi (Prova) <paolo.rossi@libero.it>"
Bene, visto che funziona, facciamo un passo avanti. Con la nostra chiave privata si può inoltre "firmare". Così sono sicuro della provenienza dell'e-mail. Spesso le due tecniche vengono combinate: prima la mail viene cifrata con la chiave pubblica del destinatario, poi con la mia chiave privata, dando la certezza praticamente assoluta della provenienza della mail al destinatario. Infatti le mail che hanno la firma digitale non possono essere ripudiate, ovvero il mittente non potrà negare di aver mandato suddetta mail.
--
Autore: darco
Commenti
di gad--
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:
# generi la chiave privata di lunghezza 1024 con l'algoritmo di cifratura des3 openssl genrsa -out rsaprivatekey.pem -des3 1024 # crei la chiave pubblica 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 openssl rsautl -encrypt -pubin -inkey rsapublickey.pem -in testodacifrare.txt -out testocifrato.txt # lo riporti in chiaro applicando la chiave privata openssl rsautl -decrypt -inkey rsaprivatekey.pem -in testocifrato.txt -out testoinchiaro.txt
Osservazione sul commento di gad:
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 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.
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.
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).
S/MIME ha un modello di fiducia gerarchico, in cui "autorità di certificazione" certificano l'identità degli utenti (e questa è la struttura adottata anche dalla legislazione italiana), PGP adotta un sistema a rete, in cui gli utenti si certificano a vicenda: ogni utente mantiene la lista di chiavi pubbliche dei suoi corrispondenti (viene chiamata keyring), ognuna delle quali viene firmata con la propria chiave privata.
È possibile scambiarsi i keyring: alle chiavi importate (e quindi firmate dal proprietario) è possibile assegnare diverse gradazioni di "fiducia" che permettono di costruire il cosiddetto web of trust (l'equivalente della struttura gerarchica dei certificati). ... bla, bla , bla
Vi riporto anche un esempio di utilizzo:
# cripti l'email con la chiave publica estrata dal certificato openssl smime -encrypt -in mail.txt -des3 -out mail.enc cert.pem # decripta l'email usando la chiave privata openssl smime -decrypt -in mail.enc -recip cert.pem -inkey privatekey.pem -out mail .txt # etc...
P.S.: Spero, con questo contribuito, di aver aggiunto qualcosa in più all'articolo.
Link
- Manuale GNU sulla privacy: Concetti - Per approfondire i concetti di algoritmi simmetrici, asimmetrici o ibridi.