Lo strato applicativo di Internet

Utilizzo dei Meccanismi di Sicurezza

 In questa sezione svolgiamo alcune esperienze di applicazione degli aspetti di sicurezza alle telecomunicazioni Internet

SSH

Fin dagli albori di Internet, si è potuti entrare su di un altro computer, usando il comando Telnet per collegare standard input ed ouput locali, ad una sessione terminale remota. Questa modalità operativa soffre però di alcune ingenuità legate al fatto che ai tempi in cui Telnet fu definito, Internet era confinata al mondo accademico e della ricerca, per cui

A partire dal 1995, si è lavorato ad un diverso metodo di connessione remota, crittograficamente sicuro, ed il risultato, noto come Secure SHell, è stato formalizzato in una serie di documenti emessi dal gruppo di lavoro SECSH di IETF, brevissimamente riassunti qui. L'implementazione più diffusa sui sistemi Unix, è quella offerta dal progetto OpenSSH, e prevede l'esecuzione di un applicativo server (sshd) in ascolto in TCP sulla porta ben nota 22, e di un programma client (ssh), da invocare da parte di chi vuol connettersi. Per funzionare, non pretende l'esistenza di una PKI, ma si basa sulla autenticazione a chiave pubblica delle due parti in comunicazione, e sulla generazione estemporanea di chiavi simmetriche di sessione.

Autenticazione del server

Questo aspetto è per così dire simmetrico a quello della autenticazione del client: se infatti il client fornisse le sue credenziali, anziché al server a cui si rivolge, ad un man in the middle impostore, oltre a non riceverere il servizio richiesto, il client avrebbe anche svelato la sua identità, e la sua password. Per questo, occorre stabilire un modo per permettere al server di dimostrare la sua identità.

Quando ci si collega in ssh ad un computer remoto per la prima volta, ci viene chiesto se accettare o meno la chiave pubblica del server, identificata da una fingerprint. In linea di principio, si dovrebbe contattare in modo sicuro (ad es, per telefono) l'amministratore del server e chiedergli di leggere la fingerprint della sua chiave pubblica, in modo da verificarne l'uguaglianza.

alef@alef-laptop:~$ ssh 151.100.122.171
The authenticity of host '151.100.122.171 (151.100.122.171)' can't be established.
RSA key fingerprint is 5a:f9:f2:33:68:d7:6f:45:ec:b4:35:d0:cf:00:e3:b9.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '151.100.122.171' (RSA) to the list of known hosts.
alef@151.100.122.171's password: *******
[alef@labtel alef]$

Nel caso in cui si decida di fidarci della chiave pubblica, questa viene memorizzata, assieme al nome del computer, nel file ~/.ssh/known_hosts.

Le volte successive che ci collegheremo, se il server continua a fornire la stessa chiave pubblica, e che ora corrisponde alla versione memorizzata dal lato client, non ci verrà più chiesto se accettare o meno l'autenticità della parte remota. Viceversa, se la chiave pubblica del server fosse cambiata, ci verrà impedito di collegarci, nel dubbio che qualcun altro stia impersonando il server remoto. Se siamo sicuri che il server sia proprio lui, e che la nuova chiave è anch'essa autentica, allora la cosa più semplice e rapida da fare per poter entrare, sarà quella di cancellare il file ~/.ssh/known_hosts.

Il proprio server ssh

Non è installato di default con Ubuntu-desktop, ed occorre prelevarlo impartendo sudo apt-get install openssh-server; dopo la generazione delle chiavi RSA e DSA, si metterà subito in funzione. Un comando che consente di conoscere la fingerprint della propria chiave pubblica RSA (che dal lato server è memorizzata nel file ssh_host_rsa_key.pub presente nella directory /etc/ssh), in modo da poterla confrontare con quella dichiarata (al lato client) al momento del collegamento, è

ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub

che, dopo aver indicato la lunghezza in bit della chiave, ne calcola appunto la fingerprint. D'altra parte, un metodo sicuramente meno macchinoso, è quello di provare a connettersi direttamente al proprio server!

Confidenzialità

