Crittografia e Steganografia - L'Arte di nascondere le informazioni: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
mNessun oggetto della modifica
m (→‎Link utili: corretto link)
Riga 1: Riga 1:
Mapserver � un software che fornisce mappe ed altri dati di tipo GIS. Questa applicazione viene distribuita unitamente ad una estensione di PHP chiamata '''mapscript''' che permette di accedere alle funzioni di MapServer direttamente dal codice PHP. Purtroppo il relativo pacchetto Debian, a causa di una incompatibilit� delle librerie relative alla gestione delle REGEXP da parte di MapServer e del sistema, non contiene questa estensione.
=Introduzione=
Questa guida spiega come ottenere mapscript a dispetto di questo inconveniente.


Happy Hacking!
L'esigenza di garantire che un messaggio possa arrivare inalterato e non violato esiste probabilmente da quando l'uomo ha iniziato a comunicare; la storia è piena d'episodi e racconti che hanno per argomento messaggi e codici segreti, oppure i tentativi fatti per riuscire a decodificarli. Nel passato le esigenze di segretezza riguardavano prevalentemente la sfera politica e militare, senza arrivare a interessare, se non in minima parte, i cittadini comuni; con l'espansione sempre più forte delle comunicazioni a distanza l'esigenza di garantire l'invio di dati sensibili (pensiamo, per esempio, ai pagamenti effettuati tramite carta di credito) e, più in generale, la privacy dei dati e delle comunicazioni interpersonali, ha posto in grande evidenza i temi della crittografia e della steganografia dei dati, che studiano rispettivamente come codificare un messaggio per renderlo incomprensibile e come nasconderlo per renderlo inintelligibile.
Non bisogna pensare che la necessità di mantenere la riservatezza delle comunicazioni riguardi unicamente chi ha "qualcosa da nascondere": la scarsa sicurezza intrinseca della maggior parte dei sistemi di comunicazione a distanza non può garantire quel diritto alla privacy che è ormai sancito dalla legislazione di tutti i Paesi.


==Installazione ambiente LAMP==
Si veda a questo proposito la guida [[LAMP: Linux, Apache, MySQL e PHP]].
Per brevit, riporto i comandi base pe l' installazione dell' ambiente LAMP, rimandandovi al documento di cui sopra per la loro (eventuale) configurazione:
<pre># apt-get install apache phpmyadmin libapache-mod-php4 php4 php4-mysql mysql-server-4.1</pre>


==Installazione di MapServer (CGI)==
=Le basi della crittografia=
&Egrave; sufficiente usare il comando:
<pre># apt-get install cgi-mapserver</pre>
per installare il programma CGI MapServer. Se tutto � andato a buon fine, puntando il browser all' url: http://localhost/cgi-bin/mapserver dovremmo vedere la seguente stringa
<pre>No query information to decode. QUERY_STRING is set, but empty.</pre>


==Installare un' applicazione mapserver di esempio==
Il cifrario (o metodo di cifratura) più semplice si basa unicamente sull'algoritmo scelto: si applica al messaggio di partenza una serie di trasformazioni che lo rendono incomprensibile a chi non conosca il sistema utilizzato. Un sistema di questo tipo piuttosto diffuso è il cosiddetto ROT-13, che prevede d'invertire le prime 13 lettere dell'alfabeto con le ultime (scambiando la A con la N, la B con la O e così via); questo sistema viene utilizato nei messaggi pubblici (nei forum e nei gruppi di discussione), per evitare che qualcuno possa leggere informazioni che non vuole conoscere (per esempio, il finale di un film che non ha ancora visto). Si tratta di soluzioni poco sicure e facilmente violabili da un crittoanalista esperto, che basano la propria efficacia unicamente sulla segretezza dell'algoritmo di cifratura. Un notevole passo avanti è costituito dai cosiddetti sistemi a chiave simmetrica, che affiancano a un algoritmo di cifratura un secondo elemento: la chiave. In questo caso, l'algoritmo non dev'essere necessariamente segreto, ma è anzi opportuno che sia il più possibile diffuso e conosciuto: un sistema ampiamente testato e conosciuto fin nel più piccolo dettaglio sarà più stabile e fornirà maggiori garanzie riguardo all'assenza di bug. In questo caso la sicurezza è dunque affidata alla chiave, che dev'essere fornita all'algoritmo insieme al messaggio per cifrarne o decifrarne il contenuto: naturalmente l'algoritmo è costruito in maniera tale da garantire che a ciascuna coppia chiave-messaggio corrisponda sempre lo stesso risultato e che, d'altro canto, da chiavi diverse s'ottenga sempre un risultato diverso in maniera tale che non esistano due chiavi capaci di "aprire" uno stesso messaggio cifrato.
Possiamo installare un' applicazione di esempio per vedere le potenzialit� di MapServer e testarne il buon funzionamento. Scarichiamo il seguente file:
Soluzioni di questo genere sono note fin dall'antichità, come i famosi cifrari utilizzati da Giulio Cesare durante la campagna in Gallia, quello di Vigenere, oppure la famosa macchina Enigma, utilizzata dai tedeschi durante la Seconda Guerra Mondiale, anche se solo con il progresso della teoria dei numeri, della logica e dell'informatica si è arrivati a costruire cifrari la cui solidità è dimostrabile.
<pre># wget http://maps.dnr.state.mn.us/mapserver_demos/workshop.zip</pre>
decomprimiamolo e spostiamolo all' interno della DocumentRoot di Apache ( /var/www )


