home

Sicurezza in Internet

not for sale

Si chiama server sicuro un server che usa dei certificati digitali. Cos'è un certificato digitale, come si ottiene e come si usa: qui rispondiamo a questi quesiti in modo breve.

C'è da premettere un fatto tecnico di base, che sta alla base di tutto il discorso: la possibilità di crittografare, ossia scrivere in modo che solo chi ha la chiave possa comprendere. Una chiave non è altro che una sequenza di byte, solitamente viene interpretata come un numero molto grande. A seconda del cifrario che si usa, può essere richiesto che la chiave abbia diverse proprietà numeriche. La crittografia viene in due modi diversi: simmetrico e asimmetrico.

Nella crittografia simmetrica viene stabilita una sola chiave, da usare sia per crittare sia per decifrare il testo.

La crittografia asimmetrica usa due chiavi complementari: la chiave pubblica e la chiave privata. Ciò che viene crittato con l'una potrà essere decifrato solo con l'altra. In questo modo si risolve un problema di base della crittografia simmetrica: come scambiarsi la chiave. La chiave pubblica viene liberamente divulgata e quella privata gelosamente custodita.

Un secondo fatto tecnico riguarda la possibilità di creare un digest di un testo. Un digest, letteralmente un sommario o compendio del testo, è una breve sequenza di byte che dipende in modo pseudo-casuale dal testo. Esistono diversi procedimenti per computare i digest in modo che a testi anche di poco diversi corrispondano digest diversi e che non sia fattibile, dato un digest, modificare un testo in modo da ottenere proprio quel digest. Tra i più usati, SHA1, SHA256 e MD5, che oggi è sconsigliabile.

Con questi tre elementi, crittografia simmetrica, asimmetrica e digest, vengono costruiti i certificati digitali, le connessioni sicure, l'email riservata, le firme digitali, eccetera.

Inizio paginasu

Firma e certificato digitale

Per firmare un testo bisogna leggerlo, ciò che in termini digitali significa calcolarne il digest. Se Alice dispone di una coppia di chiavi asimmetriche, può calcolare il digest di un testo secondo un certo procedimento e poi crittare il digest con la sua chiave privata. Così chiunque può decifrarlo usando la chiave pubblica di Alice. Chiunque può anche ricalcolare il digest dal testo originale. Usando lo stesso procedimento usato da Alice dovrebbe ottenere lo stesso digest. Allora, se il digest ricalcolato è uguale a quello decifrato, la firma è valida. Ovviamente, se il testo fosse stato alterato anche di una virgola, il digest risulterebbe diverso. Anche se il digest fosse stato crittato con una chiave diversa dalla chiave privata di Alice, si riconoscerebbe il falso. Il digest crittato con la chiave privata è la firma digitale di Alice in calce al testo.