Come risulta da questo file di cattura, prima ancora che venga svolto il dialogo relativo alla chiave del server, il protocollo ha già provveduto ad instaurare una connessione sicura, mediante uno scambio di Diffie-Hellman. Osserviamo che il ritardo di 8 secondi che intercorre tra il pacchetto 17 ed il pacchetto 18, corrisponde al tempo impiegato per rispondere alla domanda se continuare la connessione o meno. Quindi, tutto quel che segue risulta protetto da una chiave di sessione simmetrica.

Autenticazione del client

Avendo conseguito la confidenzialità della comunicazione, la trasmissione della password dell'utente verso il sistema remoto viene effettuata in forma crittografata dallo strato di sicurezza di SSH. Alternativamente, la richiesta della password può essere evitata, qualora la chiave pubblica del client venga memorizzata presso il server, in modo che quest'ultimo possa verificare autonomamente l'identità del client.

Passiamo nel tunnel

In effetti, lo scopo di ssh non si limita al solo accesso ad una shell remota, ed una delle sue caratteristiche più interessanti consiste nella possibilità di realizzare dei tunnel sicuri tra computer, ridirezionando servizi basati su socket, da uno all'altro. Ad esempio, se un programma server sshd è in ascolto sulla porta 22 del computer hostB, e presso hostA si impartisce il comando

ssh hostB -L pA:hostB:pB

allora viene creato un tunnel ssh dal computer hostA verso hostB, che resta in ascolto (-L) su pA di hostA, mettendola in comunicazione con pB di hostB, in modo che connettendosi a pA di hostA ci si ritrova a dialogare con un servizio in ascolto su pB di hostB, avendo crittografato il traffico tra i due, e raggiungendo effettivamente hostB sulla porta 22 su cui ascolta sshd, che provvede a sua volta a connettersi (localmente) a pB di hostB. In questo modo, è possibile ad esempio scavalcare eventuali limitazioni imposte da firewall intermedi.

Grafica remota

Una opzione molto simpatica di ssh, è quella (opzione -Y) che consente di visualizzare sul proprio computer la finestra di esecuzione di una applicazione grafica (ad es. nautilus) lanciata sul computer su cui ci si è collegati. Inoltre, si può specificare (opzione -l) di presentarsi sul computer remoto con una UserID differente da quella impersonata sul proprio computer. Queste due opzioni, combinate assieme, producono il comando generico

ssh -Y -l utente_remoto computer_remoto

che ci permette appunto di eseguire programmi presso computerremoto, con l'identità di utenteremoto, e di visualizzare la relativa finestra sul nostro schermo. La cosa ancora più divertente, è che in questo caso funziona anche il copia e incolla tra le finestre del computer remoto, e quelle del computer locale, dato che entrambe sono visualizzate dallo stesso desktop.

TLS

Come illustrato a lezione, il TLS è uno strato frapposto tra l'applicazione ed il TCP, che permette di autenticare l'altra parte mediante certificati X.509 e relativa fingerprint, e di negoziare dinamicamente una chiave di sessione a crittografia simmetrica, in modo da garantire la confidenzialità della comunicazione. Riprendendo l'esempio svolto in merito alla attivazione del TLS nel contesto di una connessione IMAP, proviamo ad analizzare più in dettaglio il risultato del capture ottenuto.

Osserviamo che dopo che nei pacchetti 9-10 il client ed il server IMAP si sono accordati per utilizzare il TLS, il capture non è più in grado di decodificare correttamente quanto accade. E' però possibile istruire Wireshark affinché tenti di interpretare i pacchetti come la fase iniziale di una comunicazione TLS. Per ottenere questo, occorre posizionarsi con il mouse su di un pacchetto TLS, cliccare con il tasto destro, e scegliere l'opzione decode as; quindi, specificare che le due porte utilizzate agli estremi della comunicazione (in questo caso, la 143 che è la porta ben nota di IMAP, e 45238, che è una porta effimera) identificano pacchetti SSL (il predecessore del TLS).

A questo punto, l'aspetto del capture cambia completamente, e si possono apprezzare i passaggi previsti dall'handshake protocol. Inoltre, possiamo notare ad esempio come, nel pacchetto TCP 12, trovano posto 4 diverse PDU del TLS.

No.     Time        Source                Destination           Protocol Info
No.  11 0.015362    192.168.0.213         192.168.0.152         SSLv2    Client Hello
    SSLv2 Record Layer: Client Hello