===Configurazione e permessi===
Dobbiamo configurare l' applicazione ed i permessi su una directory prima di poter procedere.
* creiamo la directory tmp nella DocumentRoot:
<pre># mkdir /var/www/tmp</pre>
* impostiamo i permessi corretti:
<pre># chown -R www-data:www-data /var/www/tmp
# chmod -R ug+rwx /var/www/tmp</pre>
* Ora editiamo il file /var/www/workshop/index.html:
** sostituiamo tutte le occorrenze di "mapserv40" con "mapserv"
** inseriamo i seguenti valori:
<pre><input type="hidden" name="map" value="/var/www/workshop/itasca.map">
      <input type="hidden" name="program" value="/cgi-bin/mapserv">
      <input type="hidden" name="root" value="/workshop">
      <input type="hidden" name="map_web_imagepath" value="/var/www/tmp/">
      <input type="hidden" name="map_web_imageurl" value="/tmp/"></pre>


==Preparare l' installazione di MapScript==
=La Crittografia e l'Informatica=
Assicuriamoci di avere un repository per i pacchetti sorgenti nel nostro sources-list dopodich�:
<pre># apt-get -s build-dep php4 > builddep-php4-packages
# apt-get -s build-dep mapserver > builddep-mapserver-packages
# apt-get build-dep php4
# apt-get build-dep mapserver
# apt-get install fakeroot
# apt-get install dpkg-dev
# apt-get install php4-dev</pre>
Non preoccupiamoci se dobbiamo sovrascrivere alcune dipendenze, facciamo tranquillamente di volta in volta, assecondando APT.


