Chiavi simmetriche e chiavi pubbliche: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
mNessun oggetto della modifica
 
(13 versioni intermedie di 7 utenti non mostrate)
Riga 1: Riga 1:
=Cos'� XAMPP=
{{Versioni compatibili}}
==Installazione Pacchetti==


Per poter creare un webserver sulla nostra macchina linux, abbiamo bisogno innanzitutto di '''Apache''' (il web server vero e proprio); poi bisogna aggiungere altre applicazioni che ci permettano di creare siti con contenuto dinamico, magari scritti in '''PHP''' (per esempio un bel CMS open source), quindi bisogna installare PHP e impostare Apache affinch� supporti questo linguaggio. Molto spesso, per�, Apache e PHP da soli non bastano, perch� la gestione dei contenuti del sito rischia di diventare laboriosa col passare del tempo: ed ecco che dobbiamo ricorrere ad un database, solitamente '''MySQL''' o PostgreSQL, che memorizzi i nostri dati e li restituisca quando servono ad Apache e PHP per visualizzarli nella pagina web del nostro sito. Installiamo, allora, anche un database e configuriamolo opportunamente. Magari ci farebbe comodo avere anche qualche bella libreria grafica (per esempio '''GDlib''') che ridimensioni ad hoc e visualizzi le nostre immagini: installiamo anche questa. Bene, a questo punto abbiamo un bel serverino web, abbastanza minimale, ma funzionale.... L'unico problema che potrebbe sorgere � che non siamo dei Guru (o semplicemente non abbiamo tanta voglia di perdere tempo) e quindi corriamo il rischio di non riuscire a configurare tutto bene e con la dovuta sicurezza.
Prima di iniziare a parlare di crittografia e chiavi, installiamo l'occorrente con un semplice:


Per alleviare il problema, su [http://www.apachefriends.org ApacheFriends] possiamo trovare il pacchetto che fa per noi: '''XAMPP'''.
<pre>
# apt-get install gnupg openssl
</pre>


''Ma cos'� XAMPP?''<br>
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).
XAMPP (fino a poco tempo fa LAMPP) � un insieme di programmi utili per la creazione di un web server: integra, infatti, Apache, MySQL, PHP, '''Perl''' e tanti altri programmi che ci permettono di creare, relativamente facilmente e velocemente, un serverino web che possa contenere il nostro sito.<br>
''E la comodit� dov'�?''<br>
La comodit� sta nel fatto che invece di scaricare e installare singolarmente tutti i programmi di cui abbiamo bisogno, con XAMPP basta scaricare un file compresso di circa 40 MB e decomprimerlo sul nostro pc. E se per qualche malaugurato motivo, in futuro, non ci va pi� di avere quella cinquantina di MB del nostro hard disk occupati da XAMPP, basta semplicemente cancellare la sua directory!
Oltre a questo, la comodit� di XAMPP sta anche nel fatto che molte sue funzioni possono essere intuitivamente configurate via web con un browser (alcune volte, per�, � necessario mettere mano al nostro editor di testi preferito e girovagare nei files di configurazione).


Come gi� detto, il pacchetto contiene molti programmi utili, tutti pi� o meno configurabili facilmente. La lista dei programmi contenuti nella versione Linux di XAMPP � la seguente:
{{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.}}


{{box|versione 1.4.14|Apache 2.0.54, MySQL 4.1.12, PHP 5.0.4 & 4.3.11 & PEAR + SQLite 2.8.9/2.8.14 + multibyte (mbstring) support, Perl 5.8.6, ProFTPD 1.2.10, phpMyAdmin 2.6.2-pl1, OpenSSL 0.9.7g, GD 2.0.1, Freetype2 2.1.7, libjpeg 6b, libpng 1.2.7, gdbm 1.8.0, zlib 1.1.4, expat 1.2, Sablotron 1.0, libxml 2.4.26, Ming 0.2a, Webalizer 2.01, pdf class 009e, ncurses 5.8, mod_perl 2.0.0-RC4, FreeTDS 0.62.4, gettext 0.11.5, IMAP C-Client 2002b, OpenLDAP (client) 2.2.13, mcrypt 2.5.7, mhash 0.8.18, eAccelerator 0.9.3, cURL 7.13.1, libxslt 1.1.8, phpSQLiteAdmin 0.2, libapreq 2.04-dev}}
== Chiavi simmetriche ==