No.  12 0.031612    192.168.0.152         192.168.0.213         TLSv1    Server Hello, Certificate, Server Key Exchange, Server Hello Done
    TLSv1 Record Layer: Handshake Protocol: Server Hello
    TLSv1 Record Layer: Handshake Protocol: Certificate
    TLSv1 Record Layer: Handshake Protocol: Server Key Exchange
    TLSv1 Record Layer: Handshake Protocol: Server Hello Done
No.  14 4.695011    192.168.0.213         192.168.0.152         TLSv1    Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message
    TLSv1 Record Layer: Handshake Protocol: Client Key Exchange
    TLSv1 Record Layer: Change Cipher Spec Protocol: Change Cipher Spec
    TLSv1 Record Layer: Handshake Protocol: Encrypted Handshake Message
No.  15 4.728238    192.168.0.152         192.168.0.213         TLSv1    Change Cipher Spec, Encrypted Handshake Message
    TLSv1 Record Layer: Change Cipher Spec Protocol: Change Cipher Spec
    TLSv1 Record Layer: Handshake Protocol: Encrypted Handshake Message

Ulteriori dettagli possono essere apprezzati, espandendo ulteriormente i contenuti delle PDU TLS.

Openssl

Si tratta di un toolkit OpenSource, cresciuto sulle fondamenta gettate da un altro, che oltre ad implementare gli strati di sicurezza SSL e TLS, offre una potente libreria crittografica che implementa praticamente tutti gli algoritmi di cui si può aver bisogno, e che viene usata da un gran numero di applicazioni crittografiche. Inoltre, è disponibile il comando openssl, che permette l'esecuzione di quasi tutte le operazioni crittografiche a partire da una finestra terminale. Un progetto del tutto analogo, ma sviluppato in accordo ad una licenza più liberale, è GnuTLS.

Dato che il comando openssl, per la ricchezza delle sue possibilità, può richiedere un pò troppa pazienza prima di individuare cosa occorre fare per svolgere delle operazioni ben precise, alcune sue funzionalità posso essere accedute per mezzo di interfacce grafiche e web. In particolare, le operazioni relative alla gestione di una Certification Authority, posso essere svolte per mezzo dello script perl CA.pl, come descritto in questo HowTo, ripreso appresso.

Creazione di una Certification Autority

Lo script CA.pl non si trova nel path, e quindi per generare la nostra CA, eseguiamo

labint@alef:~$ /usr/lib/ssl/misc/CA.pl -newca
CA certificate filename (or enter to create)

Making CA certificate ...
Generating a 1024 bit RSA private key
..........++++++
...++++++
writing new private key to './demoCA/private/cakey.pem'
Enter PEM pass phrase: <non la dico a nessuno>
Verifying - Enter PEM pass phrase: <non la dico a nessuno>
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:IT
State or Province Name (full name) [Some-State]:Lazio
Locality Name (eg, city) []:Latina
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Universita Sapienza
Organizational Unit Name (eg, section) []:Laboratorio Internet
Common Name (eg, YOUR name) []:labintCA
Email Address []:alef@infocom.uniroma1.it

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/cakey.pem: <non la dico a nessuno>
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number:
            b7:43:24:f0:9e:f4:b4:53
        Validity
            Not Before: Feb  1 12:56:54 2008 GMT
            Not After : Jan 31 12:56:54 2011 GMT
        Subject:
            countryName               = IT
            stateOrProvinceName       = Lazio
            organizationName          = Universita Sapienza
            organizationalUnitName    = Laboratorio Internet
            commonName                = labintCA
            emailAddress              = alef@infocom.uniroma1.it
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                D9:B5:FA:BE:7B:10:D7:D9:93:8F:B8:13:7D:E6:82:2E:F8:89:3C:A4
            X509v3 Authority Key Identifier:
                keyid:D9:B5:FA:BE:7B:10:D7:D9:93:8F:B8:13:7D:E6:82:2E:F8:89:3C:A4
                DirName:/C=IT/ST=Lazio/O=Universita Sapienza/OU=Laboratorio Internet
                        /CN=labintCA/emailAddress=alef@infocom.uniroma1.it
                serial:B7:43:24:F0:9E:F4:B4:53
            X509v3 Basic Constraints:
                CA:TRUE
