2001/02 Lezione N. 21 Sicurezza in Internet Tecnologie per la
Transcript
2001/02 Lezione N. 21 Sicurezza in Internet Tecnologie per la
2001/02 Lezione N. 21 Sicurezza in Internet Problemi di sicurezza in Internet. Internet è intrinsecamente insicura poiché i messaggi scambiati tra due utenti attraversano un numero elevato di nodi prima di giungere a destinazione. La commutazione di pacchetto prevede che ogni nodo memorizzi il pacchetto e quindi lo rispedisca nella direzione del destinatario appena possibile. La necessità di memorizzare i pacchetti nei file system di computer sconosciuti rende il canale virtuale estremamente vulnerabile, poiché ad ogni passaggio il pacchetto potrebbe essere letto o manipolato. Ne consegue che: • il canale di comunicazione non è riservato, • le informazioni scambiate non sono attendibili, • l’identità del mittente e del destinatario non è garantita. Documenti sicuri. La Legge Bassanini (Art. 5, Legge 59 del 15/3/1997, Regolamento del 13/3/1998) indica quattro caratteristiche fondamentali che un documento deve avere per poter essere considerato sicuro e avere valore legale: • riservatezza, deve essere possibile limitare l’accesso al documento alle sole persone autorizzate • integrità, non deve essere possibile manipolare il documento • autenticazione, l’identità dell’autore deve essere garantita, • non ripudiabilità, l’autore non può negare di averlo scritto e il destinatario non può negare di averlo ricevuto. La natura di Internet, unitamente alla facilità di riproduzione di informazioni codificate in forma digitale, non garantisce nessuna delle quattro caratteristiche. Tecnologie per la sicurezza in Internet Parole chiave. L’uso di una parola chiave (password) serve sostanzialmente a restringere l’accesso a servizi o informazioni. Se tutti gli utenti di uno stesso servizio condividono la stessa password non è possibile identificarli né scoraggiare la divulgazione della parola chiave. Viceversa, se la parola chiave è personale (ed associata univocamente ad un nome utente, o username) serve anche all’identificazione. (Es: Bancomat, Password per l’accesso a banche dati). La sicurezza di una password è legata alla difficoltà di indovinarla e a quella di verificarne n la correttezza. La difficoltà di indovinarla cresce con il numero di possibili password, pari a s dove n è il numero di caratteri e s è il numero di simboli. La difficoltà di verificare la correttezza di una password può essere misurata in termini di tempo T richiesto per la procedura d’accesso. Il tempo totale necessario a violare la password è n proporzionale al prodotto di s per T. Nella pratica, la difficoltà di memorizzazione spinge ad utilizzare password semplici o a scriverle in luoghi facilmente accessibili, aumentando il rischio di violazione. In ogni caso, le password non risolvono tutti i problemi di sicurezza in Internet. Codifici segreti - crittografia. L’uso di codici segreti è il mezzo più comune per trasmettere informazioni riservate su un canale intrinsecamente insicuro. Si presuppone che mittente e destinatario siano d’accordo sull’uso di un codice riservato. Il mittente codifica il messaggio prima di trasmetterlo, il destimatario lo riceve e lo decodifica per poterlo leggere. Chiunque intercetti il messaggio senza conoscere il codice non può decifrarlo né manipolarlo, poiché ogni manipolazione rischia di violare il codice rendendo il messaggio non più decodificabile dal destinatario. Es: Sostituzione monoalfabetica: ogni carattere viene sostituito da un simbolo privo di significato o da un carattere diverso. Shift di un carattere: ogni carattere di un testo è sostituito con quello che lo segue in un ordinamento prestabilito, quale quello alfabetico. Lo shift è un particolare tipo di sostituzione monoalfabetica. La codifica e la decodifica possono essere visti come protocolli di trasmissione e ricezione che creano un canale virtuale sicuro utilizzando un canale reale insicuro. La sicurezza offerta da un codice segreto è legata alla sua complessità. Il principale inconveniente dei codici segreti è la necessità di un accordo preventivo tra gli interlocutori. Se gli interlocutori utilizzano un mezzo di comunicazione insicuro per prendere l’accordo si espongono al rischio di violazione del codice. Se gli interlocutori sono più di due la diffusione della regola di codifica ne riduce la sicurezza e riduce la riservatezza delle comunicazioni. L’uso di codici diversi per ogni coppia di interlocutori è estremamente laborioso e poco pratico. Chiave crittografica. Esistono algoritmi di codifica e decodifica parametrizzati, il cui risultato è condizionato al valore di una chiave K. L’algoritmo non è segreto, la chiave sì. La conoscenza dell’algoritmo non consente la decodifica se non si conosce la chiave (Es: shift di K posizioni). Se la stessa chiave è utilizzata sia per la codifica che per la decodifica si parla di crittografia a chiave privata, o simmetrica (Es: shift di K posizioni avanti e indietro). Il problema nell’uso di algoritmi di crittografia a chiave simmetrica è la necessità di un accordo preventivo tra gli interlocutori sulla chiave da utilizzare. Questo da un lato rende vulnerabile la codifica se l’accordo è sancito utilizzando un canale di comunicazione insicuro. Dall’altro implica la diffusione della chiave tra tutti coloro che devono accedere all’informazione. Se la chiave di decodifica è diversa da quella di codifica si parla di crittografia a chiave asimmetrica (Es: shift circolare di K posizioni in codifica, shift circolare di N-K posizioni in decodifica, dove N è il numero totale di caratteri). Crittografia a chiave pubblica. Gli algoritmi di crittografia a chiave pubblica utilizzano una coppia di chiavi asimmetriche, che indichiamo con Kpriv e Kpub, tali che: • La conoscenza dell’una non consente di risalire all’altra • L’una decodifica ciò che l’altra codifica Chiamiamo privata una delle due chiavi (Kpriv) pubblica l’altra (Kpub). Un solo soggetto possiede la chiave privata, tutti possiedono quella pubblica. La chiave pubblica può essere distribuita senza mettere a rischio la riservatezza di quella privata. I messaggi decodificabili da Kpub sono stati codificati con Kpriv, quindi provengono dal soggetto a cui la chiave privata appartiene. I messaggi codificati con Kpub possono essere decodificati solo da Kpriv, quindi sono destinati al soggetto a cui la chiave privata appartiene e non sono accessibili ad altri. Sicurezza degli algoritmi di crittografia a chiave pubblica. Assumendo che la conoscenza della chiave pubblica e di messaggi in codice non fornisca alcuna informazione utile all’identificazione della chiave privata, la sicurezza offerta dagli algoritmi di crittografia a chiave pubblica risulta proporzionale al numero di possibili chiavi e al tempo necessario a sperimentare ciascuna di esse. Il tempo richiesto per ogni tentativo dipende dalla complessità dell’algoritmo di decodifica, mentre il numero di chiavi dipende dalla lunghezza delle chiavi (n) e dal n numero di simboli dell’alfabeto (s) secondo la relazione s . In pratica, quindi, un messaggio in codice è sicuro per un intervallo di tempo finito pari al tempo necessario a violarlo. Trascorso questo tempo il messaggio potrebbe essere decodificato da qualche crittoanalista che avesse impiegato tutto il tempo a cercare di violarlo, e pertanto non può più essere ritenuto sicuro. Aumentando i valori di n ed s è comunque possibile, in teoria, portare il tempo di violazione oltre valori umanamente concepibili, quale il tempo stimato di vita dell’universo. Ogni messaggio in codice conserva in realtà alcune proprietà statistiche del messaggio originale. L’individuazione di tali proprietà facilita il compito dei crittoanalisti, riducendo il tempo di violazione ben al di sotto del limite teorico della violazione a tentativi casuali. (Es: la sostituzione monoalfabetica altera i caratteri, ma non ne modifica la frequenza relativa, caratteristica di ogni lingua. Calcolando la frequenza con cui compaiono i simboli in un messaggio cifrato si può tentare di capire a quali lettere sono stati sostituiti. Ad esempio, in Italiano la A e la E sono molto più frequenti della Z e della Q. Se in un messaggio in codice la lettera più frequente è la Q, è probabile che questa sia stata utilizzata al posto della A o della E. Del resto, non appena siano note alcune lettere, diventa relativamente semplice dedurre le restanti dal contesto.) Quindi, ogni volta che si usa una chiave la si rende di fatto un po’ meno sicura. RSA (Rivest-Shamir-Adelman). L’algoritmo di crittografia a chiave pubblica utilizzato in Internet è l’RSA, basato sulla difficoltà di scomporre in fattori primi numeri interi molto grandi. Il tempo medio di violazione è esponenziale nella lunghezza della chiave, mentre il tempo di codifica e decodifica è proporzionale alla lunghezza del messaggio e dipende anch’esso dalla lunghezza della chiave. Chiavi a 1024 o 2048 bit richiedono tempi di violazione stimati superiori alla vita dell’universo, mentre il tempo di decodifica di un messaggio codificato con chiave a 1024 bit è dell’ordine del tempo di lettura. L’algoritmo è stato sviluppato nel 1977 al MIT con fondi governativi e protetto da brevetto per controllarne la diffusione (il brevetto scade il 20 settembre 2000). Gli algoritmi di fattorizzazione sono considerati segreti militari. Gli algoritmi utilizzati in Internet devono essere di dominio pubblico. Gli Stati Uniti impongono un limite di 128 bit alla lunghezza delle chiavi utilizzate per codificare messaggi da e per l’estero, in modo da evitarne l’indecifrabilità. Certificati digitali. File che associano la chiave pubblica all’identità del titolare. L’attendibilità del certificato (e quindi l’identità del titolare) deve essere garantita da una terza parte, detta autorità di certificazione (Certification Authority, CA). L’autorità di certificazione rilascia un certificato digitale solo dopo aver fatto accertamenti sull’identità del richiedente. Tutti i certificati digitali rilasciati da un’autorità di certificazione sono criptati utilizzando la chiave privata della CA. Chi vuole prendere visione di un certificato digitale deve decriptarlo utilizzando la chiave pubblica della CA. In tal modo ha garanzia del fatto che sia stato rilasciato proprio dalla CA. Il processo di certificazione è il seguente: • Il soggetto richiede il certificato alla CA • La CA accerta l’identità del richiedente • Il richiedente genera una coppia di chiavi e invia la chiave pubblica alla CA • La CA genera il certificato associando l’identità del richiedente alla chiave pubblica • La CA “firma” il certificato criptandolo con la propria chiave privata • La CA invia il certificato al richiedente e lo pubblica nei propri archivi • Il richiedente installa il certificato sul proprio calcolatore Es: Verisign (www.verisign.com) è una CA autorizzata dal governo USA ad utilizzare chiavi da 128 bit. Certifica domini e utenti privati, rilasciando certificati digitali riconosciuti automaticamente da tutti i browser. Uso di crittografia a chiave pubblica e certificati digitali per la sicurezza in Internet Identità del destinatario • Il destinatario di un messaggio possiede un certificato digitale • La chiave pubblica del destinatario è utilizzata per codificare il messaggio • Effetto: riservatezza della comunicazione Identità del mittente • Il mittente possiede un certificato digitale • La chiave privata del mittente è utilizzata per codificare il messaggio • Effetto: autenticazione del mittente Identità di mittente e destinatario • Sia il mittente che il destinatario possiedono certificati digitali • La chiave privata del mittente è utilizzata per codificare il messaggio una prima volta • La chiave pubblica del destinatario è utilizzata per codificare il messaggio una seconda volta prima di spedirlo • Effetto: autenticazione di destinatario e mittente e riservatezza della comunicazione Sicurezza del canale • Secure Socket Layer (SSL): protocollo per la comunicazione sicura in Internet • Crittografia a chiave pubblica utilizzata per decidere una chiave simmetrica segreta da utilizzare per la codifica dei dati, detta chiave di sessione • Identificazione basata su RSA • Integrità basata su controlli a chiave • L’uso di SSL è trasparente ai livelli applicativi • Nota: utilizzando la chiave privata asimmetrica solo per scambiare chiavi di sessione se ne limita l’esposizione al rischio di violazione. Del resto la chiave simmetrica di sessione cambia di volta in volta, rendendo anche in questo caso difficile la violazione. Firma digitale • Il mittente possiede un certificato digitale • La chiave privata del mittente non è utilizzata per codificare il messaggio • Viene generata una firma, cioè una stringa dipendente dal contenuto del messaggio e dal momento in cui viene generata • Cambiando il messaggio o la data dovrebbe cambia la firma • La firma viene codificata con la chiave privata del mittente • Chi riceve il messaggio decodifica la firma con la chiave pubblica del mittente e ne verifica la consistenza con il contenuto e la data del messaggio • Effetto: identità del mittente, integrità del messaggio, non ripudiabilità • Nota: utilizzare la chiave privata solo per codificare la firma, anzichè per codificare l’intero messaggio, rende più efficiente il sistema e meno esposta la chiave. Sicurezza di un sito Web • Il dominio è certificato • Chi si collega al sito sa a chi appartiene e può vederne il certificato • Le informazioni scambiate tra cliente e server utilizzano il SSL • I browser Web segnalano i siti certificati mostrando un simbolo (chiave o lucchetto) nella barra di stato. Clickando sul simbolo è possibile visualizzare il certificato del sito. • Se il simbolo è un lucchetto aperto (o una chiave rotta) il certificato non è ritenuto attendibile dal browser. Questo vuol dire che non dà garanzie sull’identità del titolare del sito, ma consente comunque di usare il SSL per lo scambio di informazioni. • Gli indirizzi di pagine Web sicure cominciano per https:// anzichè per http://