{{Warningbox| lo scopo di questa guida � quello di spiegare come creare facilmente, tramite XAMPP, un piccolo webserver ad '''uso prettamente personale'''. Sul sito ufficiale di XAMPP � menzionato pi� volte il fatto che questo pacchetto � stato creato per essere utilizzato in ambienti di sviluppo, con tutti i problemi di sicurezza che ne derivano. Per rendere XAMPP pi� sicuro, � necessario ricorrere ad una configurazione manuale dei vari servizi (come Apache, MySQL, PHP, ecc.): questi argomenti non verranno trattati in questa guida, per cui sarebbe opportuno leggere le guide presenti nella sezione ''Networking'', in particolare la guida [[LAMP: Linux, Apache, MySQL e PHP]].}}
=== Introduzione ===


=Installazione=
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).
Dopo aver scaricato il nostro pacchetto, non ci resta che aprire la shell e loggarci come root:
<pre>$ su</pre>
A questo punto, installiamo il pacchetto semplicemente decomprimendolo in ''/opt'':
<pre># tar xvfz xampp-linux-1.4.13.tar.gz -C /opt</pre>
in questo modo il pacchetto verr� installato in ''/opt/lampp''.


{{Warningbox| sul sito ufficiale di XAMPP � indicato che questo appena descritto � il '''metodo pi� sicuro''' per installare correttamente il pacchetto. Inoltre si sconsiglia di usare programmi win32 di decompressione per estrarre i file in quanto questi potrebbero impedire la corretta installazione.}}
=== Utilizzo ===


Se abbiamo gi� una vecchia versione di XAMPP installata sul nostro sistema, questo comando sovrascriver� i vecchi files.
Vediamo in pratica ora come si può crittografare un testo con blowfish.


Se finora non abbiamo ricevuto messaggi d'errore, vuol dire che abbiamo appena finito di installare XAMPP sulla nostra macchina.
<pre>
davide@portatile:~$ openssl
OpenSSL> bf -in testoInChiaro.txt -out testoCifrato.txt
enter bf-cbc encryption password:
Verifying - enter bf-cbc encryption password:
OpenSSL> exit
</pre>


=Aggiornamento=
Verifichiamo che sia realmente crittografato:
=Avvio di XAMPP=
L'avvio di XAMPP � semplice come la sua installazione. Infatti basta digitare da root shell:
<pre># /opt/lampp/lampp start</pre>
e attendere un output simile a questo:
<pre>Starting XAMPP 1.4.14...
LAMPP: Starting Apache...
LAMPP: Starting MySQL...
LAMPP started.</pre>
A questo punto il server web � avviato.