Certificate is to be certified until Jan 31 12:56:54 2011 GMT (1095 days)

Write out database with 1 new entries
Data Base Updated

e possiamo verificare ora l'esistenza di una directory demoCA nella nostra home, con il frutto del nostro lavoro. Possiamo già ora, provare ad utilizzare questo certificato auto-firmato per Dovecot, al posto di quello di snakeoil.

Impostazione di Dovecot all'uso del nuovo certificato

Per questo, copiamo il certificato e la chiave privata nella directory che viene letta da Dovecot, con

sudo cp demoCA/cacert.pem /etc/ssl/certs/labintcert.pem
sudo cp demoCA/private/cakey.pem /etc/ssl/private/labintkey.pem

e modifichiamo /etc/dovecot/dovecot.conf in modo che utilizzi i nuovi files

ssl_cert_file = /etc/ssl/certs/labintcert.pem
ssl_key_file = /etc/ssl/private/labintkey.pem
ssl_key_password = <non la dico a nessuno>

Se ora ci ri-colleghiamo con Evolution, vediamo comparire il nuovo certificato. Se controlliamo il file di log, troviamo

~$ tail -f  /var/log/mail.log
Feb  1 00:51:56 alef dovecot: Dovecot v1.0.5 starting up
Feb  1 01:02:02 alef dovecot: imap-login: Login: user=<labint>, method=PLAIN, rip=192.168.0.213, lip=192.168.0.152, TLS

Richiesta di un nuovo certificato firmato

Ora, passiamo a compilare una Richiesta di Certificato di Utente, con il comando /usr/lib/ssl/misc/CA.pl -newreq. Essendo un certificato individuale, ognuno potrà inserire i propri dati, ottenendo come risultato, due files:

labint@alef:~$ /usr/lib/ssl/misc/CA.pl -newreq
Generating a 1024 bit RSA private key
...++++++
...
... etc etc etc...
...
Request is in newreq.pem, private key is in newkey.pem

che risiedono entrambi nella nostra home directory.

Firma del certificato

Possiamo scegliere di far emettere il certificato per il quale abbiamo generato la richiesta, alla nostra stessa CA, oppure di farlo firmare da una stessa CA centralizzata, che firmerà anche quelli dei nostri colleghi, e che provvederà a distribuire la propria chiave pubblica in modo fidato. Ad ogni modo, il comando per firmare una richiesta di certificato da parte di una CA, è