Resta un punto debole: un falsario potrebbe generare una coppia di chiavi asimmetriche e distribuire la sua chiave pubblica facendo credere che si tratti della chiave pubblica di Alice. Con la sua chiave privata potrebbe crittare il digest di un testo e gli allocchi crederebbero che l'abbia firmato Alice. Uno dei metodi per evitare questo fraintendimento consiste nel chiedere a un'autorità di certificazione (CA, dall'inglese) di firmare digitalmente un testo in cui c'è scritto il nome di Alice, qualche altro dato rilevante, per esempio l'indirizzo email, e la sua chiave pubblica. Questo testo firmato dalla CA si chiama un certificato digitale emesso (o rilasciato) dalla CA. Alice può far certificare la sua chiave pubblica da una o più CA cosicché sia possibile per chiunque verificare la sua firma basandosi su una chiave pubblica certificata.

Una certification authority (CA) è un qualsiasi ente che emetta certificati digitali. Per verificare un certificato si procede come per la verifica di una firma, ossia basandosi sulla chiave pubblica della CA. Questa può essere ottenuta dal certificato della CA. Il certificato della CA può essere firmato da un'altra CA, dando luogo a una catena. Il primo certificato della catena è sempre firmato dalla CA stessa che si autocertifica con quello che, in inglese, si chiama self signed certificate.

Un metodo alternativo è quello previsto da OpenPGP. Questo si basa su catene di autorizzazioni basate sulla conoscenza personale, senza autorità centrali. Essere gratuito è solo uno dei vantaggi di questo metodo. L'altro è di essere in qualche modo più informale.

Inizio paginasu

Come si costruisce un certificato digitale

Anzitutto si genera una coppia di chiavi asimmetriche. Per fare questo è necessario utilizzare il software adatto. I browser e i client di posta elettronica più diffusi possono generare e gestire coppie di chiavi asimmetriche. Esistono anche programmi specifici per eseguire quest'operazione, per esempio OpenSSL, che essendo open source non ha procedure, chiavi, o algoritmi segreti.

Data la coppia di chiavi, si compila una richiesta di certificato con la chiave pubblica e i dati del richiedente. Questi dati sono definiti secondo regole che dettano, per ciascun tipo di dato, sia il formato sia il significato. Per esempio, l'indirizzo email è il dato ASN.1 di codice 1.2.840.113549.1.9.1. La chiave privata non fa parte della richiesta, ma viene utilizzata per firmare la richiesta stessa, in modo che la CA non possa alterare in alcun modo i dati contenuti.

Infine la richiesta viene spedita alla CA per essere controfirmata. In questo modo si ottiene il certificato. Nei browser generazione e spedizione sono unificati in un solo passaggio, in quanto il browser trova in un'apposita scrittura HTML la disposizione di generare la coppia di chiavi e inviare la richiesta di certificato. In genere il certificato non viene rilasciato immediatamente e il browser dovrà essere in grado di ritrovare la chiave privata corrispondente quando riceverà il certificato. Altri software possono escogitare metodi diversi per pervenire allo stesso risultato.

Inizio paginasu

Utilizzo di un certificato

La parte interessante di un certificato è la chiave pubblica che esso contiene. Un testo crittato colla chiave privata di qualcuno può essere decifrato utilizzando questa chiave pubblica. Un altro elemento importante è il fingerprint, l'impronta digitale del certificato. Il fingerprint è un digest del certificato. Poiché tale digest è ragionevolmente corto, risulta pratico utilizzarlo per verificare una chiave.

L'espressione è in esadecimale, dove ogni cifra corrisponde a 4 bit (0=0000, 1=0001, 2=0010, ..., F=1111) e quindi ci vogliono due cifre esadecimali per ogni byte. Chiunque abbia inserito nel proprio browser questo certificato può verificare manualmente queste cifre per convincersi di avere scaricato il certificato corretto. Allo stesso modo un software che gestisce certificati può utilizzare queste cifre per il nome del file su cui ha salvato il certificato corrispondente, in modo da ritrovare agevolmente il certificato corrispondente a una chiave data.

Certificati personali

Quando Alice spedisce a Bob per email un testo crittato e/o firmato, i certificati si usano nel seguente modo:

Per i certificati emessi da CA, solitamente in formato X509v3, i normali client email prevedono l'uso di S/MIME, una tecnica che permette di spedire firma e certificato come allegati MIME.

Se si usa OpenPGP è pure possibile l'integrazione MIME, ma a volte si usa la trasmissione di testo armored (lett. corazzato, blindato). Il testo armored permette l'utilizzo di software non integrato nel client di posta (tipicamente GPG).

Bisogna notare che in ogni caso è possibile nascondere il contenuto del messaggio, a volte anche l'oggetto, ma non il mittente, i destinatari e il fatto che un messaggio email venga spedito in un certo momento dal primo ai secondi. La riservatezza dei meta dati si ottiene crittando la trasmissione. Nondimeno, detta trasmissione deve risultare chiara a ciascuno dei server coinvolti.

Certificati di un server

L'utilizzo di https (la 's' sta per secure) viene spesso chiamato SSL (secure socket layer) o TLS (transport layer security). Si noti che i dati trasmessi, se vengono salvati, vengono salvati in chiaro o, se è il caso, re-crittati con un'altra chiave. Il collegamento web sicuro garantisce soltanto la riservatezza durante la trasmissione.

Esistono versioni sicure dei protocolli per caricare (SMTP) e scaricare (POP3, IMAP4) la posta elettronica. Questi permettono di occultare tutti i dati di un messaggio durante la trasmissione via Internet, ma non aggiungono alcuna informazione sull'autenticità del mittente. Il testo, il mittente e il destinatario sono in chiaro sul server di posta.

Esistono anche altri protocolli che utilizzano la crittografia. Per esempio, SET (secure electronic transaction) è un protocollo appositamente studiato per i pagamenti. Si tratta di una transazione a tre, Alice, Bob e un'agenzia di credito. Quest'ultima conferma il pagamento a Bob senza lasciargli conoscere il numero di carta di credito di Alice.

Inizio paginasu

Possibili attacchi

Supponiamo che qualcuno voglia carpire un dato segreto trasmesso da Alice al server di Bob, per esempio una password o un numero di carta di credito. Alice arriva al server di Bob seguendo un link, oppure scrive manualmente l'indirizzo del server di Bob nella finestrella apposita (in alto) del browser. La richiesta viene trasmessa dal computer di Alice, attraverso un eventuale server proxy, attraverso un numero di reti (in media una decina) fino al server di Bob. Di solito, lo stesso percorso viene seguito, all'avanti e all'indietro, una o più volte.

Ovviamente, se Alice usa il protocollo http, non crittato, non c'è speranza di riservatezza. Se Alice ha ottenuto una connessione sicura col server di Bob, allora la speranza c'è. Ma quanto è sicura una connessione sicura?

L'attacco diretto, mediante criptoanalisi, risulta più o meno praticabile a seconda della lunghezza delle chiavi usate. Chiavi RSA di lunghezza inferiore a 1024 bit sono state falsate, incassando i premi in palio. Si noti che 1024 bit rappresentano un numero di 309 cifre decimali! Una volta si chiamavano astronomici i numeri molto grandi, ma oggi dovremmo aggiornare il vocabolario perché questi ordini di grandezza non hanno molto senso in astronomia. Le prossime tecnologie promettono tempi più rapidi per ricavare la chiave privata del server di Bob dalla corrispondente chiave pubblica. Ogni bit aggiunto alla lunghezza della chiave raddoppia il tempo teoricamente necessario per forzare la chiave con la forza bruta. Con chiavi di 2048 bit o più lunghe, i tempi necessari alla falsificazione assicurano una riservatezza adeguata, per il momento. Discorso analogo vale per la chiave simmetrica generata ad hoc all'inizio della connessione sicura: 52 bit sono scarsi mentre 128 bit vengono considerati buoni.

L'attacco dell'uomo nel mezzo può compromettere la sicurezza anche in presenza di chiavi forti. L'hacker deve riuscire a impersonare il server di Bob in modo da ottenere i dati di Alice direttamente. Un problema da superare è quello del certificato: sul certificato del server di Bob c'è scritto il nome del server, per esempio www.bob.com e c'è scritto il nome Bob? Il server dell'hacker potrebbe avere un certificato perfettamente legale ma intestato a una persona diversa da Bob. È necessario che Alice controlli manualmente il certificato. Alice dovrebbe controllare anche la richiesta scritta nella finestrella (in alto) del browser e assicurarsi che questa sia davvero la finestrella del browser piuttosto che una finestrella finta messa ad arte su una pagina HTML.

L'attacco al name server può permettere a un hacker di convincere il computer di Alice di essere connesso col server di Bob mentre in realtà questo è connesso con un'altra macchina. Se l'hacker riesce a ottenere un certificato su cui c'è scritto www.bob.com. o *.bob.com, è possibile attuare l'attacco dell'uomo nel mezzo in modo mirato. Il name server è infatti la macchina che risolve i nomi come www.bob.com in indirizzi ip con cui stabilire la connessione. I name server richiedono gli indirizzi ad altri name server, a catena. Uno di questi può essere abbindolato con un indirizzo falso dall'hacker che sta impersonando il name server successivo lungo la catena. In questo caso la finestrella del browser è vera e sul certificato c'è davvero scritto www.bob.com. Non è semplice portare un attacco di questo tipo. Il certificato di una CA in cui si ha fiducia è il modo più facile per sincerarsi di non essere vittima di un tale attacco, ma sarebbe necessario aver verificato il certificato della CA al di fuori della rete.

L'attacco al computer di Alice è un modo più semplice e diretto di ottenere i dati segreti. Di solito viene inviato del software eseguibile tramite email, oppure facendolo scaricare da appositi siti web. Questo software installa silenziosamente un virus mentre visualizza un video clip o altro materiale innocuo. Oppure un virus viene installato direttamente sull'hard disk di Alice, se l'hacker può accedere a directory condivise, replica di file e simili. Una volta compromesso il computer di Alice, l'hacker può controllare cosa viene visualizzato sul video, quali tasti vengono pigiati, quali file si trovano su disco (compresi eventuali certificati) e modificarli.

L'attacco al server di Bob può essere effettuato con gli stessi mezzi. Compromettere un server è un buon punto per un hacker, in quanto gli permetterebbe di effettuare nuovi attacchi da lì, senza esporsi.

Certificati falsi e simil-veri possono essere generati grazie a vulnerabilità degli algoritmi. MD5 si presta a questo genere di attacco: è possibile produrre due certificati con chiavi pubbliche diverse e intestati a persone diverse che però collidono, nel senso che le parti dei certificati che la CA deve firmare hanno lo stesso digest MD5. Si veda Colliding X.509 Certificates for Different Identities. È anche possibile produrre certificati veri, ad esempio per WWW.ВОВ.COM. Inviare una mail che rimanda allo stesso server, che però non è quello di Bob, dato che "ВОВ" è scritto in cirillico.

Inizio paginasu


Copyright (C) 2002-2020 Vesely Alessandro