Fino alla versione 0.9.4 il comando ''/opt/lampp/lampp start'' poteva semplicemente avviare o fermare XAMPP. Dalla versione 0.9.5 sono stati aggiunti numerosi '''comandi di controllo'''.
<pre>
<TABLE WIDTH=603 BORDER=1 BORDERCOLOR="#000000" CELLPADDING=1 CELLSPACING=0>
davide@portatile:~$ vi testoCifrato.txt
<TR VALIGN=TOP>
Salted__üÉX��øƒmºïÏć«´â>EEX�À¹®&¨Ùiu�÷éÁÀj¦1òŠí�?D¸_ã3
<TD WIDTH=132 BGCOLOR="#9999cc">
</pre>
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Com<SPAN LANG="it-IT">ando</SPAN></FONT></FONT></P>
</TD>
<TD WIDTH=452 BGCOLOR="#9999cc">
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Des<SPAN LANG="it-IT">crizione</SPAN></FONT></FONT></P>
</TD>
</TR>
<TR VALIGN=TOP>
<TD WIDTH=132>
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Courier New, monospace"><FONT SIZE=2>sta<SPAN LANG="it-IT">rt</SPAN></FONT></FONT></P>
</TD>
<TD WIDTH=452>
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Avvia
XAMPP.</FONT></FONT></P>
</TD>
</TR>
<TR VALIGN=TOP>
<TD WIDTH=132>
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Courier New, monospace"><FONT SIZE=2>sto<SPAN LANG="it-IT">p</SPAN></FONT></FONT></P>
</TD>
<TD WIDTH=452>
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Ferma
XAMPP.</FONT></FONT></P>
</TD>
</TR>
<TR VALIGN=TOP>
<TD WIDTH=132>
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Courier New, monospace"><FONT SIZE=2>res<SPAN LANG="it-IT">tart</SPAN></FONT></FONT></P>
</TD>
<TD WIDTH=452>
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Ferma
e riavvia XAMPP.</FONT></FONT></P>
</TD>
</TR>
<TR VALIGN=TOP>
<TD WIDTH=132>
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Courier New, monospace"><FONT SIZE=2>startapache</FONT></FONT></P>
</TD>
<TD WIDTH=452>
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Avvia
solo Apache.</FONT></FONT></P>
</TD>
</TR>
<TR VALIGN=TOP>
<TD WIDTH=132>
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Courier New, monospace"><FONT SIZE=2>sta<SPAN LANG="it-IT">rtssl</SPAN></FONT></FONT></P>
</TD>
<TD WIDTH=452>
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Avvia
Apache con il supporto SSL. Questo comando attiva il supporto
SSL permanentemente, p.e. se si riavvia XAMPP dopo questo
comando, Apache partir&agrave; sempre con il supporto SSL.</FONT></FONT></P>
</TD>
</TR>
<TR VALIGN=TOP>
<TD WIDTH=132>
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Courier New, monospace"><FONT SIZE=2>sta<SPAN LANG="it-IT">rtmysql</SPAN></FONT></FONT></P>
</TD>
<TD WIDTH=452>
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Avvia
solo MySQL.</FONT></FONT></P>
</TD>
</TR>
<TR VALIGN=TOP>
<TD WIDTH=132>
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Courier New, monospace"><FONT SIZE=2>sta<SPAN LANG="it-IT">rtftp</SPAN></FONT></FONT></P>
</TD>
<TD WIDTH=452>
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Avvia
il server ProFTPD. I parametri standard di connessione via FTP
sono: user &quot;nobody&quot;, password &quot;lampp&quot;.
Questo comando attiva ProFTPD permanentemente, p.e. se si
riavvia XAMPP dopo questo comando, si avvier&agrave; sempre
anche ProFTPD.</FONT></FONT></P>
</TD>
</TR>
<TR VALIGN=TOP>
<TD WIDTH=132>
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Courier New, monospace"><FONT SIZE=2>stopapache</FONT></FONT></P>
</TD>
<TD WIDTH=452>
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Ferma
Apache.</FONT></FONT></P>
</TD>
</TR>
<TR VALIGN=TOP>
<TD WIDTH=132>
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Courier New, monospace"><FONT SIZE=2>sto<SPAN LANG="it-IT">pssl</SPAN></FONT></FONT></P>
</TD>
<TD WIDTH=452>
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Ferma
Apache con il supporto SSL. Questo comando disattiva il supporto
SSL permanentemente, p.e. se si riavvia XAMPP dopo questo
comando, Apache partir&agrave; sempre senza il supporto SSL.</FONT></FONT></P>
</TD>
</TR>
<TR VALIGN=TOP>
<TD WIDTH=132>
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Courier New, monospace"><FONT SIZE=2>sto<SPAN LANG="it-IT">pmysql</SPAN></FONT></FONT></P>
</TD>
<TD WIDTH=452>
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Ferma
MySQL.</FONT></FONT></P>
</TD>
</TR>
<TR VALIGN=TOP>
<TD WIDTH=132>
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Courier New, monospace"><FONT SIZE=2>sto<SPAN LANG="it-IT">pftp</SPAN></FONT></FONT></P>
</TD>
<TD WIDTH=452>
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Ferma
il server ProFTPD. Questo comando disattiva ProFTPD
permanentemente, p.e. se si riavvia XAMPP dopo questo comando,
ProFTPD non si avvier&agrave; pi&ugrave; automaticamente.</FONT></FONT></P>
</TD>
</TR>
<TR VALIGN=TOP>
<TD WIDTH=132 HEIGHT=13>
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Courier New, monospace"><FONT SIZE=2>security</FONT></FONT></P>
</TD>
<TD WIDTH=452>
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Avvia
una serie di piccole verifiche di sicurezza.</FONT></FONT></P>
</TD>
</TR>
</TABLE>