~$ /usr/lib/ssl/misc/CA.pl -sign                  # usa come input, il file newreq.pem nella dir corrente
Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/cakey.pem: <la passphrase usata alla creazione della CA>
Check that the request matches the signature
Signature ok
Certificate Details:
...
... etc etc etc...
...
Certificate is to be certified until Jan 31 00:13:43 2009 GMT (365 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Signed certificate is in newcert.pem

Come affermato, il certificato si trova in ~/newcert.pem, dove troviamo anche la sua corrispettiva chiave privata newkey.pem (se abbiamo usato la nostra stessa CA). Inoltre, il nuovo certificato si trova anche nella directory ~/demoCA/newcerts, dove è conservato assieme agli altri che verranno emessi, ed a quello emesso per la CA stessa; i certificati sono contrassegnati da un numero seriale crescente, e che corrisponde a quello presente all'interno del certificato stesso. La chiave privata invece, si trova ancora in ~/newkey.pem, dove è stata generata dal comando precedente.

Interfacce grafiche

Anziché eseguire dei comandi da terminale, le operazioni associate ad una CA possono esere svolte utilizzando degli strumenti grafici, come ad esempio quelli di TinyCA, e gnoMint (in effetti, sebbene nel seguito si faccia rierimento al primo, il secondo è più aggiornato). Inoltre, le operazioni di richiesta e di ritiro di un nuovo certificato, possono anche essere svolte interagendo con una CA remota, come nel caso dell'utilizzo di una interfaccia web, ad esempio quella offerta da PyCA e OpenCA.

Gestione ed utilizzo dei certificati con TinyCA

Allo scopo di semplificare il procedimento rispetto a quello necessario utilizzando OpenSSL, installiamo TinyCA mediante il comando

sudo apt-get install tinyca

e lanciamolo invocando tinyca2. A questo punto, mediante l'interfacia grafica, è semplice

La nostra piccola PEC

La Posta elettronica certificata si propone come forma di comunicazione autenticata nei confronti della pubblica amministrazione, ed al dilà delle particolarità politico-giuridiche, si basa (anche) sulla definizione di una PKI in grado di emettere certificati digitali X.509 da usare nel quadro delle normative S/MIME. Il risultato ufficiale di questa armonizzazione è stato quindi documentato nella pubblicazione della RFC 6109. Dal canto nostro, ci interessa mostrare come procedere per utilizzare le estensioni di sicurezza disponibili su client email come Evolution o Thunderbird in accordo ad S/MIME, mentre più avanti discutiamo della adozione di PGP.

Innanzitutto creiamo una richiesta di certificato (CSR - Certificate Signing Request), ed implicitamente una coppia di chiavi, usando direttamente le opzioni permesse da Openssl:

openssl req -out nome.csr -pubkey -new -keyout nome.key

che ci porrà alcune domande, a cui possiamo rispondere come già indicato in precedenza, usando il proprio nome vero e l'indirizzo email labint@nome.labint valido nell'ambito del laboratorio. Come risultato, troviamo due files nella stessa directory da cui abbiamo eseguito il comando, nome.csr con la richiesta di firma, e nome.key con la propria chiave privata (crittografata con la passphrase).

La firma del certificato deve ora essere apposta da una unica CA comune a tutti, in esecuzione presso ns.labint. Trasferiamo quindi li le nostre richieste, per mezzo del supporto che Nautilus offre ad SSH, inserendo nella barra degli indirizzi la URI ssh://labint@ns.labint: dopo aver inserito la password dell'utente labint, possiamo navigare nel filesystem del computer remoto, recarci nella directory /home/labint/pec/reqs, e copiare (trascinandolo da una diversa finestra di Nautilus) il file con la propria richiesta, nella cartella remota. A questo punto attendiamo che qualcuno su ns.labint esegua (ad es.) Gnomint, e firmi tutte le richieste pervenute, usando la chiave pubblica di una CA (labintCA) definita per l'occasione.

Il certificato firmato può quindi essere ritirato presso la directory /home/labint/pec/cert di ns.labint, copiando (trascinando) il file nome.pem presso il proprio computer. Già che ci siamo, copiamo sul proprio computer anche il certificato auto-firmato della CA, che si trova nel file labintCA.pem presente sempre nella stessa directory, e che useremo in seguito. Prima di poter fornire il nostro certificato nome.pem al nostro Mail User Agent, occorre ri-associarvi la propria chiave privata, e rappresentare il tutto nel formato pkcs12: più semplice a farsi che a dirsi, impartendo il comando

openssl pkcs12 -export -inkey nome.key -in nome.pem -out nome.pkcs12

Evolution

Volendo utilizzare questo MUA, possiamo ora discendere nella colonna sinistra delle preferenze di Evolution, fino a certificati, e nella linguetta di quelli personali, richiedere l'importazione del file nome.pkcs12 prodotto al passo precedente. Vengono chieste due password: la prima è quella del portafoglio dei certificati, e se è la prima volta che viene chiesta, sarà bene fare attenzione a ricordarsela; la seconda è la passphrase che abbiamo messo a protezione della propria chiave privata, e che (la passphrase) verrà consevata crittografata mediante la password generale del portafoglio.

Da questo momento in poi possiamo firmare (con la nostra chiave pubblica) i messaggi che inviamo, ed allegarvi il proprio certificato in modo che chi riceve vi possa leggere la nostra chiave pubblica, ed usarla per verificare la nostra firma digitale. Si, ma... perché l'autenticazione sia valida, occorre accertarsi che il certificato sia valido, ossia verificare la firma apposta dalla CA, e quindi... occorre tornare ancora nella finestra delle preferenze di Evolution, accedere allo schermo Certificati/Autorità, ed importare il certificato della CA labintCA.pem prelevato in precedenza. A questo punto compare una nuova finestra che chi chiede per quali compiti consideriamo idonea questa CA: possiamo tranquillamente reputarla idonea per tutto!

Prima di poter inviare messaggi firmati, occorre impostare le preferenze di Evolution per quanto riguarda la nostra identità labint@nome.labint, cliccando sulla linguetta "sicurezza", e selezionare così quale certificato usare sia per la firma, che per la crittazione. Ne abbiamo solo uno, la scelta non è difficile! Finalmente, possiamo inviare una email firmata: è sufficiente selezionare la casella firma S/MIME disponibile dal menù Opzioni della finestra di composizione della email. Notiamo che non ci viene chiesta la passphrase necessaria a decifrare la nostra chiave privata, perché questa stessa passphrase è stata salvata in forma crittografata con la password generale del portafoglio, che ci è stata già chiesta una volta; ad una nuova apertura di Evolution, l'atto di invio di una email firmata determina quindi la richiesta della password del portafoglio.

Infine, notiamo che non ci è possibile inviare una email crittografata verso un soggetto dal quale non abbiamo ancora ricevuto nessun messaggio firmato: solo in questo caso infatti veniamo in possesso del suo certificato (da cui possiamo leggere la chiave pubblica necessaria ad attuare la riservatezza), che ritroviamo poi elencato nella scheda di Evolution Preferenze/Certificati/Contatti.

Thunderbird

Con questo User Agent la gestione dei certificati è attuata mediante l'opzione Modifica/Preferenze, quindi scegliendo nella nuova finestra la categoria Avanzate, di lì la linguetta Certificati, e quindi Mostra Certificati, che determina l'apertura di una nuova finestra. A questo punto, aprendo la linguetta Certificati personali possiamo importare il nostro certificato firmato, mentre sotto la linguetta Persone possiamo importare quelli dei nostri corrispondenti; infine, la linguetta Autorità elenca i certificati della CA preinstallati in Thunderbird, a cui possiamo aggiungere quello che certifica la nostra piccola PEC.

Per inviare una email firmata, dopo aver aperto la finestra di composizione, scegliamo Opzioni/Apponi firma digitale, che ci chiede di indicare il certificato da usare, aprendo la finestra di Impostazione account relativa al mittente che intendiamo usare. Qui possiamo specificare il certificato recentemente importato, che verrà accettato solo se rilasciato allo stesso indirizzo email.

Virtual Private Network - VPN

Come abbiamo visto, i servizi di crittografia IPSEC che operano allo strato di rete possono essere utilizzati per realizzare una VPN. Una guida alla configurazione della VPN per un sistema Ubuntu è fornita presso il sito della documentazione prodotta dagli utenti.

Gnu Privacy Guard

La GNU Privacy Guard (o GPG) è una implementazione Open dello standard OpenPGP descritto nella RFC 4880, e che offre servizi di crittografia per la trasmissione sicura delle email, in grado di ottemperare ai requisiti 5), 6) e 7) elencati nella lista descritta precedentemente. Di base GPG offre uno strumento usabile da linea di comando, ma presso il sito di GPG sono documentate le estensioni disponibili, sia per la sua gestione grafica che per l'integrazione con altre applicazioni, come i client email.