===Compilazione di PHP4===
Il principale limite dei sistemi a chiave simmetrica, indipendentemente dalla bontà del cifrario, è rappresentato dalla chiave, che dev'essere trasmessa attraverso un canale sicuro, per poter garantire la solidità della cifratura: se questo requisito poteva essere accettabile per le comunicazioni militari, chi vuole effettuare un acquisto via Internet non può essere costretto a incontrare personalmente il venditore per scambiare la chiave.
Ora logghiamoci con il nostro utente normale e:
Dagli anni '70 l'informatica e la crittografia sono legate da un intreccio inscindibile, grazie alla teorizzazione e alla realizzazione di cifrari a chiave asimmetrica; sfruttando il fatto che alcuni calcoli matematici, per quanto teoricamente risolvibili, necessitino in realtà di un'enorme quantità di tempo per essere compiuti (addirittura milioni o miliardi di anni), è possibile costruire cifrari che utilizzino una coppia di chiavi, una pubblica destinata alla cifratura e una privata (da mantenere segreta) per la decifratura.
<pre>$ apt-get source php4
Ecco l'esempio classico che chiarisce il funzionamento di questo sistema: Alice e Bob vogliono comunicare tra loro privatamente; entrambi generano una propria coppia di chiavi, una pubblica ed una privata. Si scambiano le rispettive chiavi pubbliche, senza necessità di alcun genere di sicurezza (esistono su Internet numerosi elenchi di chiavi pubbliche, liberamente consultabili). In seguito, Alice utilizzerà la chiave pubblica di Bob per cifrare il messaggio che intende inviargli. Bob, ricevuto il messaggio, lo decifrerà utilizzando la propria chiave privata, avendo la certezza che nessuno, a parte Alice, abbia potuto leggerne il contenuto.
$ cd php4-4.3.10
$ fakeroot dpkg-buildpackage</pre>
Quando il sistema ci avverte che una dipendenza non � risolta:
<pre>dpkg-checkbuilddeps: Unmet build dependencies: libxmltok1-dev</pre>
impartiamo il comando:
<pre># apt-get install libxmltok1-dev</pre>
Questo comando scarica per noi i sorgenti di PHP4 e li compila. In teoria potremmo anche non attendere il completamento dell' operazione, ma non abbiamo fretta. Compilare PHP in questo modo ci permette di ottenere alcuni files relativi ad apache di cui abbiamo bisogno.
Completata la compilazione, sempre dalla directory php4-4.3.10 diamo il comando:
<pre>$ cp apache-build/regex/.libs/*.o regex/</pre>


===Compilazione di Mapserver===
Sempre dalla nostra home impartiamo i comandi:
<pre>$ apt-get source mapserver
$ cd mapserver-4.4.1
$ fakeroot dpkg-buildpackage</pre>
Anche in questo caso il sistema ci informa che manca la dipendenza libwww-dev ( in conflitto con libxmltok1-dev). Usiamo tranquillamente il comando:
<pre># apt-get install libwww-dev</pre>
Ora dobbiamo apportare le modifiche che ci interessano al file di configurazione per il make di MapServer (tutta la trafila fin qui seguita serve proprio ad ottenere un ambiente adatto alla compilazione manuale di questo software!).
Digitiamo:
<pre>$ fgrep ./configure config.log > conf.new</pre>
Ora modifichiamo manualmente conf.new eliminando il "$" iniziale e aggiungendo "--with-php=/usr/include/php4/ --with-php-regex-dir=../php4-4.3.10/regex/" al termine del comando di configurazione.
Ora siamo pronti alla compilazione vera e propria:
<pre>$ . ./conf.new
$ make</pre>
Eliminiamo tutti i simboli di debug dall' eseguibile e copiamolo nella directory delle librerie di PHP:
<pre>$ strip --strip-unneeded mapscript/php3/php_mapscript.so
$ su
# cp mapscript/php3/php_mapscript.so /usr/lib/php4/20020429/</pre>
Ora dovrebbe essere tutto pronto: non ci resta ceh testare il funzionamento del modulo.


==Testare mapscript==
=I tre requisiti necessari=
Creiamo il file map.php all' interno della DocumentRoot di apache e inseriamo al suo interno queste istruzioni:
<pre><?php
dl("php_mapscript.so");
phpinfo();
?></pre>
Ora puntiamo il nostro browser all' indirizzo http://localhost/map.php. dovrebbe comparire qualcosa di simile a [[immagine:mapscript_test.png|thumb|center|Informazioni del modulo MapScript]]


==References==
Per essere completamente funzionante, un sistema crittografico deve garantire il soddisfacimento di tre requisiti: riservatezza, integrità e non ripudiabilità.
* [http://nona.net/article/linux/mapscript_compile/ How to compile MapScript on Debian Sarge]
Del primo argomento abbiamo già parlato, mentre gli altri due fattori intervengono nell'esempio descritto poco più sopra: prima di cifrare il messaggio, Alice potrà utilizzare la propria chiave privata per firmarlo in maniera tale che Bob, una volta ricevuto e decifrato il messaggio, potrà verificare il mittente e l'integrità del contenuto.
* [[LAMP: Linux, Apache, MySQL e PHP]]
Non è invece possibile garantire che ciascuno degli attori di questo esempio sia chi dice di essere: se qualcuno, per esempio, decidesse di impersonare Alice, creando una nuova coppia di chiavi e iniziando la comunicazione con Bob, quest'ultimo non avrebbe la certezza che il suo interlocutore sia realmente chi dice di essere. Da un altro punto di vista, Alice potrebbe disconoscere, o ripudiare, in qualsiasi momento la conversazione, sostenendo di non esserne l'autrice, senza che Bob abbia alcuno strumento per provare il contrario. Per garantire la non ripudiabilità è necessario introdurre un terzo attore, un'autorità di certificazione (anche CA, Certification Authority), che sia affidabile, e che possa dunque garantire l'associazione tra una chiave pubblica e l'effettivo proprietario, con tutti i problemi del caso.




=La steganografia=


----
Per fare in modo che un messaggio non cada in mani sbagliate è possibile utilizzare anche soluzioni diverse rispetto alla cifratura: la steganografia, per esempio.
autore: [[Utente:Keltik|keltik]]
La steganografia consente di nascondere un messaggio all'interno di un vettore che possa consentirne il trasporto senza destare sospetti: esempi in letteratura sono gli inchiostri "simpatici", che si rivelano soltanto in determinate circostanze, mentre rimanendo in ambito informatico esistono soluzioni diverse.
[[Categoria:Networking]]
Se per alcuni tipi di file le informazioni contenute non possono essere modificati in alcun modo, esistono altri formati in cui un lieve cambiamento passa del tutto inosservato: esempi tipici sono immagini e file audio, in cui una leggera differenza nella forma dell'onda sonora, oppure del colore in alcuni punti, non viene percepita dall'orecchio o dall'occhio umano. Sfruttando questo principio è dunque possibile modificare i file, inserendo informazioni nascoste all'interno di vettori assolutamente insospettabili; crittografando poi i dati si riesce ad ottenere un livello di confidenzialità accettabile. Anche questo sistema ha però qualche limite: la quantità di informazioni inseribili è piuttosto piccola e basta anche una minima modifica al file contenitore, effettuata magari inconsapevolmente, per compromettere l'integrità del messaggio.
 
 
=Link utili=
[http://www.gnupg.org GnuPG]
 
[http://www.nsa.gov National Security Agency (NSA)]
 
[http://www.verisign.com Verisign]
[[Categoria:Sicurezza]]

Versione delle 08:01, 26 mag 2006

Introduzione

L'esigenza di garantire che un messaggio possa arrivare inalterato e non violato esiste probabilmente da quando l'uomo ha iniziato a comunicare; la storia è piena d'episodi e racconti che hanno per argomento messaggi e codici segreti, oppure i tentativi fatti per riuscire a decodificarli. Nel passato le esigenze di segretezza riguardavano prevalentemente la sfera politica e militare, senza arrivare a interessare, se non in minima parte, i cittadini comuni; con l'espansione sempre più forte delle comunicazioni a distanza l'esigenza di garantire l'invio di dati sensibili (pensiamo, per esempio, ai pagamenti effettuati tramite carta di credito) e, più in generale, la privacy dei dati e delle comunicazioni interpersonali, ha posto in grande evidenza i temi della crittografia e della steganografia dei dati, che studiano rispettivamente come codificare un messaggio per renderlo incomprensibile e come nasconderlo per renderlo inintelligibile. Non bisogna pensare che la necessità di mantenere la riservatezza delle comunicazioni riguardi unicamente chi ha "qualcosa da nascondere": la scarsa sicurezza intrinseca della maggior parte dei sistemi di comunicazione a distanza non può garantire quel diritto alla privacy che è ormai sancito dalla legislazione di tutti i Paesi.


Le basi della crittografia

Il cifrario (o metodo di cifratura) più semplice si basa unicamente sull'algoritmo scelto: si applica al messaggio di partenza una serie di trasformazioni che lo rendono incomprensibile a chi non conosca il sistema utilizzato. Un sistema di questo tipo piuttosto diffuso è il cosiddetto ROT-13, che prevede d'invertire le prime 13 lettere dell'alfabeto con le ultime (scambiando la A con la N, la B con la O e così via); questo sistema viene utilizato nei messaggi pubblici (nei forum e nei gruppi di discussione), per evitare che qualcuno possa leggere informazioni che non vuole conoscere (per esempio, il finale di un film che non ha ancora visto). Si tratta di soluzioni poco sicure e facilmente violabili da un crittoanalista esperto, che basano la propria efficacia unicamente sulla segretezza dell'algoritmo di cifratura. Un notevole passo avanti è costituito dai cosiddetti sistemi a chiave simmetrica, che affiancano a un algoritmo di cifratura un secondo elemento: la chiave. In questo caso, l'algoritmo non dev'essere necessariamente segreto, ma è anzi opportuno che sia il più possibile diffuso e conosciuto: un sistema ampiamente testato e conosciuto fin nel più piccolo dettaglio sarà più stabile e fornirà maggiori garanzie riguardo all'assenza di bug. In questo caso la sicurezza è dunque affidata alla chiave, che dev'essere fornita all'algoritmo insieme al messaggio per cifrarne o decifrarne il contenuto: naturalmente l'algoritmo è costruito in maniera tale da garantire che a ciascuna coppia chiave-messaggio corrisponda sempre lo stesso risultato e che, d'altro canto, da chiavi diverse s'ottenga sempre un risultato diverso in maniera tale che non esistano due chiavi capaci di "aprire" uno stesso messaggio cifrato. Soluzioni di questo genere sono note fin dall'antichità, come i famosi cifrari utilizzati da Giulio Cesare durante la campagna in Gallia, quello di Vigenere, oppure la famosa macchina Enigma, utilizzata dai tedeschi durante la Seconda Guerra Mondiale, anche se solo con il progresso della teoria dei numeri, della logica e dell'informatica si è arrivati a costruire cifrari la cui solidità è dimostrabile.


La Crittografia e l'Informatica

Il principale limite dei sistemi a chiave simmetrica, indipendentemente dalla bontà del cifrario, è rappresentato dalla chiave, che dev'essere trasmessa attraverso un canale sicuro, per poter garantire la solidità della cifratura: se questo requisito poteva essere accettabile per le comunicazioni militari, chi vuole effettuare un acquisto via Internet non può essere costretto a incontrare personalmente il venditore per scambiare la chiave. Dagli anni '70 l'informatica e la crittografia sono legate da un intreccio inscindibile, grazie alla teorizzazione e alla realizzazione di cifrari a chiave asimmetrica; sfruttando il fatto che alcuni calcoli matematici, per quanto teoricamente risolvibili, necessitino in realtà di un'enorme quantità di tempo per essere compiuti (addirittura milioni o miliardi di anni), è possibile costruire cifrari che utilizzino una coppia di chiavi, una pubblica destinata alla cifratura e una privata (da mantenere segreta) per la decifratura. Ecco l'esempio classico che chiarisce il funzionamento di questo sistema: Alice e Bob vogliono comunicare tra loro privatamente; entrambi generano una propria coppia di chiavi, una pubblica ed una privata. Si scambiano le rispettive chiavi pubbliche, senza necessità di alcun genere di sicurezza (esistono su Internet numerosi elenchi di chiavi pubbliche, liberamente consultabili). In seguito, Alice utilizzerà la chiave pubblica di Bob per cifrare il messaggio che intende inviargli. Bob, ricevuto il messaggio, lo decifrerà utilizzando la propria chiave privata, avendo la certezza che nessuno, a parte Alice, abbia potuto leggerne il contenuto.


I tre requisiti necessari

Per essere completamente funzionante, un sistema crittografico deve garantire il soddisfacimento di tre requisiti: riservatezza, integrità e non ripudiabilità. Del primo argomento abbiamo già parlato, mentre gli altri due fattori intervengono nell'esempio descritto poco più sopra: prima di cifrare il messaggio, Alice potrà utilizzare la propria chiave privata per firmarlo in maniera tale che Bob, una volta ricevuto e decifrato il messaggio, potrà verificare il mittente e l'integrità del contenuto. Non è invece possibile garantire che ciascuno degli attori di questo esempio sia chi dice di essere: se qualcuno, per esempio, decidesse di impersonare Alice, creando una nuova coppia di chiavi e iniziando la comunicazione con Bob, quest'ultimo non avrebbe la certezza che il suo interlocutore sia realmente chi dice di essere. Da un altro punto di vista, Alice potrebbe disconoscere, o ripudiare, in qualsiasi momento la conversazione, sostenendo di non esserne l'autrice, senza che Bob abbia alcuno strumento per provare il contrario. Per garantire la non ripudiabilità è necessario introdurre un terzo attore, un'autorità di certificazione (anche CA, Certification Authority), che sia affidabile, e che possa dunque garantire l'associazione tra una chiave pubblica e l'effettivo proprietario, con tutti i problemi del caso.


La steganografia

Per fare in modo che un messaggio non cada in mani sbagliate è possibile utilizzare anche soluzioni diverse rispetto alla cifratura: la steganografia, per esempio. La steganografia consente di nascondere un messaggio all'interno di un vettore che possa consentirne il trasporto senza destare sospetti: esempi in letteratura sono gli inchiostri "simpatici", che si rivelano soltanto in determinate circostanze, mentre rimanendo in ambito informatico esistono soluzioni diverse. Se per alcuni tipi di file le informazioni contenute non possono essere modificati in alcun modo, esistono altri formati in cui un lieve cambiamento passa del tutto inosservato: esempi tipici sono immagini e file audio, in cui una leggera differenza nella forma dell'onda sonora, oppure del colore in alcuni punti, non viene percepita dall'orecchio o dall'occhio umano. Sfruttando questo principio è dunque possibile modificare i file, inserendo informazioni nascoste all'interno di vettori assolutamente insospettabili; crittografando poi i dati si riesce ad ottenere un livello di confidenzialità accettabile. Anche questo sistema ha però qualche limite: la quantità di informazioni inseribili è piuttosto piccola e basta anche una minima modifica al file contenitore, effettuata magari inconsapevolmente, per compromettere l'integrità del messaggio.


Link utili

GnuPG

National Security Agency (NSA)

Verisign