Bene. Ora proviamo a riportarlo in chiaro:


Per esempio, per avviare Apache con il '''supporto SSL''', basta usare, da root shell, il seguente comando:
<pre>
<pre># /opt/lampp/lampp startssl</pre>
davide@portatile:~$ openssl
OpenSSL> bf -d -in testoCifrato.txt -out testoDiNuovoInChiaro.txt
enter bf-cbc decryption password:
OpenSSL> exit
</pre>


{{Warningbox| dalla versione 1.4.7, in XAMPP � stata affiancata, alla versione 4.3.x di PHP, la versione 5. In caso di problemi di '''compatibilit� con la versione 5''', � possibile selezionare quale versione caricare all'avvio dei servers, semplicemente digitando:
E si può verificare che è tornato allo stato originale.
<pre># /opt/lampp/lampp php4</pre>
per la versione 4.3.x, oppure digitando:
<pre># /opt/lampp/lampp php5</pre>
per la versione 5.
Inoltre � possibile verificare quale versione di PHP sia attiva, con il seguente comando:
<pre># /opt/lampp/lampp phpstatus</pre>
'''Appena installato, XAMPP si avvia di default con PHP 5 e Apache con supporto SSL'''}}


Se abbiamo fatto tutto bene senza errori, a questo punto ci basta aprire la pagina ''http://localhost'' dal nostro browser preferito e configurare i nostri servizi da web.
== Chiavi asimmetriche ==