Interfaccia testuale

Il comando da inserire da tastiera per eseguire tutte le operazioni possibili per OpenPGP è gpg, ed anche se la relativa pagina di manuale descrive una quantità di opzioni possibili, le operazioni più comuni (gestione del portachiavi, firma digitale, cifratura) sono molto ben descritte dalla documentazione.

Seahorse

Questa è probabilmente la migliore interfaccia grafica di GPG, che permette in modo molto semplice di

Possiamo quindi iniziare con il generare un nuova coppia di chiavi PGP, da associare al nostro nome e cognome, ed alla nostra email. L'email indicata dovrà essere esattamente quella che useremo poi nel seguito, idonea anche alla ricezione; scegliamo allora quella nella forma labint@nome.labint, che funziona all'interno del laboratorio: altre email, associate ad altre chiavi, potranno essere definite in un secondo momento. Ci viene quindi chiesto di inserire una passphrase, con la quale verrà crittografata la nostra chiave privata, e che ci sarà chiesta di nuovo, ogni volta che quest'ultima dovrà essere usata - a meno di non scegliere che venga memorizzata per la durata della sessione.

Le chiavi così generate si ritrovano ora tra le chiavi personali, e mediante il tasto destro del mouse possiamo investigarne le proprietà, ed esportare la parte pubblica in un file, che potremo inviare in allegato. Infatti, aprendo ora Evolution, ed scegliendo l'account che usa il nostro stesso computer come SMTP ed IMAP, scriviamo delle email ai nostri colleghi, e prima di spedirle, stabiliamo di firmarle, (dalla voce Sicurezza/firma PGP), ed alleghiamo il file in cui abbiamo salvato la chiave pubblica. Alla ricezione di queste email, notiamo in basso la dicitura La firma esiste, ma è necessaria la chiave pubblica. Clicchiamo allora (con il tasto destro) sull'allegato contenente la chiave pubblica, scegliamo Apri in importa chiave, e... la chiave appare, come per magia, in Seahorse, tra le chiavi collezionate. Alternativamente, salviamo su file l'allegato con chiave pubblica, ed importiamolo in Seahorse. A questo punto, se siamo certi della identità del mittente, non ci resta che attribuirgli fiducia (tasto desto, Proprietà, Fiducia), e quindi firmare la chiave, indicando il nostro grado di certezza sulla identità, ed inserendo la passphrase per poter apporre la firma. Potremo quindi verificare che ora il messaggio ricevuto appare come correttamente firmato.

Dopo aver ricevuto le chiavi pubbliche dei nostri colleghi, potremo iniziare a crittografare i messaggi indirizzati loro, utilizzando la chiave pubblica del destinatario. Proviamo quindi ad inoltrare come allegato verso una terza persona una email crittografata che era originariamente diretta a noi, e verifichiamo come il nuovo destinatario non sia assolutamente in grado di leggere il messaggio.

Per verificare il risultato delle nostre operazioni, possiamo usare la combinazione di tasti control-U per visionare il sorgente della email firmata e/o crittografata, osservando come, nel caso di una email firmata, sia presente l'intestazione

Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="=-/uPEKZ6Vb6K2qdfequMJ"

e poi, nella parte che contiene la firma, questa sia identificata come

Content-Disposition: attachment; filename=pippo.asc
Content-Type: application/pgp-keys; name=pippo.asc
Content-Transfer-Encoding: base64

mentre invece, un messaggio crittografato è identificato da una serie di direttive del tipo

Date: Tue, 05 Feb 2008 23:30:13 +0100
Message-Id: <1202250613.7965.0.camel@alef-laptop>
Mime-Version: 1.0
Content-Type: multipart/encrypted; protocol="application/pgp-encrypted"; boundary="=-P4aCM6gPf7ob7XiDhP3P"

--=-P4aCM6gPf7ob7XiDhP3P
Content-Type: application/pgp-encrypted
Content-Transfer-Encoding: 7bit

Version: 1

--=-P4aCM6gPf7ob7XiDhP3P
Content-Type: application/octet-stream; name=encrypted.asc
Content-Description: Questa =?ISO-8859-1?Q?=E8?= una parte del messaggio
        cifrata digitalmente
Content-Transfer-Encoding: 7bit

-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.4.6 (GNU/Linux)

hQIOA4XIA4bLol0LEAf+KfcJ1BnmzHZAjWPtU6hfKTyPVHeQXCG2ZeCfaZtV1vZN
7sr9YajLqbBUke73FO/OmaMUrj+trkZ2xN7BpY7hk11Ew5+O+gEvu4Z9H63KhIRD
OD7twpkd7qzwBqUOq6ErivEFDTvhhl7Nct9I.....
.
.

Infine, osserviamo come dal file manager Nautils, cliccando con il tasto destro sopra di un file, ora viene anche offerta la possibilità di cifrare e/o firmare un file.

Keyserver

Ogni volta che sulla nostra chiave pubblica viene apposta una nuova firma, può essere utile distribure la nuova versione mediante un keyserver. Qui di seguito indichiamo alcune risorse relativa alla questione

x
Logo

Lo Strato Applicativo
di Internet

Dal TCP al VoIP, dal DNS all'Email alla crittografia, tutto ciò che accade dietro le quinte di Internet, completo di cattura del traffico.
Scopri come effettuare il download, ricevere gli aggiornamenti, e contribuire!


Realizzato con Document made with Kompozer da Alessandro Falaschi -
Capitolo: HTML e CSS