=Configurazione=
=== Introduzione ===
==Primo avvio==
Dopo aver installato il nostro XAMPP, non ci resta che configurarlo secondo le nostre esigenze. Per fare questo, apriamo il nostro '''browser''' preferito e inseriamo l'URL ''http://localhost''. Ci apparir� la schermata iniziale dove potremo scegliere la '''lingua del pannello di controllo''': clicchiamo, quindi, su ''Italiano''.
La struttura del pannello di controllo � molto intuitiva, con i vari men� sulla sinistra e la pagina di modifica centrale.


===Men� XAMPP===
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.
* Stato
:Come indica il nome, qui potremo vedere lo '''stato di attivazione''' dei nostri servizi.
* Sicurezza
:Qui � possibile monitorare a grandi linee lo '''stato di sicurezza''' di XAMPP.<br>
:Al '''primo avvio di XAMPP''' vedremo che i nostri servizi sono configurati in maniera alquanto �aperta� (tutte le voci dovrebbero risultare ''insicure'', questo sempre dovuto al fatto che XAMPP � stato pensato per un ambiente di sviluppo).<br>
:A questo punto, come la stessa pagina ci suggerisce, eseguiamo un programma che effettua una serie di piccole verifiche di sicurezza. Digitiamo da root shell:
<pre># /opt/lampp/lampp security</pre>
:l'output � il seguente:
<pre>XAMPP: Quick security check...
XAMPP: Your XAMPP pages are NOT secured by a password.
XAMPP: Do you want to set a password? [yes]</pre>
:digitiamo ''yes'' e, quando richiesto, inseriamo la password (2 volte):
<pre>XAMPP: Password protection active. Please use 'lampp' as user name!</pre>
:Da adesso, per poter accedere via web alla pagina di configurazione di XAMPP dovremo autenticarci con l'username �lampp� e la nostra password.
<pre>XAMPP: MySQL is accessable via network.
XAMPP: Normally that's not raccomended. Do you want to turn it off? [yes]</pre>
:digitiamo ''yes'' per impedire che MySQL ascolti sulla nostra connessione internet.<br>
:Verr� riavviato MySQL.
<pre>XAMPP: The MySQL/phpMyAdmin user pma has no password set!!!
XAMPP: Do you want to set a password? [yes]</pre>
:Qui XAMPP ci chiede una password per l'utente generico "pma" (con limitato accesso al database) per MySQL e phpMyAdmin: digitiamo ''yes'' e inseriamo la nostra password.
<pre>XAMPP: MySQL has no root password set!!!
XAMPP: Do you want to set password? [yes]</pre>
:Ora dobbiamo inserire la password di root per MySQL (che naturalmente � la stessa di phpMyAdmin).
<pre>XAMPP: The FTP password is still set to 'lampp'.
XAMPP: Do you want to change the password? [yes]</pre>
:Adesso impostiamo la password per l'accesso FTP al nostro server.
:Verr� riavviato il demone ProFTPD.


:A questo punto possiamo verificare se la sicurezza del nostro XAMPP � aumentata. Torniamo con il browser su ''http://localhost'': se tutto � stato fatto regolarmente, ci verranno chiesti username e password per accedere al pannello di controllo di XAMPP (ricordiamoci che l'username � �lampp�).<br>
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:
:Logghiamoci nel pannello di controllo e torniamo a dove eravamo rimasti, cio� la finestra di ''Sicurezza'': se tutte le voci saranno �sicure�, allora vuol dire che abbiamo reso pi� sicuro il nostro XAMPP.


{{ Warningbox | ovviamente questa procedura serve solo a dare un '''livello minimo di sicurezza''' a XAMPP.}}
# 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.


===Men� Demo===
=== Utilizzo ===
Nella sezione ''Demo'', � possibile trovare una serie di script che dimostrano il funzionamento di XAMPP: tralasciando le altre voci, il modo pi� semplice e intuitivo per verificare se sono correttamente configurati i moduli per la '''gestione delle immagini''' del nostro futuro sito � cliccare su ''Grafica Istantanea'' (nel campo di testo, digitiamo quello che vogliamo, poi clicchiamo su OK: il risultato dovrebbe essere un'immagine con la nostra scritta) e su Grafica Flash (stesso procedimento di prima, ma in questo caso verifichiamo il funzionamento di '''MING''', che serve per produrre documenti flash).<br>


Cliccando sulla voce ''phpinfo()'' possiamo leggere le informazioni circa lo stato del nostro parser PHP (per esempio per verificare se � in esecuzione PHP5 o PHP4). Potremo vedere anche le informazioni riguardanti gli altri componenti del nostro XAMPP, come p.e. Apache2, MySQL, ecc.
Vediamo ora sul lato pratico come si procede.


===Men� Strumenti===
Per generare una chiave usiamo gpg:
Cliccando su ''phpMyAdmin'', abbiamo accesso all'interfaccia web che ci permette di '''gestire i nostri database''' MySQL.<br>
In questa sede � importante sapere che per accedere a phpMyAdmin possiamo usare l'utente �root� (con la password che abbiamo impostato in precedenza) o l'utente generico �pma� (anche questo ha associata la password che abbiamo impostato in precedenza): quest'ultimo ha limitazioni che gli permettono esclusivamente di leggere e usare il contenuto delle tabelle dei database, ma non di crearle n� modificarle.


Cliccando su ''Webalizer'' possiamo accedere ad un tool che ci permette di monitorare vari parametri del nostro webserver.
<pre>
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.


==Informazioni utili==
Per favore scegli che tipo di chiave vuoi:
===Dove sono i files importanti di XAMPP?===
  (1) DSA e ElGamal (default)
<TABLE WIDTH=600 BORDER=1 CELLPADDING=1 CELLSPACING=0>
  (2) DSA (firma solo)
<TR VALIGN=TOP>
  (4) RSA (firma solo)
<TD WIDTH=244 BGCOLOR="#9999cc">
Cosa scegli?
<P>File/Directory</P>
</pre>
</TD>
<TD WIDTH=337 BGCOLOR="#9999cc">
<P>Des<SPAN LANG="it-IT">crizione</SPAN></P>
</TD>
</TR>
<TR VALIGN=TOP>
<TD WIDTH=244 BGCOLOR="#ffffff">
<P><TT>/opt/lampp/bin/</TT></P>
</TD>
<TD WIDTH=337 BGCOLOR="#ffffff">
<P>Qui ci sono i com<SPAN LANG="it-IT">andi principali di XAMPP.
Per esempio, da qui si pu&ograve; lanciare <tt>mysql</tt> o <tt>apache2</tt>.</SPAN></P>
</TD>
</TR>
<TR VALIGN=TOP>
<TD WIDTH=244 BGCOLOR="#ffffff">
<P><TT>/opt/lampp/htdocs/</TT></P>
</TD>
<TD WIDTH=337 BGCOLOR="#ffffff">
<P>La DocumentRoot di Apache.</P>
</TD>
</TR>
<TR VALIGN=TOP>
<TD WIDTH=244 BGCOLOR="#ffffff">
<P><TT>/opt/lampp/etc/httpd.conf</TT></P>
</TD>
<TD WIDTH=337 BGCOLOR="#ffffff">
<P>Il file di configurazione di Apache.</P>
</TD>
</TR>
<TR VALIGN=TOP>
<TD WIDTH=244 BGCOLOR="#ffffff">
<P><TT>/opt/lampp/etc/my.cnf</TT></P>
</TD>
<TD WIDTH=337 BGCOLOR="#ffffff">
<P>Il file di configurazione di MySQL.</P>
</TD>
</TR>
<TR VALIGN=TOP>
<TD WIDTH=244 BGCOLOR="#ffffff">
<P><TT>/opt/lampp/etc/php.ini</TT></P>
</TD>
<TD WIDTH=337 BGCOLOR="#ffffff">
<P>Il file di configurazione di PHP.</P>
</TD>
</TR>
<TR VALIGN=TOP>
<TD WIDTH=244 BGCOLOR="#ffffff">
<P><TT>/opt/lampp/etc/proftpd.conf</TT></P>
</TD>
<TD WIDTH=337 BGCOLOR="#ffffff">
<P>Il file di configurazione di ProFTPD. (dalla ver<SPAN LANG="it-IT">sione</SPAN>
0.9.5)</P>
</TD>
</TR>
<TR VALIGN=TOP>
<TD WIDTH=244 BGCOLOR="#ffffff">
<P><TT>/opt/lampp/phpmyadmin/config.inc.php</TT></P>
</TD>
<TD WIDTH=337 BGCOLOR="#ffffff">
<P>Il file di configurazione di phpMyAdmin.</P>
</TD>
</TR>
</TABLE>


Scegliamo la prima opzione, in quanto le altre due consentono solamente di firmare.


=Disinstallazione=
<pre>
Disinstallare XAMPP � semplice come installarlo. L'unica accortezza da prendere � quella di fermarlo prima:
Cosa scegli? 1
<pre># /opt/lampp/lampp stop</pre>
La coppia DSA avrà 1024 bit.
e attendere un output simile a questo:
Sto per generare una nuova coppia di chiavi ELG-E.
<pre>Stopping LAMPP 1.4.14
              la dimensione minima è  768 bit
LAMPP: Stopping Apache...
          la dimensione predefinita è 1024 bit
LAMPP: Stopping MySQL...
  la dimensione massima consigliata è 2048 bit
LAMPP stopped.</pre>
Di che dimensioni vuoi la chiave? (1024)
A questo punto non ci resta che rimuovere la directory di XAMPP:
</pre>
<pre># rm -rf /opt/lampp</pre>


Qui scegliamo la dimensione massima.


----
Quindi decidiamo la validità della chiave.
Autore: [[Utente:soter|soter]] 12:53, Giu 23, 2005 (EDT)
 
[[Categoria:Networking]]
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 è consigliabile sceglierla particolarmente lunga e complicata.}}
 
Per vedere le chiavi nel nostro portachiavi si utilizza il comando:
 
<pre>
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
</pre>
 
Se voglio esportare la mia chiave pubblica posso procedere così:
 
<pre>
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-----
</pre>
 
Così io posso prendere il testo e salvarlo.
 
Quando voglio importare una chiave pubblica:
 
<pre>
davide@portatile:~$ gpg --import chiaveMario.gp
</pre>
 
Vediamo ora come si usa:
 
<pre>
davide@portatile:~$ gpg --encrypt --output testoSegreto.txt --recipient Prova testoInChiaro.txt
</pre>
 
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.
 
<pre>
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>"
</pre>
 
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:
 
<pre>
# 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
</pre>
 
 
'''''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:
 
<pre>
# cripti l'email con la chiave pubblica estratta 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...
</pre>
 
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]]

Versione attuale delle 14:57, 6 gen 2014

Debian-swirl.png Versioni Compatibili

Tutte le versioni supportate di Debian

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

Info.png 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.


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.

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

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:

  1. 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.
  2. 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.
  3. 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.

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.

Info.png 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 pubblica estratta 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




Guida scritta da: TheNoise Swirl-auth20.png Debianized 20%
Estesa da:
Verificata da:

Verificare ed estendere la guida | Cos'è una guida Debianized