Appunti di Sicurezza nelle Comunicazioni AA 2007/2008

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Appunti di Sicurezza nelle Comunicazioni AA 2007/2008"

Transcript

1 Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 1

2 LEZ /09 Introduzione al Corso Introduzione alla Sicurezza... 5 Differenza tra Safety e Security... 5 DEFINIZIONI... 5 Attacchi LEZ /09 Introduzione alla Crittografia... 6 PRINCIPIO DEL MINIMO PRIVILEGIO (PoLP)... 6 La Crittografia... 7 Cifratura Simmetrica:... 7 LEZ /09 Introduzione alla Crittografia / Crittografia Classica... 8 Cifratura a chiave Pubblica (PK)... 8 Digital Signature... 9 CRIPTOSYSTEM LEZ /10 Cenni di Teoria di Shannon / Cifrari a blocco e a flusso (parte 1)... 9 Cifrario a sostituzione:... 9 Cifrario Affine: Vector affine cipher: Permutation cipher: Stream cipher: Cosa vuol dire Sicurezza? Definizione di Segretezza perfetta data da Shannon: One Time Pad: Cifrario a Blocco (Block Cipher) Cifrario a Flusso (Stream Cipher) Self Sinchronized Ciphers: Sinchronous Ciphers: LEZ /10 Cifrari a Blocco e a Flusso (parte1) DES (Data Encryption Standard) LEZ /10 Cifrari a Blocco e a Flusso (parte2 AES, Blowfish) The AES Cipher Rijndael AES su un architettura a 32-bit Cifrario Blowfish LEZ /10 Cifrari a Blocco e a Flusso (parte2, RC4) / Modi operativi Inizializzazione Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 2

3 Cifratura Decifratura Modi Operativi Padding e Modi Operativi a Blocco Cipher Block Chaining (CBC) Initial Vector (IV) Modi Operativi a Flusso Output FeedBack (OFB) Cipher FeedBack (CFB) Counter Mode (CTR) Problemi dei modi operativi LEZ /10 Hash Hash Crittografico The Random Oracle Model Algoritmi Randomizzati Algoritmo di Las Vegas: Oracle model agorithm for Pmg: FINDPREIMAGE(h,y,q) Oracle model agorithm for SPmg: FINDSECONDPREIMAGE(h,x,q) Oracle model agorithm for Cls: FINDSECOLLISION(h,q) Provably Secure Hash Functions LEZ /10 MAC MAC (Message Authentication Code) Length Extension Attack: Partial Collision Attack: HMAC: CBC MAC ESER /10 Aspetti realizzativi della crittografia simmetrica Link Encryption: End to end Encryption: ESER /10 PRNG Crittografici ESER /10 Elementi di teoria dei numeri e algebra Complessità Computazionale: LEZ /10 Ordine in un gruppo, CRT. Introduzione alla crittografia PK Introduzione alla crittografia PK Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 3

4 LEZ /10 Crittografia a Chiave Pubblica - PK (Public Key) - RSA RSA LEZ /11 Generazione dei numeri primi e attacchi a RSA LEZ /11 Attacchi a RSA, Crittosistemi a chiave pubblica alternativi ad RSA Crittosistemi a chiave pubblica alternativi ad RSA Il logaritmo discreto LEZ /11 Crittosistemi a chiave pubblica alternativi ad RSA DL problem in ElGamal Cenno alle ECC Intro Firme Numeriche Forgiare una firma LEZ /11 Firme Numeriche LEZ /11 (prima parte) - Firme Numeriche DSA e Protocolli di Autenticazione LEZ /11 (seconda parte) - Protocolli di Autenticazione Key Management Il Disavowal Protocol LEZ /11 - Protocolli crittografici Diffie-Hellman e sue varianti autenticate LEZ /11 Forward Secrecy in DH - Autenticazione LEZ /11 (prima parte) Autenticazione: password Protocolli di Autenticazione (Security Handshake) Esempi di protocolli di autenticazione Protocollo Login-only con Secret Key LEZ /11 (seconda parte) Protocolli di Autenticazione (Security Handshake) Fine.... Errore. Il segnalibro non è definito. Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 4

5 LEZ /09 Introduzione al Corso Introduzione alla Sicurezza Differenza tra Safety e Security, la prima riguarda le persone, la seconda i dati o più in generale le cose. La sicurezza è tutto ciò che riguarda: - Value: ciò che ho da proteggere; - Locks: i modi in cui lo proteggo; - Police & Courts: chi interviene in caso di attacco. Nella Computer and Network Security, Locks sono i meccanismi di sicurezza (gli strumenti crittografici), mentre le locks keys, sono i meccanismi di autenticazione. I lucchetti di per se sono inutili se non fanno parte di un ben più ampio sistema di sicurezza. Quando definiamo ed implementiamo gli strumenti crittografici dobbiamo distinguere la Policy, che specifica gli obbiettivi da raggiungere, dai Mechanism, che sono delle procedure realizzative che utilizzano crittografia per espletare funzioni di sicurezza. Una volta definiti gli Assets (Value), il proprietario (Owner) ne definisce la Policy in modo da prevenire le Threats (minacce) che possono intervenire tramite degli attacchi. L attacco è qualcosa che danneggia o usa impropriamente il bene (Value). Which Secutity? L ideale sarebbe far sì che l attacco costi di più di quanto possa rendere. DEFINIZIONI Network Security: misure atte a proteggere dati e transazioni durante la loro permanenza in una rete di computer. Security Attack: ogni azione che compromette la sicurezza dell informazione. Security Mechanism: procedure specifiche designate per: Prevenire, Rivelare, Recuperare, eventuali attacchi. Security Service: servizio che migliora la sicurezza degli Assets utilizzando i meccanismi di sicurezza. I servizi di sicurezza si raggruppano in 5 maggiori categorie:. Authentication: assicurarsi che l entità con cui si comunica sia quella voluta.. Access Control: prevenire un uso delle risorse non autorizzato.. Data Confidentiality: protezione di dati da una diffusione non autorizzata.. Data Integrity: garantisce che il dato ricevuto non sia stato modificato e che sia conforme all originale.. Non-Repudiation: protezione contro la volontaria negazione da parte di una delle due entità attive nella comunicazione. È possibile individuare un protocollo di sicurezza a strati (Security Protocol Layer) così come il modello OSI di IP. Salendo (verso il lato applicativo) si effettua cifratura in periferia, scendendo (verso lo strato fisico) si effettua cifratura nei nodi di rete. Salendo è quindi più semplice e flessibile introdurre sicurezza esattamente nella misura e laddove è richiesta. Scendendo verso gli strati più bassi, e in maniera meno selettiva, tutto quello che passa verrà cifrato. Attacchi. È importante fare l analisi delle minacce, inventariare i beni da proteggere. Chi sono le minacce? Quali sono le loro risorse? La Vulnerabilità è una debolezza, spesso un errore nel codice che può essere di tipo progettuale o realizzativo, e che viene sfruttato per portare avanti un attacco. L Attacco è il metodo per sfruttare le vulnerabilità, portato avanti da un Threat che rappresenta qualcuno o qualcosa motivata a fare ciò. Gli attacchi compromettono: Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 5

6 - La segretezza (o confidenzialità), causando una diffusione impropria dell informazione. - L integrità, causando un alterazione impropria dell informazione. - La disponibilità, se causano dei fuori servizio. Gli attacchi possono essere: Passivi: (ascolto senza intervento) infrangono servizi di sicurezza come la riservatezza e la confidenzialità, ma non l autenticazione. Attivi: se l attaccante interviene attivamente sullo stream di info modificandolo, spacciandosi per una delle due entità, ripetendo messaggi precedenti, modificando messaggi in transito, o negando il servizio. Gli attacchi passivi non sono rivelabili, non si può fare Detection e quindi Reaction, a meno di un errore dell attaccante. LEZ /09 Introduzione alla Crittografia Esempi di attacchi alla sicurezza sono: - Interruzione: attacco alla disponibilità. - Intercettazione: attacco alla confidenzialità (Evedropping: EVE). - Modifica: attacco alla integrità (Man in the Middle: MALLORY). - Fabricazione: attacco all autenticità. Un modello di Interazione Sicura (Security Interaction Model) è il seguente: S Canale S Alice e Bob sono le entità interessate, l Opponent è l avversario motivato all attacco, Trent sono le terze parti fidate, il canale di comunicazione è la risorsa di trasferimento, S sono le trasformazioni legate alla sicurezza, trasformano l informazione prima di trasmetterla. L uso di un modello del genere richiede: l implementazione delle trasformazioni legate alla sicurezza; la generazione di informazioni di sicurezza (le chiavi) usate dagli algoritmi; implementazione di metodi per la distribuzione e condivisione delle chiavi (problema principale); specifica di protocolli che abilitino i principali user di trasformazioni e chiavi di un servizio o meccanismo di sicurezza. PRINCIPIO DEL MINIMO PRIVILEGIO (PoLP). Ogni applicazione ed ogni utente di un sistema, dovrebbero operare usando il minimo set di privilegi necessari a completare il lavoro. Come corollario si usa il: Failsafe Defaults, ogni accesso è negato senza una esplicita richiesta. Ma anche il Separation Of Privileges, secondo cui ogni meccanismo crittografico deve richiedere una chiave propria, ciò però va mediato con la fattibilità, il vero problema è generare congiuntamente la Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 6

7 chiave tra le parti. La soluzione è una chiave a lungo termine che permetta di generare le sottochiavi a breve termine. Parlando di crittografia bisogna affermare che la sicurezza non è misurabile! La complessità poi è il suo peggior nemico: KISS Principle (Keep It Simple, Stupid!); un sistema semplice non è necessariamente un piccolo sistema, MODULARIZZAZIONE! La soluzione sta nel realizzare il sistema in modo modulare, in cui ogni blocco sia indipendente dagli altri ma con semplici interfacce tra le singole parti. La Crittografia è l arte e la scienza di criptare, codificare, includendo regole di controllo come l Autenticazione, la Firma Digitale, il Controllo d accesso. La crittografia, come i lucchetti, è di per se inutile se non fa parte di un più completo sistema di sicurezza, anche se essa ne rappresenta la parte più critica. Raramente la crittografia però è l anello debole del sistema, ma essa deve funzionare, specialmente nei sistemi che hanno altre debolezze. Un sistema di sicurezza è tanto robusto quanto lo è il suo anello più debole. Bisogna pensare che l Opponent sia intelligente, e che attaccherà il sistema nel suo punto più debole. Il sistema di sicurezza si confronta con Opponent attivi, di cui non si conosce l identità, le conoscenze, gli obbiettivi e il momento in cui attaccheranno. Chi attacca dovrà trovare solo un singolo punto debole, mentre chi protegge deve controllare ogni area del sistema. Si protegge quindi secondo il Paranoia Model. La sicurezza è sempre un misto di Prevenzione, Rivelazione, Risposta, il ruolo della crittografia è la prevenzione. CIFRARE vuol dire modificare l informazione in modo che sia correttamente ricevibile dai destinatari legittimi, ma sia del tutto inservibile a qualsiasi altra terza parte. Cifratura Simmetrica: Alice ha un plaintext m da mandare a Bob; usando una K C (secret key) e una funzione di cifrature E(k,x) ottiene il ciphertext c che viene decriptato da Bob tramite la funzione di decifratura D(k,x) e la stessa chiave segreta K C. => E necessario che E sia invertibile i.e. D=E -1, il problema maggiore rimane quindi la Distribuzione della Chiave. La sicurezza di un sistema di cifratura deve dipendere solo dalla segretezza della chiave e non degli algoritmi di cifratura. Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 7

8 LEZ /09 Introduzione alla Crittografia / Crittografia Classica Cosa si vuol fare? Permettere a Bob di poter dire che il messaggio è proprio conforme a quello di Alice (Integrity) e che è proprio Alice che lo ha mandato (Identity). La risposta dell Autenticazione sarà semplicemente Yes or No. Alice calcola il Message Authentication Code (MAC) a utilizzando la sua chiave segreta K a e il plaintext m a=h(k a,m) tramite il Crittographic Hash Algoritm, e manda a Bob m,a. Bob calcola a =h(k a,m) e confronta a con a, se a =a Bob accetta m. L autenticatore h(k,x) non è necessariamente invertibile, e per evitare overhead voglio che sia piccolo. L Opponent può effettuare Forging (forgiatura) generare una coppia a,m valida, cioè con a autenticatore corretto di m, ma con m messaggio che non è mai stato autenticato da Alice. L obbiettivo del MAC è rendere computazionalmente infattibile l operazione di Forging. Il MAC non garantisce la Confidenzialità, ma la Autenticità e Integrità del messaggio. Oscar (the Opponent), oltre a modificare, può ripetere, cancellare, ritardare, o alterare l ordine dei messaggi. Cifratura a chiave Pubblica (PK) Alice calcola c=e(pk B,m) testo cifrato con la chiave pubblica di Bob. Bob usa D=E -1 che è facilmente calcolabile, anche da Oscar, ma essendo parametrica ho bisogno della chiave segreta SK B di Bob per decifrare e recuperare m. Il problema è: sono sicuro che Alice abbia proprio la PK di Bob? Public Key Authentication. Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 8

9 Digital Signature: Autenticazione fatta con paradigma a chiave pubblica. Alice calcola s=g(sk A,m) con la sua SK A e l algoritmo di firma digitale g(sk,x) e manda a Bob s,m. Bob vi applica un algoritmo di verifica v(pk A,m,s) usando la chiave pubblica di Alice, se il controllo ha successo accetta m. Livelli di Sicurezza: Dipendono dalla complessità delle tecnologie. Ogni sistema crittografico può essere attaccato con successo, il punto è con quale complessità computazionale? Lo sforzo di un attacco è in genere specificato dal # passi elementari (Steps) da effettuare. Un desiderabile livello, per il progetto di un sistema affidabile, dovrebbe essere steps. CRIPTOSYSTEM. Un Criptosystem è rappresentato dalla 5-pla (P,C,K,E,D) dove: - P: insieme finito dei possibili plaintext (dominio della funzione di cifratura); - C: insieme finito dei possibili ciphertext (codominio della funzione di cifratura); - K: Keyspace, insieme finito delle possibili chiavi. Si passa da P a C usando un elemento k di K., e il corrispondente t.c. e ed sono tali che. Attacco a Forza bruta: conosco una coppia di p j,c j, provo tutte le possibili chiavi, quella chiave che a p j mi fa corrispondere proprio il mio c j è sicuramente la chiave buona. LEZ /10 Cenni di Teoria di Shannon / Cifrari a blocco e a flusso (parte 1) Facciamo un excursus di codici storici che ci permettono di far emergere un paio di idee fondamentali, maturate nel corso degli anni, che sono oggi alla base di progetto e utilizzazione di qualunque cifrante o algoritmo di cifratura. Cifrario a sostituzione: ho un alfabeto, definisco un mapping che mappa l alfabeto con se stesso, il mapping che definisco, cioè la corrispondenza biunivoca, è la chiave stessa, e quindi data una stringa di caratteri di quest alfabeto, la trasformo in un altra stringa attraverso questa funzione biunivoca. Poiché conserva la struttura intrinseca del testo (qualora ci sia una struttura), esso risulta perfettamente attaccabile perfino con attacco ciphertext only, in cui ho soltanto il testo cifrato e ricostruisco il testo in chiaro. Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 9

10 Cifrario Affine: è un cifrario scalare, come dire che il testo in chiaro e il testo cifrato appartengono ad un insieme di 26 elementi, rappresentati da numeri interi da 0 a 25, in realtà erano le lettere dell alfabeto da A a Z. La chiave in questo caso è una coppia di numeri interi da 0 a 25, con la proprietà che valga questo: K={(a,b) Є Z26 x Z26 : gcd(a,26)=1} posto gcd(x,y) (massimo comune divisore: intero più grande che è divisore (essere divisore vuol dire che la divisione tra l intero dato e il divisore da resto zero) contemporaneamente dei due interi x e y) chiedere che gcd(a,26)=1, vuol dire che a e 26 sono primi tra loro, ad esempio se a=4 il gcd(4,26)=2 condizione falsa, se a=9, tra 9 e 26, è 1. Detto questo la funzione di cifratura è la seguente, ho una trasformazione affine del testo cifrato, il testo cifrato è un numero tra 0 e 25, ed io faccio questo calcolo: ek(x)=(ax+b) mod 26 nel quale ho fatto il mod 26del prodotto di numeri interi, ho cioè diviso per 26 e ne ho preso il resto, ottenendo un numero tra 0 e 25, e quindi un crittotesto. Per produrre un testo cifrato occorre eseguire un operazione di codifica dei dati da cifrare, in un formato adatto alla cifrante, in questo caso un numero intero tra 0 e 25. La condizione gcd(a,26)=1 serve a garantire che esista a -1 cioè che si possa scrivere l inversa. Dire che un numero è l inverso dell altro vuol dire che il loro prodotto, mod 26 è pari ad 1: 3 è l inverso di 9 poiché (3 *9)mod26=1. Perché questo codice non serve a niente, innanzitutto qual è la chiave, sono i numeri a e b che dovrebbero rimanere segreti e che sono in numero inferiore a 26 *26, perché abbiamo tolto su a tutti i numeri pari, quindi ¼ di 26 *26, ma il problema strutturale è che se io conosco due coppie testo in chiaro testo cifrato, quindi un attacco di tipo non-plaintext (cioè conosco due testi cifrati corrispondenti a due testi in chiaro, non gli ho scelti io, li conosco) e sono così fortunato che i due testi in chiaro soddisfano questa proprietà: gcd(x 1-x 2,26)=1, posso scrivere un sistema del tipo: In cui y 1,y 2 (testi cifrati), x 1,x 2 (testi in chiaro) sono i termini noti, a e b (key) sono le incognite. Tale sistema è lineare ed è risolvibile se la matrice dei coefficienti è invertibile, ma questo ci è garantito Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 10

11 dalla condizione sopra: gcd(x 1-x 2,26)=1; posso quindi, conoscendo due coppie (x, y) risalire alla chiave risolvendo questo sistema. Vector affine cipher: potrei risolvere il problema riscrivendo questo criptosystem utilizzando però P e C appartenenti al prodotto cartesiano m volte di Z 26 --> Z 26 m cioè una m-pla di lettere con m che può essere pure 100. La chiave ora è rappresentata da una matrice A e da un vettore b tali che A è prima con 26 K={(A,b) : gcd(det(a),26)=1} che è la condizione per poter invertire A nell aritmetica modulare: A -1 e t.c. (AA -1 )mod26=i, matrice identità. Scrivo allora le equazioni come prima: Le chiavi in questo caso sono m *m elementi di A, più m elementi di b, scegliendo m grande posso farle robuste. Purtroppo vale lo stesso attacco di prima, se conosco, questa volta non 2, ma più coppie, posso scrivere in definitiva un sistema lineare, quando ho m+1 equazioni la soluzione sarà univoca. Il motivo per cui questi codici soccombono ad attacchi non-plaintext è che creano un legame riconducibile ad equazioni lineari tra testo in chiaro e testo cifrato. La non linearità è una condizione necessaria per ogni cifrario. Un cifrario privo di non linearità è da buttare. Permutation cipher: Invece di fare una sostituzione prendo le lettere del testo in chiaro e le mescolo tutte secondo una regola nota al destinatario E un caso particolare del cifrario visto prima, con b=0 e A matrice identità permutata; rientra nei casi di codici lineari quindi risulta rompibile. Stream cipher: è definito sempre dalla 5-pla (P,C,K,E,D) ma con qualcosa in più, un alfabeto del Keystream L cioè del flusso di chiavi, e una funzione generatrice del keystream g che prende in input la chiave segreta k appartenente a K e genera una stringa potenzialmente infinita di valori chiamato keystream. Che ci si fa con il keystream? Per ogni valore z del keystream esiste una funzione di cifratura e la corrispondente funzione una inversa dell altra. Un esempio pratico è l LFSR (Linear Feedback Shift Register). Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 11

12 L idea è: ho una macchinetta g che prende in input k e restituisce la sequenza z, dopodiché il modo di cifrare è il seguente, supponendo di lavorare con i bit, la cifrante prende in input il bitstream, cioè i bit del testo in chiaro, e li mette in XOR (somma modulo 2: da 1 se gli elementi sono diversi, 0 se sono uguali) con i bit del keystream, chi riceve il testo cifrato lo prende e lo mette in XOR sempre con lo stesso keystream (la funzione inversa dell XOR e sempre la XOR); tutto si regge sul fatto che tutti e due stanno usando lo stesso keystream, la stessa macchinetta inizializzata allo stesso modo, ecco qui la chiave segreta. È necessario che la Feedback Function sia una funzione non lineare, altrimenti potrei osservare un certo numero di keystream e ottenere la chiave iniziale. Cosa vuol dire Sicurezza? Ci sono definizioni precise, si parla innanzitutto di: - Sicurezza Incondizionata: è quella vera, è indipendentemente da quante risorse di tempo e di calcolo io dispongo, la cifratura non può essere rotta. - Sicurezza Condizionata: - Sicurezza Computazionale: dato un certo limite sul tempo e sulla capacità di calcolo che ha l attaccante, si può dimostrare che esso non potrà portare a termine il suo attacco. - Sicurezza dimostrabile: cosa si dimostra? Si dimostra che poter attaccare l algoritmo in esame con un determinato modello di attacco, equivale a risolvere un altro problema molto ben noto e ben studiato e che si ritiene difficile, cioè risolvere A equivale a risolvere B (che sappiamo non risolvibile) quindi A è Provable Secure. Definizione di Segretezza perfetta data da Shannon: con riferimento ad un cifrario, supponiamo che esista una misura di probabilità definita sull insieme dei testi in chiaro e sull insieme delle chiavi, allora questo induce una misura di probabilità sull insieme dei testi cifrati Dove C(k) è l insieme di tutti i testi cifrati prodotti con una fissata chiave k, è l immagine dell insieme X attraverso la funzione e k parametrica di k. Dopodiché la Segretezza Perfetta è definita così: un crittosistema ha segretezza perfetta se la probabilità a posteriori sul testo in chiaro x una volta osservato un testo cifrato y, è identica alla probabilità a priori sul testo in chiaro x. Osservando y, non ho appreso niente di più su x di quanto già sapevo a priori. Come ottengo ciò? Innanzitutto Shannon ci dice che per ottenere ciò devo avere un numero di chiavi superiore al numero dei testi in chiaro Perfect secrecy implies K P. Assumiamo che i testi cifrati abbiano tutti probabilità positiva, in quanto se ce ne fossero con probabilità nulla li eliminiamo e ridefiniamo C, quindi hanno tutti probabilità positiva. Se un crittosistema ha segretezza perfetta ho Pr{X=x Y=y}=Pr{X=x} da cui secondo Bayes risulta positiva la seguente Pr{Y=y X=x}=Pr{Y=y}>0 che mi dice che dato un testo in chiaro, la probabilità di vedere un Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 12

13 testo cifrato è positiva, quindi dato un testo in chiaro esiste sempre una chiave k per cui e k(x)=y poiché la funzione è biunivoca i k devono essere tra loro distinti, K C cioè per ogni testo cifrato c è una chiave che lo produce, poi C P è necessario poiché garantisce l invertibilità della cifrante ci devono essere per forza più testi cifrati, non meno di quanti sono i testi in chiaro altrimenti non posso fare decifratura. Dalle ultime due discende quindi che per poter fare segretezza perfetta deve essere K P tante chiavi quanti sono i testi in chiaro. Mettendoci in queste condizioni Shannon dice che: partendo dal fatto che ne servono di più, affermiamo che non c è motivo di avere più chiavi del numero di testi in chiaro, quindi le prendiamo uguali. Dato allora un crittosistema con K = C = P, esso avrà segretezza perfetta se scegliamo le chiavi a caso (con uguale probabilità ), e se usiamo una sola chiave per ogni testo in chiaro, cioè esiste una sola chiave che da un testo i chiaro produce un testo cifrato One Time Key. One Time Pad: dato un vettore di n arbitrario bit, la teoria ci dice che dobbiamo avere uno spazio delle chiavi almeno uguale allo spazio dei testi in chiaro che in questo caso sono 2 n, quindi per avere lo spazio delle chiavi della stessa dimensione devo prendere chiavi lunghe n. La funzione cifrante sarà ek(x)=dk(x)=(x+k) mod 2 faccio l XOR bit a bit tra il testo in chiaro e il keystream di n bit. La segretezza è data dal fatto che io ho un numero di bit di chiave pari al numero di bit da cifrare, che sono scelti a caso. Questo in effetti è il One Time Pad, è un codice Unconditional Secure, non c è modo di attaccarlo in quanto il keystream è una sequenza puramente random, qualunque sia x, y sarà puramente random, non riconoscibile. Il limite sta nel fatto che siccome i keybit vanno usati una sola volta, i bit di chiave non sono comprimibili, l informazione sta su tutti gli n bit, a differenza dell LFSR in cui l informazione stava solo sulla chiave iniziale. Il difetto sta nel fatto che per trasmettere n bit sicuri, io devo aver prima condiviso n bit di chiave in modo sicuro. Rinunciando alla sicurezza perfetta, ottenibile solo con OTP, realizzo dei cifrari che utilizzano chiavi di lunghezza inferiore al numero di bit che voglio trasmettere: Cifrari a Blocco e a Flusso. Cifrario a Blocco (Block Cipher). È un algoritmo che trasforma in maniera biunivoca (per garantire l invertibilità) stringhe di bit di lunghezza fissa, in stringhe di bit di lunghezza fissa non inferiore alla precedente. Matematicamente è un mapping dell insieme A n su se stesso. A è l insieme dei bit A={0,1} and n= e A n e il prodotto cartesiano n volte di A cioè l insieme delle stringhe binarie di n bit. La funzione di cifratura non è altro che una funzione che associa ad una stringa di n bit un altra stringa di n bit, quindi non è altro che una permutazione dell insieme A n. Come si può ottenere? Basta elencare tutte le stringhe su di una colonna, poi le si permutano e si mettono su di un altra colonna e così via. Stringhe sulla stessa riga sono quelle corrispondenti, e questo è un cifrario a blocco. Si prende l elenco di tutte le possibili stringhe da un lato, l elenco delle possibili stringhe permutato, e stringhe associate sono in corrispondenza biunivoca, se si legge da sin a dest è cifratura, mentre leggendo da dest a sin è decifratura. --> Sostituzione Monoalfabetica. Il numero di possibili permutazioni è pari alla cardinalità dell insieme cioè (2 n )! o meglio (A n )!, che è poi lo spazio delle chiavi. Non è possibile però memorizzare una mole di dati così grande (nel caso di blocchi da 64 bit avrei bisogno di 16 milioni di TB), allora a costo di perdere e quindi ridurre questo spazio di chiavi, si costruisce un algoritmo parametrizzato dalla chiave, che mappa univocamente stringhe binarie in un altra stringa binaria, quindi nell insieme di tutte le possibili permutazioni si sceglie un sottoinsieme realizzabile con un dato algoritmo in ingresso al quale do anche una chiave, se la chiave è lunga 56 bit vuol dire che di tutte le possibili permutazioni ne sta scegliendo 2 56, e quale di queste sceglierò dipende dalla chiave scelta. Cifrario a Flusso (Stream Cipher). Cifrario in cui dalla chiave e da una regola per generare un flusso binario, si produce un keystream, poi mette in XOR bit a bit o byte a byte e produce il testo cifrato, e allo stesso modo recupera il testo in chiaro. Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 13

14 Gli Stream Ciphers si dividono in Autosincronizzanti (Self Sinchronized Ciphers) e Sincroni (Sinchronous Ciphers). I Sincroni sono in grado di produrre il keystream a prescindere dal testo in chiaro, mentre i primi producono il keystream utilizzando l uscita della cifrante. Com è fatto un Keystream Generator, se volessimo il One Time Pad, il keystream generator dovrebbe essere un generatore di bit casuali. Per cifrare n bit lui mi produce n bit casuali e così io realizzo il One Time Pad ma questo vorrebbe dire trasmettere una chiave di n bit. Il Keystream generator invece ha uno stato interno, un algoritmo che calcola, a partire dalla chiave e dallo stato interno attuale, il prossimo valore dello stato. Per uno che non conosce la chiave, ciò che esce deve apparire come una sequenza scorrelata e non predicibile. Self Sinchronized Ciphers: come funziona, all inizio carico nel registro interno gli n bit della chiave e con quelli inizio a cifrare, entra il testo in chiaro, lo metto in XOR con il keystream, esce il testo cifrato, che oltre ad essere inviato viene re immesso (a blocchi di n bit) nello stato interno e viene utilizzato per produrre il keystream. Per decifrare cosa faccio: arriva il testo cifrato, lo si manda all ingresso di uno stesso algoritmo inizializzato allo stesso modo, questo è fondamentale, il quale inizia a produrmi lo stesso keystream, se inizializzato allo stesso modo. Sinchronous Ciphers: nel caso sincrono invece ho una chiave, che eventualmente entra anche nello stato iniziale, e calcola il keystream indipendentemente dal testo in chiaro e dal testo cifrato, per esempio potrebbe farlo anche prima offline, questo oggetto quindi dovrebbe funzionare come un generatore di numeri casuali non predicibili idealmente. Il keystreamer ce l ha sia chi cifra che ci decifra e lo inizializzano allo stesso modo poiché hanno la stessa chiave. Chi decifra recupererà il testo in chiaro a patto che si abbia sincronismo con il testo cifrato ricevuto. Se chi riceve perde il passo con il testo cifrato, cioè si disallinea, non ha modo di recuperare il sincronismo, non se ne rende conto, tira fuori dei bit di testo in chiaro che saranno dichiarati corrotti da qualche altro meccanismo di correzione. In questo cifrario è fondamentale mettere nel crittotesto l informazione necessaria ad allineare i due. Ciò non avviene nel cifrario auto sincronizzante poiché il meccanismo è pilotato proprio dai bit che riceve. Se altero o cancello uno dei bit che ricevo avrò un errore all uscita dei cifrari, ma nel cifrario Autosincronizzante l errore rimane per il tempo in cui lo stato interno non viene rigenerato dagli altri Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 14

15 n bit del crittotesto quindi in uscita avrò n bit errati e non di più, nel cifrario Sincrono invece l errore si avrà solo su quel bit, quindi non c è propagazione d errore; questo solo se mantengo il sincronismo, se perdo il sincronismo non ho più modo di recuperarlo. Pro e Contro. I cifrari a flusso si prestano meglio per un implementazione molto efficiente in hardware, mentre i cifrari a blocco per realizzazioni software perché le architetture software funzionano per lo più con blocchi di dati di lunghezza fissa. LEZ /10 Cifrari a Blocco e a Flusso (parte1) L esempio storicamente più significativo di cifrario a blocco è il DES (Data Encryption Standard) nato negli anni 70, il cosiddetto Cifrario di Feistel. Cosa deve fare un cifrario come obbiettivo ultimo, approssimare o al limite ottenere segretezza perfetta nel senso introdotto da Shannon. Come si fa in pratica questo? 1) introducendo trasformazioni non lineari e di sostituzione che creino relazioni complesse tra chiavi e testo cifrato, 2) distruggendo la struttura statistica del teso in chiaro in ingresso attraverso permutazioni. Tutto ciò però va fatto utilizzando operazioni base molto semplici da realizzare, eventualmente ripetendole. Come idea base si definisce un singolo blocco di istruzioni che si chiama Round e poi applichiamo al testo in chiaro che entra, e successivamente ai testi via via elaborati, ripetutamente il medesimo round. Il round altro non è che un insieme di sostituzioni e permutazioni. L applicazione di un singolo round non porta sicurezza, ma l applicazione ripetuta di più round porterà ad un cifrario sicuro, mantenendo però semplice la struttura del singolo round. Feistel si è limitato a fare un loop base: in ingresso si ha una stringa binaria che rappresenta un blocco (stiamo parlando di un cifrario a blocco) il blocco viene diviso in due parti uguali, la metà sinistra contiene i bit più significativi, la metà destra quelli meno significativi. Al passo i-mo (trasformazione della stringa i-1 nella stringa i) la parte R i-1 viene manda così com è al passo successivo come parte L i, mentre la parte L i-1 viene mandata in XOR con il risultato di una trasformazione, parametrizzata dalla chiave K i, della parte destra R i-1. In questo singolo passo si evince la presenza della permutazione, della trasformazione e dell influenza della chiave. Una trasformazione così (singolo round) di per sé non può fare da cifrario perché ci sono almeno n/2 bit in chiaro privi di trasformazione, cosa risolvibile infatti applicando ripetutamente il round. Ci si accorge poi che la trasformazione F può non essere invertibile, in più la stessa struttura utilizzata per cifrare, può essere utilizzata per decifrare, a patto però di mettere in ingresso correttamente la sequenza del ciphertext. Tipicamente le K i sono stringhe di chiave di 64/128 bit e il pedice i suggerisce che ogni round cambiano. Questo schema di Feistel prevede la presenza di un altro algoritmo di generazione delle sottochiavi (Subkeys) K i a partire dalla chiave K. Quest algoritmo collaterale si chiama Keyschedule, che non è indispensabile in un cifrario a blocchi. In fase di decifratura lo schema utilizzato è lo stesso basta invertire l ordine di inserimento delle chiavi, al round 0 andrà inserita la sottochiave K M. Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 15

16 DES (Data Encryption Standard). È un cifrario a blocco che utilizza blocchi di 64 bit, dimensione scelta per mantenere limitata la complessità del singolo blocco, e per le architetture di calcolo disponibili. La chiave è lunga 56 bit, in realtà è lunga 64 bit, ma ogni byte ho un bit di parità quindi i bit utili della chiave sono 56. L unica vera debolezza del DES è dovuta alla scelta della chiave troppo corta, infatti ciò che rompe il DES è proprio l attacco a forza bruta divenuto oggigiorno possibile per i 56 bit della sua chiave. Lo schema del DES prevede una trasformazione iniziale, poi successivi 16 round accanto ai quali c è il Keyschedule che prende in ingresso i 64 bit di chiave, che sono in realtà 56, dai quali produce poi via via i 48 bit di sottochiave. Come viene fatto in dettaglio tutto questo. Entra il testo in chiaro, per prima cosa viene fatta una permutazione iniziale IP Initial Permutation che prende i 64 bit e li rimescola secondo una corrispondenza biunivoca definita nello standard. Dopodiché divido i 64 bit in 32 MSB e 32 LSB e comincio il giro nel Feistel loop. Il blocco che realizza la funzione f ha come input i 32 bit meno significativi del plaintext, più i 48 bit della sottochiave. Prima di tutto si esegue una funzione di espansione (E) dei 32 bit in 48, riscrivendo la metà dei bit due volte, risultando una sorta di permutazione e ripetizione. Questi bit vengono messi in XOR con la sottochiave (miscelamento con l info segreta) ed in uscita ritroviamo 48 bit che vengono divisi in 8 blocchi da 6 bit ciascuno dei quali, individuando 2 6 =64 alternative, indirizza una tabellina a 64 posizioni, una Look up table. In ognuna delle quali (64 posizioni) c è scritto un numero da 0 e 15 rappresentato da 4 bit. In uscita da ogni S-box ottengo quindi 4 bit, che complessivamente sono 32; successivamente li permuto, e quello che esce sono i 32 bit in uscita dalla funzione. È semplice notare come la funzione esegua al suo interno delle operazioni elementari come permutazioni e trasformazioni non lineari, come ci aspettavamo. Le S-box rappresentano 8 funzioni differenti, e i valori che contengono rappresentano proprio i valori delle funzioni. Esse sono state scelte e pubblicate con lo standard, quello che non è stato mai pubblicato sono i criteri con i quali sono state scelte. Il keyschedule funziona in questo modo, arriva la chiave a 56 bit che viene divisa in 28 bit e 28 bit, entrambi subiscono uno shift circolare (chiuso) a sinistra, successivamente subiscono una compressione e Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 16

17 permutazione, cioè vengono cambiati di ordine e ne escono solo 48 dei 56, infine le due metà costituiscono l input del successivo stadio. Come si fa a misurare la bontà di un cifrario? Secondo Shannon un cifrario dovrebbe essere deterministico ed invertibile, tale che prendendo in ingresso un testo in chiaro con una data chiave, restituisca in uscita una risposta che appare come casuale; osservando in pratica il testo in chiaro e quello cifrato, il tutto deve apparire come un generatore di stringhe casuali, non deve esserci nessun nesso tra in due testi. Un modo per vedere quanto ci si avvicini a ciò è prendere una stringa di bit e cifrarla, poi prendere la medesima stringa, cambiarne un solo bit e cifrarla di nuovo, e vedere quanti bit del testo cifrato sono cambiati. Ripetendo questo test su tanti testi in chiaro, in media un buon cifrario dovrebbe cambiare la metà dei bit; se cambiano tutti è un male poiché si ha correlazione tra le stringhe del ciphertext. La macchina cifrante DES comunque è utilizzabile, in che modo: 56 bit di chiave sono troppo pochi, ok, allora bisogna aumentare la chiave, come si fa? Lo utilizzo più volte il DES. Prendo il testo in chiaro, lo cifro con il DES, l uscita la cifro di nuovo col DES, e se uso, per queste due cifranti in cascata, chiavi diverse, da 56 bit passo a 112 bit che sono validi oggigiorno. Quello che è stato definito è il cosiddetto Triple DES Che tipicamente viene usato nella configurazione EDE (Encryption Decryption Encryption), che risulta compatibile all indietro con chi usa il DES semplice. Infatti usando la configurazione EDE come illustrato sopra con le relative chiavi K 1 K 2, la chiave risultante sarà una chiave a 112 bit, per la quale non sono stati trovati attacchi pratici di natura cripto analitica, l unico attacco che rimane è l attacco a Forza Bruta che però risulta inefficace per una chiave a 112 bit. Comunicando con uno che usa solo il DES semplice, per essere compatibile basta mettere K 2=K 1, in questo modo cosa succede: cifro con K 1, decifro con K 1 quindi non ho fatto niente, infine cifro con K 1 quindi riesco a parlare anche con uno che abbia soltanto il DES semplice. Perché il Triple DES e non il Double DES? C è un problema di base, se uno usa il DES due volte, ma in generale se si usa qualsiasi cifrario due volte, non migliora la sicurezza contro un attacco a forza bruta rispetto ad usarlo una volta sola. Nel caso del DES ad esempio se la complessità dell attacco è 2 56 passi nel caso semplice, nel caso di un doppio DES diventa 2 57 si può pensare infatti ad un attacco definito Meet in the middle. Tale attacco si basa sul fatto che se si fa una doppia cifratura con due chiavi K 1 K 2, chiamando x il risultato intermedio, l attacco parte ovviamente dalla conoscenza di un plaintext e di un ciphertext. Io so che X = EK1[P] = DK2[C], cioè il risultato intermedio è uguale alla cifratura di P con chiave K 1 e alla decifratura di C con chiave K 2. Provo ordinatamente tutte le chiavi e le ordino rispetto ad x in una tabella che avrà dimensioni di 2 56, sia per K 1 che per K 2, confrontando le due tabelle poi troverò un elemento comune che corrisponderà ai due valori delle chiavi che ha generato quella coppia di testo in chiaro e testo cifrato. LEZ /10 Cifrari a Blocco e a Flusso (parte2 AES, Blowfish) Nel corso degli anni 90 quindi, giunti alla soluzione della inadeguatezza del DES, si è aperta la questione di definire nuovi algoritmi crittografici. Il NIST nel 1997 ha promosso lo sviluppo di un nuovo standard, promuovendo un bando di gara pubblico internazionale in cui si specificavano i criteri richiesti per questo nuovo standard, l AES (Advanced Encryption Standard). I criteri presi in esame sono abbastanza ovvi: Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 17

18 - Sicurezza - Costo (nel senso della complessità dell algoritmo) - Caratteristiche delle implementazioni sw (per esempio resistenza ad attacchi collaterali) Successivamente ne sono stati esposti altri più raffinati, quali: - Resistenza ad attacchi collaterali - Facilità di implementazione sia in hw che in sw - Capacità di adattarsi ad ambienti con limitate risorse di calcolo (SmartCard) - Flessibilità parametrica (possibilità di modificare i bit di chiave) Uno dei 5 finalisti di questo bando di gara fu il progetto Belga Rijndael, il cui cifrario AES aveva le seguenti caratteristiche. The AES Cipher Rijndael. Innanzitutto oltre ad avere una struttura molto elegante dal punto di vista matematico, prevedeva dettagli come la possibilità di implementazione su processori a 8 bit e a 32 bit. Lo standard prevede che la dimensione della chiave possa essere o 256 bit, e corrispondentemente il Plaintext Block Size è sempre fisso a 128 bit, mentre cambia il numero di round. Cambiare il numero di round vuol dire cambiare un parametro, ma non mi aumenta di molto la complessità hw o sw. Analizzando la versione con chiave a 128 bit, il numero di round è pari a 10, come funziona l algoritmo. In ogni round viene modificato lo stato, quindi l algoritmo è basato sull evoluzione dello stato interno, il blocco, che è composto da 128 bit, precisamente 4 parole da 32 bit. Inizialmente lo stato interno è inizializzato con il blocco di plaintext, ad ogni round questo blocco viene modificato, fino all ultimo round che diviene il blocco di 128 bit di testo cifrato. Ad ogni round vengono eseguite 4 operazioni: - Sostituzione non lineare byte per byte (SubBytes) - Permutazione dei byte (ShiftRows) - Ricombinazione lineare dei byte (MixColumns) - Aggiunta della chiave (XOR byte per byte con i byte della chiave) (AddRoundKey) La logica di funzionamento è la seguente: preso lo stato, composto da 128 bit, 16 byte, rappresentato da una matrice 4x4 Ogni colonna è una parola a 32 bit, e lo stato è visto come la composizione di 4 colonne. La chiave, in questo caso di 128 bit, anch essa rappresentata da 4 colonne da 32 bit viene mandata in ingresso ad un keyschedule, un algoritmo che parallelamente all esecuzione dei round, produce, a partire dai 128 bit di chiave, le 44 sottochiavi utilizzate nei vari round. Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 18

19 Lo schema di funzionamento è il seguente: entrano i 16 byte di testo in chiaro, la prima cosa che si fa, si aggiunge la chiave (XOR byte a byte, consumo le prime 4 colonne delle 44), successivamente eseguo la sequenza dei 10 round tutti uguali tranne l ultimo, per ognuno dei quali eseguo le 4 operazioni sopraelencate, tranne nell ultimo in cui non viene eseguita la MixColumns. Dopodiché la decifratura avviene nel seguente modo: lo schema di decifratura è lo stesso, solo che in ogni scatoletta compare la funzione inversa alla precedente (l inversa della xor è la xor) quello che succede in AES è che dal punto di vista realizzativo, gli algoritmi che realizzano le funzioni inverse non sono gli stessi delle funzioni originarie come accadeva nel DES in cui bastava invertire l inserimento delle subkeys ma l algoritmo era lo stesso. Analizziamo la struttura di un singolo round. È facile notare che l unità base di AES è il byte, a differenza del DES in cui venivano effettuate operazioni anche sui singoli bit. Questo perché AES è software oriented e a livello sw il byte è gestibile in maniera più comoda del bit. Un altra cosa che si nota è la parallelizzazione delle operazioni che velocizzano il processo. In figura viene mostrato il modo in cui agiscono le singole operazioni sopra descritte: Sostituzione dei byte, permutazione, ricombinazione lineare, somma modulo due dei byte della sub key. Come avviene la byte substitution SubByte: si basa su un unica S-box di 256 elementi (16x16) che contiene la permutazione dei 256 possibili valori assunti da un byte, cioè dei numeri interi tra 0 e 255 rappresentati in esadecimale. La S-box mappa un byte in ingresso in uno d uscita, i primi 4 bit del byte in ingresso rappresentano la riga, i restanti 4 la colonna, il valore corrispondente Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 19

20 rappresenta il byte di uscita. L inversa della S-box è ovviamente la seguente: ovviamente conoscendo la funzione iniziale la sua inversa si può ottenere manualmente. Quella iniziale invece è stata ottenuta tramite una costruzione algebrica denominata algebra GF(2 8 ). Continuando con la descrizione delle operazione eseguite, lo ShiftRow è implementato semplicemente così, la prima riga non è shiftata, la seconda è shiftata circolarmente a sinistra di una posizione, la terza di due e l ultima di tre. La funzione inversa è semplicemente uno shift circolare a destra delle stesse posizioni. Quest operazione, apparentemente semplice, unita alla MixColumns rimescola di molto i byte iniziali. La MixColumns si potrebbe definire in modo tabellare, dimenticandosi dell algebra, in questo modo In cui la matrice composta da 16 byte [s 0,0 s 3.3], che rappresenta lo stato in ingresso, viene moltiplicata a sinistra per un altra matrice di byte esadecimali, facendo proprio il prodotto matriciale, con l accortezza che le somme vanno sostituite con la somma modulo 2; la matrice che esce [s 0,0 s 3.3] è l uscita della funzione. La funzione di aggiunta della chiave infine, non ha bisogno di ulteriori commenti, è semplicemente la somma modulo 2 byte a byte con i byte delle subkeys. È interessante invece vedere come avviene il keyscheduling: osservando la figura a lato ad esempio, w 4 si ottiene come xor tra w 0 e una trasformazione non lineare di w 3, le parole sono di 32 bit, ad esempio w 0 è tutta la prima colonna. Nella g c è dentro una funzione che fa permutazione, in particolare fa rotazione, e poi c è una funzione di sostituzione basata su s-box. Vediamo ora come è possibile implementare efficientemente AES su un architettura a 8-bit come quella delle smartcard. Innanzitutto va osservato che le operazioni del singolo round come SubByte, la ShiftRow e la AddRoundKey, sono tutte operazioni che si applicano al singolo byte, quindi sono facilmente adattabili ad un processore ad 8 bit, meno intuitiva è invece la MixColumns, ma viene fatto in questo modo. Definisco una tabella di 256 elementi, costo di memoria 256 byte, che posso calcolare offline, e che chiamo X2[i]=[02]*i con i=[00],,[ff], prendo poi una variabile temporale Tmp = s 0,j + s 1,j + s 2,j+ s 3,j (con + somma modulo 2). I valori del nuovo stato saranno calcolati come segue: in quanto Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 20

21 In questo modo l algoritmo di Rijndael può essere serializzato riducendo tutto a calcoli fatti su singoli byte, in più il tempo di calcolo di ogni byte del nuovo stato è sempre lo stesso, in quanto non dipende dagli operandi, e quindi questo sconfigge l attacco di Time Analysis. AES su un architettura a 32-bit Il tutto funziona meglio se si hanno CPU a 32 bit, che è il valore per cui è stato pensato AES. Il calcolo del round si riduce al calcolo di 4 tabelle di 256 parole, in tutto 4096 byte di memoria, che mi permettono di calcolare la colonna j-ima dello stato di uscita come dove la tabella T k(x) con k=0,1,2,3 x è un byte, contiene parole a 32 bit che si ottengono in questo modo: si prende il byte x lo si trasforma con la s-box ottenendo S(x), e poi se ne fa il prodotto con la colonna k- ima della matrice MixColumns data. In questo modo io ho fatto SubByte calcolando S(x), lo ShiftRow lo effettuo prendendo gli indici j-i delle varie s i (gli indici j sono calcolati mod4 cioè per j=0, j-1=4), la MixColumns me la sono calcolata nelle 4 tabelle, la AddRoundKey lo faccio sommando modulo 2 k j. Anche in questo caso il calcolo di ogni colonna del nuovo stato è indipendente dal valore della chiave e degli operandi, resta quindi sempre robusto contro un attacco di Time Analysis. Finora abbiamo visto come sia DES che AES usino la struttura round + keyschedule, vediamo ora un cifrario che non usa il keyschedule. Cifrario Blowfish. È un cifrario a blocchi di 64 bit, la chiave può avere un valore variabile da 1 e 14 parole di 32 bit, l algoritmo si basa su un contenuto di memoria non indifferente, esattamente su un array di 18 parole P 1...P 18 a 32 bit, e 4 s-box indirizzabili con 8 bit, quindi contengono 256x4 elementi, ognuno dei quali contiene una parola a 32 bit; quest algoritmo è ottimizzato per architetture a 32 bit. Le parole P e le 4 s-box sono le quantità che devono essere memorizzate per eseguire quest algoritmo, 1042 parole da 32 bit, quindi vengono richiesti 4168 byte. Anche la codifica di blowfish è organizzata a round, ogni round ha una struttura simile a quella di Feistel ma con lievi modifiche, i blocchi con sono blocchi XOR, il blocco del testo in chiaro a 64 bit viene diviso in due da 32 di cui una viene messa in xor con la prima parola P 1 e poi mandata in ingresso ad una funzione F non invertibile, l uscita viene messa in xor con la metà destra, e poi le due metà vengono scambiate. Cosa fa l algoritmo, a differenza di Feistel, per renderlo più robusto, la metà sinistra L i-1 invece di essere mandata così com è a destra, subisce una prima trasformazione con la parola P i creando R i; la metà sinistra in uscita L i è data da una trasformazione della metà destra R i tramite F, messa in xor con la metà destra R i-1, e ciò si ripete 16 volte. Si noti come quest algoritmo si basi completamente su due sole operazioni, somma modulo2 e somma modulo32, in quanto pensato per essere particolarmente veloce in esecuzione. La funzione F è fatta in questo modo, prende in ingresso 32 bit, 4 byte, e fa la seguente operazione: In tutto ciò dove si trova la chiave? La chiave si trova dentro le S e dentro le P. Esse vanno inizializzate con dei bit casuali, in realtà si prendono i primi 4168 byte della parte frazionaria di π (scritto in binario) e si caricano dentro P ed S, i byte di P vengono poi messi in xor con la chiave. Ovviamente se Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 21

22 ho una chiave a 128 bit devo ripeterla più volte per farne l xor con le 18 parole a 32 bit. Successivamente prendo una parola nulla (tutti zero) da 64 bit e la cifro, la parola in uscita divisa in , la metto in xor con P 1 e P 2, la stessa parola la ricifro (questa volta con P 1 e P 2 modificati) e ciò che ottengo lo metto in xor con P 3 e P 4 e così via finché non aggiorno tutte le P e le S. Facendo un conto, per inizializzare la cifrante, abbiamo bisogno di 521 esecuzioni del codice, 521 cifrature, ciò diviene fastidioso se si cambia spesso la chiave. Il lato positivo però è che se un attaccante deve provare diverse chiavi,per ogni chiave deve prima inizializzarla e poi provarla, la complessità computazionale di un attacco a forza bruta diventa enormemente elevata. LEZ /10 Cifrari a Blocco e a Flusso (parte2, RC4) / Modi operativi Vediamo ora un esempio di Cifrario a Flusso precisamente il Cifrario RC4, un cifrario molto diffuso e installato nella maggior parte delle piattaforme software (web SSL/TLS, Wi-Fi WEP). È un cifrario a flusso, orientato al byte, la cui logica di funzionamento è ispirata dal OneTimePad, in quanto produce un Keystream in byte (non è orientato al bit) e quindi una sequenza di byte che idealmente si presenta come una sequenza casuale, e in seguito non fa altro che mettere in xor i dati da cifrare con questa sequenza pseudo casuale. Pseudo poiché prodotta con meccanismo deterministico, e che può quindi essere riprodotta in ricezione per recuperare i testi in chiaro, a patto di essere in possesso dell informazione segreta: la chiave. La logica quindi è questa, imitare il OTP ma non con dei dati veramente random, altrimenti me ne servirebbero tanti quanti sono i byte del testo in chiaro che voglio mandare, ma dei dati pseudo random, generati cioè da una macchinetta che va inizializzata usando la chiave. Inizializzazione. Tutta l implementazione si basa su di un vettore di 256 byte chiamato S[i] il quale rappresenta lo stato del cifrario. In ogni dato istante in cui il cifrario agisce, questo vettore contiene una permutazione dei numeri interi compresi tra 0 e 255. Per inizializzare questa permutazione si scandisce questo vettore e alla componente i-ma si da il valor i, quindi da 0 a 255, e poi nel vettore temporaneo T[i] anch esso di 256 elementi che funge da variabile d appoggio, si carica dentro il byte di chiave. Keylen è una variabile intera che esprime il numero di byte di cui si compone la chiave, dall algoritmo si evince che questa cosa ha senso per chiavi di lunghezza compresa tra 1 e 256 byte. In pratica si prendono i byte di chiave e si scrivono in T[i] eventualmente ripetendoli se la chiave è più corta di T[i]. Dopodiché cosa si fa, si introduce un indice j che mi permette di introdurre la chiave in S[i], permutando infine le sue componenti con un operazione di swap, da notare che il particolare tipo di permutazione dipende dalla chiave, poiché è presente T[i]. Cifratura. La cifratura è elementare, è fatta come il OTP, un byte di testo cifrato si ottiene dal corrispondente byte i testo in chiaro, facendo l xor di questo byte con S[t], cioè con una componente, la t-ima del vettore S. Decifratura. Per recuperare il testo in chiaro, facendo semplicemente l xor del testo cifrato con la stessa componente. S[t] come si trova, è la componente del vettore S[i] allo stato t. È importante fare lo swap(s[i], S[j]) perché altrimenti potrei ottenere due valori uguali di t, e se dovessi mandare di nuovo lo stesso byte, introdurrei una regolarità nella cifratura. Riguardo la sicurezza di questo cifrario, sono noti problemi riguardanti i primi byte cifrati, i quali possono subire attacchi di natura statistica, ma in effetti non è stato pubblicato nessun attacco realmente vincente, stando attenti ovviamente ad evitare i primi byte di keystream. La cosa importante è non riusare mai la stessa chiave in presenza per esempio di una ritrasmissione. Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 22

23 Ritornando ora ai cifrari a blocco, mi chiedo: come faccio a cifrare un testo di lunghezza qualsiasi, che non sia proprio lungo quanto un blocco? Con i cosiddetti modi operativi. Modi Operativi. Nascono dal fatto che il plaintext può avere lunghezza qualsiasi, potrebbe anche essere più corto del blocco. La soluzione più banale consiste nel prendere i dati e segmentarli con una lunghezza pari alla lunghezza del blocco, eventualmente aggiungendo qualcosa per far si che il testo passato in ingresso alla cifrante, abbia lunghezza che è multiplo intero della lunghezza del blocco. La porzione di bit non significativi aggiunti per il motivo sopra detto, si chiama Padding. Quindi la soluzione banale è, faccio Padding e poi segmento a blocchi, il modo in cui andrò poi a cifrare questi blocchi è definito dai Modi Operativi. Vi sono due tipi di Modi Operativi, Modi operativi a Blocco, Modi operativi a Flusso (attenzione: entrambi vengono usati per le cifranti a Blocco, le cifranti a Flusso non utilizzano Modi Operativi). Il Modo operativo a Blocco definisce una regola che permette di fare Padding e poi concatenazione della cifratura dei diversi blocchi così creati. Esso utilizza come funzione, che richiama per ogni blocco, la cifrante a Blocco. Il Modo operativo a Flusso è un algoritmo che, basandosi sulla cifrante a Blocco, produce un keystream, e dopodiché usa il keystream per cifrare i dati. Padding e Modi Operativi a Blocco. Non ci sono regole generali per effettuare il Padding, l importante è che si rispettino due criteri: che sia univocamente rimovibile in ricezione senza ambiguità, che non si lascino bit non definiti, perché andranno a costituire vulnerabilità. Un esempio di regola di Padding è la seguente: dato l lunghezza del messaggio, b è la dimensione del blocco base, se l mod b 0 (vuol dire che l non è multiplo di b) aggiungi il numero di byte nulli che serve a rendere l multiplo intero di b cioè, altrimenti non aggiungere nulla. Questo Padding funziona? No, perché non è univoco il Padding che ho aggiunto, non riesco a distinguere un messaggio che finisce con un byte nullo di per se, con un messaggio in cui io per Padding ho aggiunto un byte nullo. Questo ad esempio spiega perché il numero di byte di Padding che devo aggiungere è compreso tra 1 e b, non 0 e b-1, perché uno almeno bisogna metterlo per forza, se è già multiplo di 16 byte ad esempio, è una sfiga, perché bisogna aggiungerne altri 16 per rendere univocamente rimovibile il Padding. Una regola per esempio potrebbe essere questa: prendi il pacchetto, aggiungi un byte fatto così , un 1 e tutti 0, se il pacchetto così ottenuto (pacchetto originale più byte come prima) è multiplo intero di b ok, altrimenti aggiungi tanti byte nulli quanti ne servono per rendere il tutto multiplo intero di b. La regola, semplice, di rimozione di questo Padding in ricezione consiste nel rimuovere, dal fondo, tutti gli zeri, quando trovi un 1 rimuovi anche quello e ciò che ottieni è il pacchetto originale. Chiarito il funzionamento del Padding, possiamo assumere nella cifratura a Blocchi che il nostro messaggio sarà composto da K blocchi di plaintext P i, i=1 k, tutti di lunghezza uguale al singolo blocco. Electronic Code Book (ECB). La cifratura più brutale mi dice che io ho una macchinetta che dato un blocco, me lo sa cifrare data una certa chiave, se ho K blocchi la applico K volte: questo si chiama Electronic Code Book. Questo modo operativo non è buono poiché facilmente può lasciar trasparire qualcosa dei dati, in particolare se due blocchi del testo in chiaro si ripetono, i corrispondenti blocchi del ciphertext saranno identici. Un immediata evoluzione di questo è allora il Cipher Block Chaining (CBC). Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 23

24 È sempre un modo operativo a blocco che necessita quindi di Padding, ma ha una struttura differente, concatenata. Ogni singolo blocco è pari all ECB, ma prima di cifrare un blocco, lo si mette in xor con il blocco ciphertxt precedente. In ricezione decifro il blocco C i e poi lo metto in xor con il blocco C i-1. Sia in cifratura che in decifratura ho bisogno quindi di questo blocco C i-1 che chiameremo Initial Vector (IV). Questo modo operativo risolve il problema dell ECB in quanto se due blocchi in ingresso dovessero essere uguali, le corrispondenti uscite non sono uguali perché gli ingressi della macchina cifrante, a parità di plaintext, non sono gli stessi. A differenza dell ECB ovviamente il CBC è soggetto all Error Propagation, cosa facilmente intuibile. Initial Vector (IV). Se scelgo un IV fisso, avrei lo stesso IV e la stessa chiave per due messaggi differenti, che però con buona probabilità possono iniziare allo stesso modo per via delle intestazioni. Avrei quindi i due primi blocchi del testo cifrato dei due messaggi, uguali, e questo mi porterebbe ad una perdita di informazione -> Information Leakage. Sappiamo inoltre che nel Keystream se io uso la stessa chiave per messaggi diversi produco lo stesso Keystream e questo non va bene. In questo caso ciò che produce lo stesso testo cifrato, a parità di testo in chiaro, non è solo la chiave, ma la coppia (IV,chiave), quindi quello che è importante è non ripetere mai la coppia (IV,chiave), uno dei due deve essere cambiato. Provando a cambiare IV, potrei prendere un contatore, IV=0 per il primo messaggio, IV=1 per il secondo, e così via, questa cosa però non va bene perché se i messaggi dovessero cambiare di poco, cambiando di poco anche l IV avrei una correlazione evidente. Potrei crearlo randomico, ma a fronte di k blocchi da cifrare, io ne devo mandare k+1 poiché devo aggiungere C 0 che è l IV, che il destinatario non lo conosce in quanto random. Ho creato overhead, che è tanto più grande quanto più è piccolo k, in più ho bisogno di una sorgente di numeri casuali affidabile crittograficamente, non sempre disponibile. La soluzione risiede nell uso dei cosiddetti Nonce (Number used ONCE), cioè un numero che viene usato una sola volta, nel contesto di interesse del protocollo crittografico che lo usa. Per esempio un numero casuale a 128 bit si può ritenere lecitamente che sia un Nonce, se la sorgente casuale che lo genera è veramente casuale. Può andar bene anche un contatore ciclico a 128 bit, purché si debbano contare una quantità di cose inferiore a Per usare il Nonce su un blocco di 128 bit allora, posso definire sufficientemente un contatore ciclico a 64 bit, dopodiché uso la mia cifrante con la chiave nota e cifro il Nonce, ovviamente dopo aver fatto Padding (poiché il blocco è 128 bit mentre il Nonce è 64 bit), questo blocco di dati cifrati lo uso come IV, e poi cifro il mio messaggio in modalità CBC. Al destinatario dovrò dare il Nonce e C 1.k ma non C 0 che potrà ricavarsi avendo il Nonce e la chiave della cifrante. In questo modo per cifrare diversi messaggi, lascio fissa la chiave che è oneroso cambiare, ma cambio l IV C 0, cosa che ottengo cambiando il Nonce. Modi Operativi a Flusso. Il punto di partenza è sempre la cifrante a Blocco, altrimenti non avrei bisogno di modi operativi, che però questa volta userò per produrre keystream che puoi userò per cifrare i dati. Output FeedBack (OFB). Un possibile modo operativo a flusso è l Output FeedBack (OFB) che fa la seguente cosa: parte da un vettore iniziale IV su cui valgono tutte le considerazioni fatte prima, e poi applica iterativamente queste equazioni, dove K è la chiave, quindi genera una sequenza di blocchi, e questo può essere fatto anche offline, prima della cifratura. Successivamente mette in xor il keystream ottenuto con i byte del testo in chiaro, quindi Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 24

25 fornirò al destinatario i C i k più l IV o qualche altra informazione tramite la quale ricavare l IV. Questo è un cifrante a flusso di tipo Sincrono, quindi se perdo il passo in ricezione non capisco più niente. Ma se la cifrante è buona in questo modo abbiamo quella che possiamo ritenere un approssimazione pratica ma efficace del OTP. Cipher FeedBack (CFB). È un modo operativo a flusso auto sincronizzante, che non richiede cioè sincronizzazione, e la cui equazione base funziona in questo modo, si prende il blocco i-mo e lo si mette in xor con dei byte di keystream ottenuti cifrando, con la chiave segreta K, il precedente blocco di ciphertext. Ovviamente come tutti i modi operativi si parte da un vettore iniziale con tutte le considerazioni fatte prima. Counter Mode (CTR). Un modo operativo interessante che è a flusso ma non richiede inizializzazione è il cosiddetto Counter Mode. Secondo questo modo operativo si produce il keystream, poi una volta prodotto il keystream, il testo cifrato si produce così Anche in questo caso sono stati indicati con k i blocchi di testo in chiaro, ma non c è nessun motivo di fare Padding del testo in chiaro, perché questo è un modo operativo a flusso, quindi come tale prendo il messaggio, lo metto in xor con i byte del keystream necessari, quelli che ho prodotto in più li butto via. Il keystream in questo caso viene prodotto facendo cifratura, con la chiave segreta assegnata, di una quantità che è la concatenazione ( ) di un Nonce e di un contatore i. Supponiamo per la cifrante AES a 128 bit (posso formare i 128 bit con un contatore a 64 bit), un Nonce a 48 bit più altri 16 bit tutti nulli o per altri scopi. Il blocco i-mo si ottiene incrementando i, poi in tutti i blocchi di uno stesso messaggio c è sempre lo stesso Nonce. In ricezione per permettere la ricostruzione è sufficiente comunicare il Nonce, poiché la chiave è nota. Il vantaggio è che questo consente eventualmente un esecuzione in parallelo cosa non permessa dal CBC in cui la decifratura è solo sequenziale, inoltre permette quello che si chiama Random Access del testo, se voglio decifrare solo il 16 blocco di testo in chiaro, posso farlo senza decifrare i precedenti, cosa non fattibile negli altri modi operativi. La cosa importante è che non si ripeta la stringa concatenata, quindi se n sono i bit del contatore, deve essere 2 n >k. Problemi dei modi operativi. Il modo operativo è un qualcosa che usa quel blocchetto che è la cifrante, quindi la sua sicurezza è strettamente legata alla sicurezza della cifrante, di per sé non aumenterà la sicurezza, ma può solo diminuirla. In più anche se la cifrante di per sé è robusta, modi operativi diversi possono introdurre vulnerabilità. Ciò che và sottolineato è che a prescindere dalla cifrante a blocco o a flusso che si sta usando, a prescindere dal modo operativo implementato, comunque la cifratura serve a fornire un servizio di confidenzialità, cioè celare il contenuto dei dati a terze parti non autorizzate; non serve in nessun modo ad impedire che l attaccante manipoli i dati. Cifrare non vuol dire impedire la manipolazione dei dati. LEZ /10 Hash Hash Crittografico. È una di quelle funzioni largamente utilizzate in crittografia, in particolare vengono utilizzate in due moduli, quelli che producono MAC (Message Authentication Code) e quelli che producono Firme, ma non soltanto per questi. L idea di base dell Hash è quella di realizzare una sorta di impronta di un Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 25

26 messaggio, in questo caso di un blocco di dati di lunghezza arbitraria. Si usa il termine impronta in quanto come vedremo, messaggi diversi possono avere lo stesso hash, quindi non c è corrispondenza biunivoca. L hash si può fare anche dipendente da un parametro che poi dopo assume il significato di chiave, se si usano hash privi di chiave, bisogna prevedere che dopo l hash venga memorizzato in modo sicuro. Se per esempio ritengo insicuro il disco del PC, ma ritengo sicura la memoria USB che mi porto sempre dietro, posso memorizzare l hash di tutti i file critici che ho sul PC nella memoria USB, dopodiché ogni giorno prima di aprire il file sul PC ci si ricalcola l hash di quel file e lo si confronta con quello in memoria USB, se sono diversi reputo che il file sia stato modificato. L attacco classico è quello di modificare il file in maniera tale che l hash poi risulta lo stesso, e lo scopo dell hash Crittografico è proprio quello di evitare che ciò avvenga. La funzione Hash dipende da un quadrupla (X,Y,K,H) di insiemi: - X: insieme di possibili messaggi di ingresso (potenzialmente infinito). - Y: insieme finito dei possibili valori di Hash (gli hash sono lunghi normalmente tra 128 e 512 bit). - K: insieme delle chiavi, eventualmente ridotto ad un solo elemento se la funzione hash è senza chiave. Dopodiché per ogni k Є K esiste un h k Є H t.c. h k: X Y è un mapping da X a Y, cioè una funzione definita in X che produce per ogni messaggio di X un valore in Y, funzione che però non è biunivoca. Dal punto di vista crittografico, ciò che interessa è costruire funzioni hash che rendano infattibili computazionalmente i seguenti problemi: premessa: Dare y vuol dire dare un sottoinsieme di x poiché più messaggi possono avere lo stesso hash, quindi l insieme X è partizionato in tanti sottoinsiemi, ognuno corrispondente a diversi valori di y, questo perché la funzione hash non è biunivoca, quindi a valori diversi di y corrispondono sottoinsiemi disgiunti in X. - Preimage (Pmg): data una funzione hash h k e dato un valore y, trovare un x t.c. h k(x)=y. - Second Preimage (SPmg): dato un y (quindi un sottoinsieme di X), una funzione hash h k e un valore x, trovare un altro x x appartenente allo stesso sottoinsieme, t.c. h k(x )= h k(x). - Collision(Cls): data una funzione hash h k, trovare due elementi distinti x, x t.c. h k(x )= h k(x). La funzione dell Hash Crittografico è quella di rendere la soluzione di questi problemi, computazionalmente impossibile. Per fare questo si introduce un modello di funzione Hash ideale: The Random Oracle Model. La definizione intuitiva di questo modello è che in sostanza l unico modo per calcolarsi h(x) è valutarla x per x, cioè indipendentemente da quante volte l ho già valutata, non c è nessun modo per calcolarsi h(x) se non nel punto x. Supponiamo che l hash si calcoli in questo modo: h(x) = a x mod m, cioè traducendo il messaggio x in un numero intero, avendo fissati a e m. conoscendo l hash su x io posso calcolare l hash di b x in questo modo: h(b x) = a b x mod m = b h(x) mod m, cioè posso calcolare l hash (h(b x)) senza conoscere la sua espressione diretta, ma semplicemente con delle operazioni che coinvolgono altri valori di hash (h(x)), e questo non corrisponde al modello di una funzione di hash ideale. Data la definizione intuitiva, formalmente si dice che l unico modo per conoscere l hash di x è interrogare l oracolo, il quale fa la seguente cosa: nell insieme di tutte le funzioni hash possibili che mappano x in y, ne sceglie una a caso, poi prende x calcola h(x) e restituisce y. Come se esistesse una enorme tabella che a fronte di un valore di x restituisce un y, e la tabella è stata compilata a caso, quindi non c è nessuna regola matematica per calcolare h(x) se non interrogando la tabella. La proprietà fondamentale che caratterizza un oracolo random è questa: Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 26

27 cioè, supponiamo di conoscere gli h(x) per tutti gli x appartenenti ad un certo sottoinsieme, la probabilità che, per un determinato valore di x non appartenente ad X 0,, è pari ad 1/M, dove M è la cardinalità dell insieme Y. Cioè per quanti valori io conosca e abbia già appreso su h(x), il prossimo valore è un valore random, e quindi ogni valore y è equiprobabile. Il valore di M sarà pari a 2 n se n è la lunghezza in bit dell hash, e poiché l hash è in genere lungo dai 128 ai 512 bit, questa probabilità sarà molto piccola. Bisogna capire perché l hash è così grande. Poiché l hash è il mattone base per poter realizzare ad esempio le firme, vuol dire che se l hash è lungo 512 bit, come minimo la firma sarà lunga 512 bit se non di più, e siccome a volte è necessario firmare documenti lunghi poche decine di byte, avere una firma di 512 bit non è comodo. Algoritmi Randomizzati (per la soluzione dei problemi relativi agli hash). In genere un algoritmo è una sequenza di passi che si esegue per portare a termine un calcolo; gli algoritmi randomizzati, sono algoritmi nel corso dei quali alcune variabili utilizzano valori casuali per fare delle scelte nell algoritmo. Algoritmo di Las Vegas: può fallire nel dare una risposta (non sa rispondere) ma se risponde, sicuramente è la risposta giusta. È randomizzato nel senso che c è una certa probabilità che fallisca, che non sa rispondere, ma se risponde, la risposta è quella giusta. Si può parlare allora di Probabilità di successo nel caso peggiore Worst case e media Average. Worste-case success Probability ε: per qualsiasi istanza del problema, cioè comunque scegliamo i dati di input e i parametri, la probabilità di successo è almeno ε. Average-case success Probability ε: mediando su tutte le possibili istanze del problema, la probabilità di successo è maggiore o uguale a ε. Nel nostro caso un algoritmo di Las Vegas (ε,q) avrà una probabilità nel caso peggiore o media ε, con una complessità (numero di interrogazioni dell oracolo) pari a q. Gli algoritmi che vedremo sono l equivalente dell attacco a forza bruta, e nel caso di Hash ideale rappresentano l unico modo per risolvere i tre problemi di cui abbiamo parlato prima. Oracle model agorithm for Pmg: FINDPREIMAGE(h,y,q). Per un hash ideale, la soluzione del problema Preimage è la seguente: si sceglie a caso un sottoinsieme X 0 di X composto da q elementi; q è la complessità che mi sto dando, cioè il numero delle volte che devo calcolare l hash. Dopodiché per ogni valore di x calcolo h(x) se l ho trovata bene, ho trovato la contro immagine, restituisci x altrimenti fallimento. La probabilità di successo media è: dove algoritmo deve essere è la probabilità di fallire su tutte le istanze del problema. Per essere un buon rendere M grande, di modo che per rendere la quantità valutazione della funzione hash infattibile., per fare ciò devo agire sull M, devo fare l hash abbastanza lungo da l attaccante dovrebbe fare un numero di La probabilità di successo media è: Oracle model agorithm for SPmg: FINDSECONDPREIMAGE(h,x,q). Dato x e h, mi calcolo y, prendo il sottoinsieme X 0 di q-1 elementi e li provo tutti per vedere se ce ne è uno che da lo stesso valore di y cioè una SecondPreimage Oracle model agorithm for Cls: FINDSECOLLISION(h,q). Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 27

28 Data la funzione h e la complessità q, scelgo a caso un sottoinsieme di dimensione q, calcolo l hash per tutti i valori di e vado a cercare se trovo per caso due valori x e x tali per cui y x=y x e se questo esiste per qualche x x. Se questo è vero restituisce la coppia x e x che mi creano collisione, cioè messaggi distinti che hanno lo stesso hash. La probabilità di successo media è: ε= 1 (1 1/M) (1 2/M) [1 (q 1)/M]. Il valore di q che rende ε>1/2 (successo dell attaccante) è q=1.17 M 1/2. Se io prendo un hash lungo 64 bit, M=2 64, q=2 32 che è un numero di valutazioni fattibilissimo. Una funzione hash è una funzione che prende qualunque testo in ingresso di lunghezza qualsiasi e lo vuol mappare su un insieme a M bit, l hash. Ci sono poi le funzioni di Compressione, che prendono stringhe di (m+t) bit e le mappano su stringhe di m bit. È possibile allora realizzare una funzione hash sicura, partendo da una funzione di Compressione? Un po come per i cifrari in cui si prende un algoritmo più o meno semplice (round) e poi lo si ripete più volte, allo stesso modo per una funzione hash si può prendere una funzione un po più semplice come la funzione di compressione, e iterarla più volte. In generale allora un hash può essere pensato come una fase di Preprocessing una fase di Iterative Processing calcolo iterativo, e poi un Output Transformation finale. Ci sono due studiosi, Merkle-Damgard, che hanno dimostrato che costruire un hash con la struttura iterativa che vedremo adesso, non è limitante, cioè è possibile costruire hash iterativi resistenti alla collisione, quindi sicuri. Com è fatto allora in generale un hash iterativo, prendo un messaggio x di lunghezza qualsiasi, che sia x m+t+1, se fosse lungo quanto m+t basterebbe la funzione di compressione. Per prima cosa vi applico il Padding, o comunque lo estendo in maniera tale che la sua lunghezza sia un multiplo intero di t bit, ottenendo così la stringa Y che poi partiziono in L blocchetti Y = Y 0 Y 2 Y L-1, ognuno di dimensione t bit, ovviamente dovrà essere L t lenght(x). Questo è il passo di Preprocessing. Successivamente il cuore dell algoritmo consiste nel prendere la funzione di compressione la quale prende in ingresso m+t bit e ne restituisce m bit; gli m+t bit che prende in ingresso sono costituiti da una variabile di stato CV i-1 concatenati al blocchetto i-mo di t bit che ho creato prima. In seguito questi m bit in uscita dalla funzione di compressione, rappresentano la variabile di stato del prossimo calcolo, questo per 1<i<L. Anche in questo caso, come nel CBC, ho bisogno di un IV Initialization Vector CV 0 che va dato. Alla fine quando ho esaurito tutti i blocchetti del messaggio, otterrò uno CV L che trasformo per ottenere il valore dell hash finale. Quello che ci chiediamo ora è se questa struttura introduca o no delle vulnerabilità, la risposta è si e no. No, nel senso che Merkle-Damgard hanno dimostrato che è possibile avere una struttura iterativa probabilmente sicura, nel senso che un hash ottenuto in questo modo è resistente alla collisione se lo è la funzione di compressione. Quindi il problema è ridotto a trovare una funzione di compressione che sia resistente alla collisione, che in ultima analisi abbiamo visto significa scegliere m abbastanza grande. La risposta è anche si, poiché vi sono degli attacchi che dipendono da questa struttura iterativa, a seconda poi del modo particolare in cui la funzione hash è usata per calcolare gli autenticatori (MAC). Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 28

29 Provably Secure Hash Functions. Le funzioni hash in pratica sono definite da standard, i più utilizzati sono MD5 (Message Digest (riassumere)) che produce un hash a 128 bit, e SHA-1 (Secure Hash Algorithm) con le varianti più recenti SHA-256, 348, 512 riferite alla lunghezza degli hash in uscita. La complessità, ammesso che SHA non permetta attacchi se non quello a forza bruta, cosa per altro vera per ora, è pari a 2 #bit/2 ad esempio per SHA-1 che produce 160 bit la complessità è pari a SHA-1: nato per estendere la sicurezza di MD5, si applica a stringhe binarie di lunghezza inferiore a 2 64 bit, il suo blocco di uscita è 160 bit, è realizzato in questo modo e si basa su una funzione di compressione con un blocco interno di 512 bit. Il messaggio x si estende aggiungendovi un bit uguale ad 1, un certo numero di d bit nulli, e poi 64 bit che contengono dentro la rappresentazione binaria della lunghezza in bit di x, siccome x può essere lungo 2 64, servono 64 bit per dire quant è lungo x. (447=512-w-1). L algoritmo utilizzato da SHA è il seguente: Si prende il testo e lo si divide in blocchi M 1 M 2 M n, lunghi 512 bit cioè 16 parole W 0 15 da 32 bit, e per i=1:n si esegue l algoritmo utilizzando la variabile di stato H 0, H 1, H 2, H 3, H 4, che sono 5 parole da 32 bit (quindi 160 bit) esadecimali, che vengono inizializzate come mostrato su. Quello che si tenta di fare è un gran mescolamento unito ad una serie di operazioni elementari come xor e shift a sinistra. LEZ /10 MAC MAC (Message Authentication Code). Abbiamo visto come gli Hash vengono utilizzate in molte applicazioni crittografiche, una di queste è sicuramente il MAC (Message Authentication Code), un meccanismo che fornisce autenticazione del massaggio, ma serve anche a validare l integrità del messaggio, validare l identità di chi ha originato il messaggio, ed infine garantisce il servizio di Non Repudation. I primi due di questi servizi possono essere realizzati con una crittografia basata su chiavi condivise simmetriche, quando si parla di MAC realizzato con crittografia basata su chiave pubblica, si parla generalmente di Firme (Signature), il meccanismo però è lo stesso, è sempre il MAC che supporta questi 3 tipi di servizio. Il contesto in cui si realizza il MAC è costituito da due entità che comunicano A e B, A vuole mandare un messaggio a B e B vuole verificare che colui che ha originato il messaggio sia proprio A e che il messaggio non sia stato alterato. Si parte allora dal messaggio che si vuole trasmettere, e dalla chiave che è condivisa col destinatario del messaggio, quindi al messaggio pronto per essere trasmesso sul canale insicuro, viene appeso il MAC, una stringa binaria calcolata come funzione di due input, il messaggio stesso e la chiave segreta. Il MAC quindi è una funzione a due ingressi, chiave segreta e messaggio più eventuali altri parametri specifici di uno schema di MAC; da qui si calcola la stringa Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 29

30 binaria da appendere al messaggio e poi si invia messaggio più il MAC. Il ricevitore fa esattamente ciò che si fa per la rivelazione d errore, prende il solo messaggio e ricalcola a sua volta l autenticatore relativo al messaggio ricevuto, ciò può farlo in quanto conosce la chiave segreta e l algoritmo di generazione C k (Checksum) del MAC. Poi prende i due MAC, ricevuto e calcolato, e li confronta, se sono uguali conclude che il messaggio non è stato modificato e inoltre il messaggio proviene dall unica altra entità che oltre a lui conosce la chiave k. Definiamo ora quali tipi di attacchi possono essere rivolti contro il MAC. Il tipico attacco fattibile è la Forgiatura: MAC Forge, fabbricazione di un MAC falso cioè, l attaccante riesce a creare una coppia (m i,c i) messaggio - checksum (che è l autenticatore del messaggio), valida, cioè C è proprio l autenticatore di quel messaggio m, ma questo messaggio non è stato mai visto da Alice. Si hanno diverse possibilità di attacco che corrispondono anche a diversi gradi di robustezza nello schema di MAC: l attaccante non sa nulla, l attaccante conosce un certo numero q di coppie valide osservate sul canale, ultimo e più forte, l attaccante può scegliere e ottenere da Alice q coppie valide. Il prodotto dell attacco è la fabbricazione, le coppie valida, si distinguono in Esistenziali e Selettive. Le prime indicano che questa cosa è fattibile per almeno un messaggio, ma non ho nessun controllo sul messaggio che ne esce fuori, quindi è un attacco più debole; per le seconde invece io scelgo un messaggio che per me ha interesse, e riesco ad ottenerne l autenticatore da Alice. Come si fa allora ad ottenere questo Checksum crittografico che è il MAC. Gli obbiettivi sono ottenere una specie di impronta, contenente anche una chiave segreta, di un messaggio, che permetta di riconoscere se quest ultimo è stato alterato, e d altra parte far si che questo campo che appendo al messaggio abbia un overhead contenuto. Per far ciò ho bisogno di una funzione Hash che prenda in input un qualche cosa che dipende da messaggio e chiave, ricordando poi che le funzioni Hash sono tutte realizzate iterativamente attraverso una funzione di compressione. Ricordando che la robustezza di un hash dipende dalla robustezza della sua funzione di compressione, la realizzazione di un hash con chiave, cioè di un MAC che sia poi robusto, dipende tutto da come noi combiniamo tutto. Se lo facciamo male sono possibili degli attacchi, attacchi che si chiamano Length Extension e Partial Collision. Length Extension Attack: supponiamo che il nostro checksum sia fatto così, C=h(K m) una certa funzione hash della concatenazione della chiave segreta e del messaggio, ora se la funzione hash fosse l oracolo random non ci sarebbe nessun problema, siccome però le funzioni hash sono iterative, sfruttando questa iteratività riesco ad ottenere una coppia valida, per di più con una forgiatura selettiva. Dato il messaggio m=m 1 m 2 m k fatto da k blocchi, il suo autenticatore abbiamo detto che è C=h(K m), se adesso prendo il messaggio m composto da m più un blocco: m =m m k+1, so calcolare il suo autenticatore? C sarebbe dato da C = h(k m ) = f(h(k m),m k+1) = f(c,m k+1) questo poiché l hash è calcolato iterativamente e f è proprio la funzione di compressione. Estendendo il messaggio (length extension) sono riuscito a calcolare l autenticatore di m partendo da quello osservato sul canale e senza aver bisogno della chiave. La falla sta nel fatto che la chiave entra solo nella prima iterazione, allora si potrebbe pensare di inserirla ad ogni iterazione oppure all ultima, ma ciò da spazio ad un altro tipo di attacco, il Partial Collision Attack. Partial Collision Attack: è un attacco che può essere reso infattibile ma è comunque grave. Supponiamo di avere due messaggi diversi che generano una collisione sulla funzione hash, cioè l hash di questi due messaggi è lo stesso, calcolato come C=h(m K), con la chiave alla fine. Se la chiave fosse all inizio, non potrei rilevare la collisione. Se a partire da questi due messaggi m,m che generano una collisione, io creo i relativi messaggi estesi m e,m e definiti come m e=m+u, m e =m +u, gli estendo cioè con lo stesso testo. Succede che i due messaggi sono diversi, perché per ipotesi m,m sono diversi, però hanno lo stesso hash, in quanto m,m ce l hanno perché collidono, e siccome la funzione hash è iterativa, anche i due hash dei messaggi estesi daranno luogo ad un collisione. Allora se conoscono l autenticatore di Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 30

31 uno, posso sapere l autenticatore di un altro messaggio diverso, quindi mi faccio autenticare un messaggio ma in realtà c ho l autenticazione di un altro messaggio senza conoscere la chiave. Ovviamente la premessa è che sono stato capace di trovare una collisione. Una soluzione possibile che è stata trovata è per esempio applicare l hash due volte h(h(m) m), calcolo l hash di m, lo premetto ad m e poi ricalcolo l hash. Questo tipo di approccio è quello usato da uno dei MAC più diffusi, HMAC. HMAC: l HMAC di una chiave k si ottiene in questo modo: al posto di hash si può usare una qualunque delle funzioni hash note (MD5, SHA-1), K + è la chiave con l aggiunta a sinistra di tanti zeri (zero left padding) quanti servono a raggiungere la dimensione del blocco della funzione hash. Opad e ipad sono le costanti opad=5c5c 5C e ipad= in esadecimale. Partendo da destra, premetto al messaggio l xor tra la chiave estesa e l ipad, e ne calcolo l hash, ma questo non basta perché permette il length extension poiché la chiave compare solo all inizio, dopo aver prodotto l hash che dipende dalla chiave, prendo questa stringa, vi premetto di nuovo la chiave (xor tra chiave estesa e opad) e ricalcolo l hash. In questo modo ho usato due volte l hash e la chiave non compare solo all inizio. Il seguente schema mostra come si procede al calcolo: CBC MAC. È un MAC basato su funzioni di cifratura, non su hash. Innanzitutto si basa sull utilizzo di una cifrante a blocco, una qualsiasi, quindi una cifrante che mappa stringhe binarie di n bit (il testo in chiaro), in stringhe binarie di n bit (il testo cifrato). In realtà non ci interessa la cifratura, ma soltanto il random mapping parametrizzato ad una chiave, realizzato dalla cifrante. Allora cosa si fa, si prende il messaggio x, ci si applica eventualmente padding, e si partiziona in blocchi di t bit x 1 x 2 x n dove t è la lunghezza del blocco della cifrante. Partendo poi da uno stato iniziale y 0 = IV = 0 t calcolo y i = e K(y i 1 + x i), dove e K è la cifrante, e all n-imo ciclo iterativo ottengo il valore y n che sarà il MAC del messaggio x, con la chiave k. In questo modo si rispetta il principio secondo cui il MAC sia funzione del messaggio e della chiave, e in più la chiave compare in ogni singolo blocco poiché utilizzata dalla cifrante, quindi ho sempre una struttura iterativa. Il MAC deve dipendere da ogni bit del messaggio, quindi ci aspettiamo che cambiando un solo bit di x devono cambiare almeno la metà dei bit del MAC. Su questo CBC-MAC in realtà non è noto nessun attacco che non sia a forza bruta, che in realtà è come quello di collisione. Consideriamo un certo numero q di messaggi distinti x 1,, x q, ognuno fatto da n blocchi di cui però quelli dal 3 all n-imo sono uguali in tutti i messaggi, l attaccante conosce sia i messaggi sia il loro hash (checksum), quindi conosce q coppie messaggio-hash valide, che analizzerà per scoprire se è presente una collisione. La complessità è strettamente legata alla quantità q delle coppie da conoscere, se questo q è abbastanza alto di fatto l attacco non è fattibile. Dopodiché se trovo una coppia x i, x j che hanno lo stesso MAC, poiché il MAC è calcolato in quel modo e i due messaggi Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 31

32 hanno lo stesso valore del residuo finale, è possibile affermare che due messaggi distinti ma costruiti con la suddetta struttura, che vanno in collisione, avranno uguali i secondi blocchi cifrati, cioè y 2(i)=y 2(j). Risulteranno uguali allora (y 1(i) + x 2(i)) = (y 1(j) + x 2(j)), cioè anche gli argomenti di e k devono essere uguali poiché la funzione di cifrature deve essere biunivoca. Assodato questo io costruisco due nuovi messaggi in questo modo: u lo faccio autenticare da Alice, cioè mi faccio dare da Alice il MAC di u, che sarà uguale anche al MAC di v, in questo modo avrò ottenuto il MAC per un messaggio che Alice non ha mai visto. Notare che non è stata fatta nessuna ipotesi su e k, che può anche risultare perfetta, eppure sono riuscito a effettuare una forgiatura, questo però al costo di conoscere q coppie valide. Quanto deve essere grande q per rendere impossibile la forgiatura, ci viene detto dal legame tra la q e la probabilità che questo (conoscere q coppie) accada. Viene fuori che si può ritenere che l attacco avrà successo se q [1+ (1+8 2 t log(2))]/2 dove 2 t è il numero dei possibili MAC, l attacco riesce con probabilità maggiore di ½ se q è maggiore di una quantità che va come 2 t/2, cresce esponenzialmente con il numero di bit di MAC. ESER /10 Aspetti realizzativi della crittografia simmetrica Terminato l argomento dei meccanismi crittografici, con relative semplificazioni per la crittografia simmetrica, cioè quella a chiave segreta condivisa, vediamo alcuni aspetti che riguardano l implementazione e l uso pratico di questi meccanismi. Innanzitutto quando si parla di crittografia Forte, si intende l uso di quei meccanismi crittografici ritenuti ad oggi non rompibili con l utilizzo delle risorse disponibili. Ad esempio usare AES con una chiave a 128 bit è ritenuto oggi un crittografia forte, non perché si sia dimostrato che non sia possibile romperlo, ma perché nessuno ha trovato un attacco efficace, e l attacco a forza bruta è assolutamente infattibile. Qual è un punto ricorrente tipico di debolezza? È possibile affermare che ormai il software è la parte di gran lunga prevalente di ciò che compone le reti di telecomunicazioni. Un dato di fatto poi, ad oggi accettabile, è che il software, in tutte le sue realizzazioni, ha errori. Si ritiene quindi accettabile un software che nelle normali condizioni operative, sia privo di errori al 99,99%. Da un punto di vista della sicurezza però questo non va bene perché, anche se un uso normale del software non consente di rilevare quell 1% di errore, la strategia di un attaccante prevede proprio la concentrazione della propria attenzione su quell unico punto critico, facendo in modo che le interazioni col sistema che ha quella vulnerabilità, siano tali da andare tutte a cascare su quella vulnerabilità. Una delle vulnerabilità ricorrenti riguarda la tecnica del cosiddetto Buffer Overflow che fondamentalmente si realizza in questo modo. Un codice per essere eseguito viene caricato in uno stack, dentro il Sistema Operativo (SO), nel quale vengono allocati codice e dati di programma. Quel che succede è che a seconda del SO e della gestione, questi dati di programma e codice utilizzano spazi anche vicini all interno dello stack. Se non vengono fatti controlli di range, avviene che ad esempio si dedica una certa quantità di buffer, all interno dello stack, per memorizzare un indirizzo piuttosto che un campo di un messaggio in entrata, ma se questo campo è malformato o ha un uso non prevedibile, ciò che può fare l attaccante è mettere al suo interno qualcosa che inizialmente appare come dovrebbe essere, ad esempio un URL, ma che in realtà è un codice macchina che verrà memorizzato. Il SO a questo punto, andrà ad eseguire qualcosa che è stato scritto laddove non era prevista la presenza di Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 32

33 codice eseguibile. L idea base del Buffer Overflow quindi, è creare dei campi particolarmente lunghi in modo tale da essere memorizzati nell area di programma, in una maniera non casuale, caricandoci dentro un codice macchina che è quello voluto, che altera il comportamento del codice macchina. Esistono delle soluzioni a questi tipi di problemi (vedi le patch di SO che vengono rilasciate) la maggior parte delle volte però non vengono applicate (ad esempio non vengono installate le patch) quindi rimangono dei bug nel sistema. Uno degli aspetti pratici da tener presente è che sia i meccanismi crittografici, sia i vari protocolli, al momento della loro esecuzione, sono portati a memorizzare una serie di dati. Esiste quindi il problema della memorizzazione, su memorie volatili o statiche, di informazioni rilevanti per la sicurezza. Ad esempio vorrei che la memorizzazione di una chiave, avvenga innanzitutto in un area a cui accedono soltanto quei programmi che sono autorizzati a farlo, in secondo luogo quando il programma ha cessato di essere eseguito, se quell area è condivisa o non fisicamente protetta in qualche modo, il dato deve essere cancellato. La soluzione non è banale, e al solito è un compromesso tra livello di sicurezza che si vuole ottenere e costi. Un altro aspetto pratico poi è l eliminazione delle informazioni dai dischi rigidi, in quanto la maggior parte dei SO mantiene comunque una memoria dei dati cancellati all insaputa dell utente. Per essere sicuri della cancellazione di un dato, bisognerebbe conoscere l indirizzo di memoria in cui è allocato il dato e sovrascrivere la memoria stessa. Riguardo ad altri aspetti che hanno a che fare con la Network Security, possiamo aggiungere che la cifratura può essere applicata a livello di collegamento o da estremo a estremo. Link Encryption: ha di buono che ha il massimo grado di confidenzialità possibile, tutto ciò che finisce su quel collegamento, indipendentemente da chi sia la sorgente e chi il destinatario, verrà tutto cifrato. Ha di negativo che devo disporre di algoritmi cifranti e decifranti ai capi di ogni singolo collegamento e devo far condividere chiavi segrete per poter permettere questo a tutte le coppie di apparati ai capi di ogni singolo collegamento. Quest approccio ha un impatto elevato su chi gestisce le reti ma che può essere anche nullo per chi gestisce le macchine terminali. End to end Encryption: significa che tutte le coppie di macchine interessate a comunicare in maniera confidenziale, debbono preventivamente condividere una chiave, quindi questo allevia e di molto l onere di gestione delle chiavi da parte della rete, soprattutto se il livello dell estremo-estremo è l applicativo. In questo modo si sposta il problema sugli utenti finali, a cui viene delegato l onere di concordare le chiavi. Ricordando la struttura a livelli del modello OSI o di TCP/IP, la cifratura può essere applicata a diversi livelli. Avviene che man mano che ci si sposta dal basso verso l alto cambiano due cose, la prima è che il livello di aggregazione del traffico diminuisce, in altre parole si applica cifratura ad un flusso sempre più selettivo di traffico, la seconda cosa riguarda ciò che effettivamente si andrà a cifrare. Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 33

34 Per la cifratura a livello applicativo (o https), un esempio è PGP dentro le , ciò che viene cifrato è al massimo il contenuto del payload del TCP, il contenuto informativo. Se invece la cifratura è ad un livello più basso, ad esempio a livello trasporto, all interno di un collegamento o di un nodo (router) verrà cifrato il payload più l intestazione TCP. Ma se il pacchetto viene letto all interno di un gateway allora lo vedrò tutto in chiaro poiché il gateway deve risalire fino al livello applicativo per gestire il pacchetto. Se si scende ulteriormente di livello sempre più intestazioni vengono cifrate ma questo vale per un numero sempre minore di circostanze, cioè se la cifratura è a livello di Data link, l intestazione del data link è in chiaro, ma tutto il resto viene cifrato, ma questo avviene solo sul collegamento. All interno del router o del gateway troveremo tutto in chiaro, man mano che si scende quindi si cifrerà di più, ma sono anche di più i posti dove vengono gestiti in chiaro i pacchetti. Ecco perché i meccanismi di cifratura vengono applicati più volte e a diversi livelli di sicurezza, così ogni attore che sia il router o il gateway può decifrare solo l info di cui ha bisogno. È possibile effettuare quella che si chiama Traffic Analysis, reperire cioè soltanto alcune delle informazioni relative ad una comunicazione, magari senza arrivare alla conoscenza del messaggio vero e proprio che due entità si sono scambiate, violando comunque il rispetto della confidenzialità. E questo è possibile a causa di quanto esposto prima sull applicazione della cifratura ai vari livelli applicativi. Un modo molto semplice di contrastare la Traffic Analysis è fare il Traffic Padding. Io ho un flusso di pacchetti che porta dentro un suo fingerprint, perché generato da una certa applicazione, in quanto possiede un certo contenuto informativo, quindi determina sia quando arrivano i pacchetti, sia quanto sono lunghi, sia l interazione tra le due parti. Per cercare di oscurare tutte queste informazioni, il Traffic Padding cosa fa, quando ho pacchetti da spedire mando quelli, quando non ne ho, ne mando comunque ma di fasulli, pacchetti che verranno scartati a destinazione, ma che dovranno corrispondere a pacchetti realistici. Tutto ciò al costo di un continuo traffico in emissione. (Simile alla Steganografia: immissione di poca info utile in tanta inutile). Parliamo ora di Random Numbers (Numeri casuali) cosa ci si fa e perché sono tanto utili nella crittografia. Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 34

35 Servono per esempio per generare chiavi di sessione, piuttosto che le chiavi di lungo termine, per generare Keystream per i One Time Pad o meglio ancora dei Nonce. In tutti questi casi, per quanto riguarda la sicurezza, è importante che questi valori random siano: - statisticamente casuali: cioè una sequenza di 0 e 1, per essere puramente casuale deve far si che la probabilità di apparizione di 0 e 1 sia la stessa (simboli equiprobabili); la probabilità di avere consecutivi n 0 o n 1 sia uguale a 1/2 n per ogni n; le sequenze di 0 e di 1 osservate abbiano indipendenza statistica o più semplicemente autocovarianza nulla. - impredicibili: cioè per quanti bit io abbia già visto, non debbo essere in grado di predire il prossimo bit che uscirà con probabilità maggiore di ½. [ Entropia di una sorgente, nel senso della teoria dell Informazione (Shannon): il numero di bit con il quale posso comprimere una sequenza prodotta da quella sorgente. È una quantità di bit irriducibile. ] ESER /10 PRNG Crittografici Dopo una breve introduzione sulla necessità di sorgenti di numeri random o meglio ancora pseudorandom, in un computer e possibile osservare una serie di sorgenti di casualità dalle quali estrarre bit casuali con un certo contenuto di Entropia, nel senso della teoria dell informazione. Tali sorgenti hanno a che fare in sostanza con attività di periferiche o parti del computer stesso. Tutte queste sono sorgenti ritenibili casuali, nel senso che non tutti i bit da loro generati sono veri bit di informazione, ma ne contengono una certa quantità. Un problema relativo a queste sorgenti è che quasi sempre generano una quantità troppo piccola e soprattutto incontrollabile di bit utili per gli scopi di un meccanismo crittografico. L idea allora è quella di avere a disposizione dei generatori di numeri pseudo casuali Pseudo Random Number Generator PRNG, ed avere delle sorgenti di vera casualità che servono per inizializzare ed eventualmente rigenerare lo stato interno del PRNG. L obbiettivo del PRNG è produrre sequenze di bit che appaiano come statisticamente casuali, e che siano in più impredicibili, cioè non devono essere soltanto una buona approssimazione di una sequenza casuale. L approccio crittografico allora consiste nel costruire una macchina a stati, il cui stato interno è l informazione chiave attraverso la quale è possibile ricostruire l intera sequenza. L inizializzazione poi avviene con l ausilio di sorgenti puramente casuali in modo che non sia noto il modo in cui vengono inizializzate, facendo poi evolvere questa macchina a stati, introducendo di tanto in tanto nuova casualità, per rigenerare la casualità dello stato interno. Questo per evitare che con il passare del tempo un attaccante possa acquisire informazioni e compromettere il generatore acquisendo lo stato interno, e poter così predire l evoluzione della macchina. Un modo particolarmente semplice per generare una sequenza pseudocasuale è il Generatore Congruenziale (poiché usa le congruenze): Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 35

36 X n+1 = (ax n + c) mod m Si parte da un numero iniziale X n, e l uscita è un numero compreso tra 0 e m-1, utilizzando ad esempio una rappresentazione di numeri interi a 32 bit senza segno, l uscita è un numero che al massimo è compreso tra 0 e , per opportune scelte delle costanti a, c, m, questa si comporta come una sequenza statisticamente casuale. Da un punto di vista crittografico però questo è inutilizzabile poiché, supponendo di conoscere l algoritmo, e il valore di m, analizzando una serie di evoluzioni, potrei scrivere due equazioni lineari in cui le incognite sono a e c, le X n sono i termini noti, ricavando così facilmente le mie incognite. Dal punto di vista statistico questo continua ad essere un generatore pseudocasuale, ma essendo predicibile risulterà inutilizzabile per fare keystream, generare chiavi o altro. In più le scelte di a, c, m, non sono comunque qualsiasi se vogliamo avere un buon generatore statistico, per esempio è opportuno che m sia un numero primo, e a deve essere un numero che non ha fattori comuni con m. Un altro generatore molto più sofisticato, buono crittograficamente, ma di uso soltanto teorico, è il Blum Blum Shub, il quale funziona nel seguente modo: x i+1 = x i 2 mod n si ha uno stato interno x che è un numero compreso tra 0 e n-1, dove n è matematicamente ottenuto come prodotto di due numeri primi p e q. In genere n=pq, con p,q=3 mod 4, e per funzionare crittograficamente p e q devono essere numeri almeno di 512 bit, cioè devono essere numeri primi dell ordine di 2 512, e quindi n deve essere un numero rappresentabile in 10 3 bit, cioè un numero dell ordine di Si fa allora il quadrato dello stato interno, lo si riduce mod n e si ottiene l uscita. Se n è rappresentato mettiamo con 1024 bit, l uscita avrà lo stesso numero di bit, ma se prendo tutti questi 1024 bit e li uso come uscita del mio generatore, sto dando in uscita proprio lo stato interno, cosa assolutamente non buona. In realtà si può fare in maniera crittograficamente robusta, dando fuori soltanto alcuni bit, in particolare solo il bit meno significativo, cioè quello che mi dice soltanto se il numero è pari o dispari. In questo modo avrò una sequenza effettivamente random, fornita da un generatore che supera il test del next-bit, cioè non esiste un algoritmo polinomiale tale che si possa predire qual è il prossimo bit generato con probabilità maggiore di ½. In realtà questo generatore è perfettamente attaccabile se si è in grado di fattorizzare n, cioè dato n trovare i numeri primi, cosa fattibile che diventa computazionalmente infattibile se si prende un numero abbastanza grande. Allo stato dell arte di oggi si ritiene che un numero di 1000 bit non sia fattorizzabile praticamente. Un difetto capitale di tutto ciò e che per generare un keystream questo non è il massimo dell efficienza, in quanto genera un bit alla volta al costo di operazioni non semplici come il quadrato di un numero a 1000 bit. Soluzioni pratiche a tutto ciò partono dall idea di base che una cifrante a blocco, se buona, genera fondamentalmente bit random, cioè un random mapping in realtà deterministico ed invertibile, che appare però come casuale per chi non conosce la chiave. Utilizzo ad esempio il Counter Mode: X i = E Km[i] un contatore che non si ripete, che utilizza una chiave segreta, e il cui stato interno è la coppia contatore-chiave segreta, aumento il contatore, cifro, e quello che ottengo possono essere ritenuti bit casuali. Un generatore per esempio standardizzato nella norma ANSI X9.17 (American National Standards Institute) è un generatore che si basa in particolare sullo standard Triple-DES, che ovviamente può essere rimpiazzato con un altra cifrante a blocco, che prevede l uso della cifrante a blocco con una chiave segreta costituita in questo caso da due chiavi K 1 K 2 da 56 bit. L ingresso è costituito dalla chiave segreta, una stringa binaria rappresentativa del valore Data e Ora (Date-Time) ed un seed, un seme iniziale Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 36

37 ciò ovviamente va inizializzato con sorgenti di casualità vera presenti nel sistema. L uscita sarà composta da i 64 bit di uscita del triplo DES-EDE R i, e il nuovo valore del seme V i+1. Per evitare che un attaccante possa prima o poi ricostruire lo stato interno, è opportuno preventivamente fare un reseed completo di chiave e input. Un esempio più dettagliato di uno pseudocodice che genera una sequenza simile allo standard ANSI, è il seguente. Si utilizza una cifrante a blocco come mattoncino base del generatore, in questo caso AES con una chiave segreta a 256 bit, e un blocco di plaintext e ciphertext di 128 bit. Lo stato interno della nostra macchina è costituito dalla chiave segreta (256 bit), e da un contatore che non si deve mai ripetere (128 bit) che useremo come input nella cifrante AES. Dire che non si deve mai ripetere, vuol dire che si deve usare il codice per un numero di volte sufficientemente più piccolo di Inizializzazione: Lo stato interno è la coppia chiave-contatore (K,C), inizialmente pari a (0,0), è importante inizializzare anche il contatore, poiché se C=0 vuol dire che il sistema non è ancora in grado di generare dati crittograficamente robusti. Reseeding, Inserimento del seme (reseed poiché verrà richiamata per aggiornare il seme): In particolare, il contatore non si ripete mai, si inizializza una volta e poi si incrementa sempre di uno, la chiave invece viene rigenerata. Una soluzione possibile è che il nuovo valore di chiave venga dato dall hash di una stringa ottenuta concatenando il vecchio valore di chiave ed una sequenza s che è il seme. In questo modo nella chiave sto introducendo la vecchia chiave, che potrebbe essere in parte o totalmente corrotta, e il seme s. Questo reseeding sarà efficace se e solo se s contiene un numero sufficiente di bit non predicibili, cioè una quantità sufficiente di entropia, che risulta essere accettabile se s contiene almeno 128 bit di entropia. Vediamo ora come si possono generare i dati casuali usando la cifrante a blocco di 16 byte, partendo quindi dalla generazione di un numero k di blocchi di dati random Appunti di Sicurezza nelle Comunicazioni AA 2007/2008 G.M. pag. 37

RC4 RC4. Davide Cerri. Davide Cerri CEFRIEL - Politecnico di Milano cerri@cefriel.it http://www.cefriel.it/~cerri/

RC4 RC4. Davide Cerri. Davide Cerri CEFRIEL - Politecnico di Milano cerri@cefriel.it http://www.cefriel.it/~cerri/ POLITECNICO DI MILANO CEFRIEL - Politecnico di Milano cerri@cefriel.it http://www.cefriel.it/~cerri/ è un cifrario a flusso progettato da Ron Rivest (la R di RSA) nel 1987. Era un segreto commerciale della

Dettagli

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0 Rappresentazione dei numeri I numeri che siamo abituati ad utilizzare sono espressi utilizzando il sistema di numerazione decimale, che si chiama così perché utilizza 0 cifre (0,,2,3,4,5,6,7,8,9). Si dice

Dettagli

Introduzione alla crittografia. Il crittosistema RSA e la sua sicurezza

Introduzione alla crittografia. Il crittosistema RSA e la sua sicurezza Introduzione alla crittografia. Il crittosistema RSA e la sua sicurezza Prof. Massimiliano Sala MINICORSI 2011. Crittografia a chiave pubblica: oltre RSA Università degli Studi di Trento, Lab di Matematica

Dettagli

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo. DALLE PESATE ALL ARITMETICA FINITA IN BASE 2 Si è trovato, partendo da un problema concreto, che con la base 2, utilizzando alcune potenze della base, operando con solo addizioni, posso ottenere tutti

Dettagli

Iniziamo con un esercizio sul massimo comun divisore: Esercizio 1. Sia d = G.C.D.(a, b), allora:

Iniziamo con un esercizio sul massimo comun divisore: Esercizio 1. Sia d = G.C.D.(a, b), allora: Iniziamo con un esercizio sul massimo comun divisore: Esercizio 1. Sia d = G.C.D.(a, b), allora: G.C.D.( a d, b d ) = 1 Sono state introdotte a lezione due definizioni importanti che ricordiamo: Definizione

Dettagli

SSL: applicazioni telematiche SSL SSL SSL. E-commerce Trading on-line Internet banking... Secure Socket Layer

SSL: applicazioni telematiche SSL SSL SSL. E-commerce Trading on-line Internet banking... Secure Socket Layer : applicazioni telematiche Secure Socket Layer E-commerce Trading on-line Internet banking... Protocollo proposto dalla Netscape Communications Corporation Garantisce confidenzialità e affidabilità delle

Dettagli

RETI DI CALCOLATORI. Crittografia. La crittografia

RETI DI CALCOLATORI. Crittografia. La crittografia RETI DI CALCOLATORI Crittografia La crittografia La crittografia è la scienza che studia la scrittura e la lettura di messaggi in codice ed è il fondamento su cui si basano i meccanismi di autenticazione,

Dettagli

Crittografia e sicurezza delle reti. WEP: Wired Equivalent Privacy

Crittografia e sicurezza delle reti. WEP: Wired Equivalent Privacy Crittografia e sicurezza delle reti WEP: Wired Equivalent Privacy Stream Ciphers Inizia con una chiave segreta ( seed ) Genera uno stream di byte (Keystream): byte i dello stream è funzione della chiave

Dettagli

da chi proviene un messaggio?

da chi proviene un messaggio? da chi proviene un messaggio? in un crittosistema simmetrico solo Alice e Bob conoscono la chiave se Bob riceve un messaggio di Alice e la decifratura del messaggio ha senso, il messaggio proviene certamente

Dettagli

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI Indice 1 Le frazioni algebriche 1.1 Il minimo comune multiplo e il Massimo Comun Divisore fra polinomi........ 1. Le frazioni algebriche....................................

Dettagli

Crittografia. Appunti a cura del prof. Ing. Mario Catalano

Crittografia. Appunti a cura del prof. Ing. Mario Catalano Crittografia Appunti a cura del prof. Ing. Mario Catalano La crittografia La crittografia è la scienza che studia la scrittura e la lettura di messaggi in codice. Solitamente, i meccanismi crittografici

Dettagli

Introduzione. Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD... 6

Introduzione. Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD... 6 Appunti di Calcolatori Elettronici Esecuzione di istruzioni in parallelo Introduzione... 1 Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD...

Dettagli

Esempi di algoritmi. Lezione III

Esempi di algoritmi. Lezione III Esempi di algoritmi Lezione III Scopo della lezione Implementare da zero algoritmi di media complessità. Verificare la correttezza di un algoritmo eseguendolo a mano. Imparare a valutare le prestazioni

Dettagli

Esercizio 1 Dato il gioco ({1, 2, 3}, v) con v funzione caratteristica tale che:

Esercizio 1 Dato il gioco ({1, 2, 3}, v) con v funzione caratteristica tale che: Teoria dei Giochi, Trento, 2004/05 c Fioravante Patrone 1 Teoria dei Giochi Corso di laurea specialistica: Decisioni economiche, impresa e responsabilità sociale, A.A. 2004/05 Soluzioni degli esercizi

Dettagli

LE FUNZIONI A DUE VARIABILI

LE FUNZIONI A DUE VARIABILI Capitolo I LE FUNZIONI A DUE VARIABILI In questo primo capitolo introduciamo alcune definizioni di base delle funzioni reali a due variabili reali. Nel seguito R denoterà l insieme dei numeri reali mentre

Dettagli

Informatica per la comunicazione" - lezione 13 -

Informatica per la comunicazione - lezione 13 - Informatica per la comunicazione" - lezione 13 - Funzionamento di una password" 1: l utente tramite il suo browser richiede l accesso a una pagina del server; 2: il server richiede il nome utente e la

Dettagli

Strutturazione logica dei dati: i file

Strutturazione logica dei dati: i file Strutturazione logica dei dati: i file Informazioni più complesse possono essere composte a partire da informazioni elementari Esempio di una banca: supponiamo di voler mantenere all'interno di un computer

Dettagli

SISTEMI DI NUMERAZIONE E CODICI

SISTEMI DI NUMERAZIONE E CODICI SISTEMI DI NUMERAZIONE E CODICI Il Sistema di Numerazione Decimale Il sistema decimale o sistema di numerazione a base dieci usa dieci cifre, dette cifre decimali, da O a 9. Il sistema decimale è un sistema

Dettagli

SISTEMI E RETI. Crittografia. Sistemi distribuiti e configurazione architetturale delle applicazioni WEB.

SISTEMI E RETI. Crittografia. Sistemi distribuiti e configurazione architetturale delle applicazioni WEB. SISTEMI E RETI Crittografia. Sistemi distribuiti e configurazione architetturale delle applicazioni WEB. CRITTOGRAFIA La crittografia è una tecnica che si occupa della scrittura segreta in codice o cifrata

Dettagli

Una minaccia dovuta all uso dell SNMP su WLAN

Una minaccia dovuta all uso dell SNMP su WLAN Una minaccia dovuta all uso dell SNMP su WLAN Gianluigi Me, gianluigi@wi-fiforum.com Traduzione a cura di Paolo Spagnoletti Introduzione Gli attacchi al protocollo WEP compromettono la confidenzialità

Dettagli

! La crittoanalisi è invece la scienza che cerca di aggirare o superare le protezioni crittografiche, accedendo alle informazioni protette

! La crittoanalisi è invece la scienza che cerca di aggirare o superare le protezioni crittografiche, accedendo alle informazioni protette Crittografia Cenni Damiano Carra Università degli Studi di Verona Dipartimento di Informatica La crittografia! Scienza che si occupa di proteggere l informazione rendendola sicura, in modo che un utente

Dettagli

Sommario. Introduzione alla Sicurezza Web

Sommario. Introduzione alla Sicurezza Web Sommario Introduzione alla Sicurezza Web Considerazioni generali IPSec Secure Socket Layer (SSL) e Transport Layer Security (TLS) Secure Electronic Transaction (SET) Introduzione alla crittografia Introduzione

Dettagli

LA TRASMISSIONE DELLE INFORMAZIONI QUARTA PARTE 1

LA TRASMISSIONE DELLE INFORMAZIONI QUARTA PARTE 1 LA TRASMISSIONE DELLE INFORMAZIONI QUARTA PARTE 1 I CODICI 1 IL CODICE BCD 1 Somma in BCD 2 Sottrazione BCD 5 IL CODICE ECCESSO 3 20 La trasmissione delle informazioni Quarta Parte I codici Il codice BCD

Dettagli

Algoritmi e strutture dati. Codici di Huffman

Algoritmi e strutture dati. Codici di Huffman Algoritmi e strutture dati Codici di Huffman Memorizzazione dei dati Quando un file viene memorizzato, esso va memorizzato in qualche formato binario Modo più semplice: memorizzare il codice ASCII per

Dettagli

CALCOLATORI ELETTRONICI A cura di Luca Orrù. Lezione n.7. Il moltiplicatore binario e il ciclo di base di una CPU

CALCOLATORI ELETTRONICI A cura di Luca Orrù. Lezione n.7. Il moltiplicatore binario e il ciclo di base di una CPU Lezione n.7 Il moltiplicatore binario e il ciclo di base di una CPU 1 SOMMARIO Architettura del moltiplicatore Architettura di base di una CPU Ciclo principale di base di una CPU Riprendiamo l analisi

Dettagli

A intervalli regolari ogni router manda la sua tabella a tutti i vicini, e riceve quelle dei vicini.

A intervalli regolari ogni router manda la sua tabella a tutti i vicini, e riceve quelle dei vicini. Algoritmi di routing dinamici (pag.89) UdA2_L5 Nelle moderne reti si usano algoritmi dinamici, che si adattano automaticamente ai cambiamenti della rete. Questi algoritmi non sono eseguiti solo all'avvio

Dettagli

Appunti di informatica. Lezione 2 anno accademico 2015-2016 Mario Verdicchio

Appunti di informatica. Lezione 2 anno accademico 2015-2016 Mario Verdicchio Appunti di informatica Lezione 2 anno accademico 2015-2016 Mario Verdicchio Sistema binario e logica C è un legame tra i numeri binari (0,1) e la logica, ossia la disciplina che si occupa del ragionamento

Dettagli

Dimensione di uno Spazio vettoriale

Dimensione di uno Spazio vettoriale Capitolo 4 Dimensione di uno Spazio vettoriale 4.1 Introduzione Dedichiamo questo capitolo ad un concetto fondamentale in algebra lineare: la dimensione di uno spazio vettoriale. Daremo una definizione

Dettagli

Lezione 8. La macchina universale

Lezione 8. La macchina universale Lezione 8 Algoritmi La macchina universale Un elaboratore o computer è una macchina digitale, elettronica, automatica capace di effettuare trasformazioni o elaborazioni su i dati digitale= l informazione

Dettagli

CALCOLO COMBINATORIO

CALCOLO COMBINATORIO CALCOLO COMBINATORIO 1 Modi di formare gruppi di k oggetti presi da n dati 11 disposizioni semplici, permutazioni Dati n oggetti distinti a 1,, a n si chiamano disposizioni semplici di questi oggetti,

Dettagli

Fondamenti di Informatica 2. Le operazioni binarie

Fondamenti di Informatica 2. Le operazioni binarie Corso di per il corso di Laurea di Ingegneria Gestionale Le operazioni binarie Università degli Studi di Udine - A.A. 2010-2011 Docente Ing. Sandro Di Giusto Ph.D. 1 L'algebra binaria Il fatto di aver

Dettagli

Dispense di Informatica per l ITG Valadier

Dispense di Informatica per l ITG Valadier La notazione binaria Dispense di Informatica per l ITG Valadier Le informazioni dentro il computer All interno di un calcolatore tutte le informazioni sono memorizzate sottoforma di lunghe sequenze di

Dettagli

Convertitori numerici in Excel

Convertitori numerici in Excel ISTITUTO DI ISTRUZIONE SUPERIORE G. M. ANGIOY CARBONIA Convertitori numerici in Excel Prof. G. Ciaschetti Come attività di laboratorio, vogliamo realizzare dei convertitori numerici con Microsoft Excel

Dettagli

UNA LEZIONE SUI NUMERI PRIMI: NASCE LA RITABELLA

UNA LEZIONE SUI NUMERI PRIMI: NASCE LA RITABELLA UNA LEZIONE SUI NUMERI PRIMI: NASCE LA RITABELLA Tutti gli anni, affrontando l argomento della divisibilità, trovavo utile far lavorare gli alunni sul Crivello di Eratostene. Presentavo ai ragazzi una

Dettagli

Rappresentazione dei numeri in un calcolatore

Rappresentazione dei numeri in un calcolatore Corso di Calcolatori Elettronici I A.A. 2010-2011 Rappresentazione dei numeri in un calcolatore Lezione 2 Università degli Studi di Napoli Federico II Facoltà di Ingegneria Rappresentazione dei numeri

Dettagli

Documenti cartacei e digitali. Autenticità. Cosa si vuole garantire? Riservatezza. Integrità 11/12/2012. PA digitale: documenti e firme (I.

Documenti cartacei e digitali. Autenticità. Cosa si vuole garantire? Riservatezza. Integrità 11/12/2012. PA digitale: documenti e firme (I. Università degli studi di Catania Pubblica Amministrazione digitale Elementi tecnici sulla firma digitale Ignazio Zangara Agatino Di Bella Area della Formazione Gestione dell archivio (novembre dicembre

Dettagli

Parte II Indice. Operazioni aritmetiche tra valori rappresentati in binario puro. Rappresentazione di numeri con segno

Parte II Indice. Operazioni aritmetiche tra valori rappresentati in binario puro. Rappresentazione di numeri con segno Parte II Indice Operazioni aritmetiche tra valori rappresentati in binario puro somma sottrazione Rappresentazione di numeri con segno modulo e segno complemento a 2 esercizi Operazioni aritmetiche tra

Dettagli

ESEMPIO 1: eseguire il complemento a 10 di 765

ESEMPIO 1: eseguire il complemento a 10 di 765 COMPLEMENTO A 10 DI UN NUMERO DECIMALE Sia dato un numero N 10 in base 10 di n cifre. Il complemento a 10 di tale numero (N ) si ottiene sottraendo il numero stesso a 10 n. ESEMPIO 1: eseguire il complemento

Dettagli

Calcolatori: Algebra Booleana e Reti Logiche

Calcolatori: Algebra Booleana e Reti Logiche Calcolatori: Algebra Booleana e Reti Logiche 1 Algebra Booleana e Variabili Logiche I fondamenti dell Algebra Booleana (o Algebra di Boole) furono delineati dal matematico George Boole, in un lavoro pubblicato

Dettagli

Approfondimento di Marco Mulas

Approfondimento di Marco Mulas Approfondimento di Marco Mulas Affidabilità: TCP o UDP Throughput: banda a disposizione Temporizzazione: realtime o piccoli ritardi Sicurezza Riservatezza dei dati Integrità dei dati Autenticazione di

Dettagli

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12}; ESERCIZI 2 LABORATORIO Problema 1 Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12}; Chiede all'utente un numero e, tramite ricerca

Dettagli

4. Operazioni elementari per righe e colonne

4. Operazioni elementari per righe e colonne 4. Operazioni elementari per righe e colonne Sia K un campo, e sia A una matrice m n a elementi in K. Una operazione elementare per righe sulla matrice A è una operazione di uno dei seguenti tre tipi:

Dettagli

Corrispondenze e funzioni

Corrispondenze e funzioni Corrispondenze e funzioni L attività fondamentale della mente umana consiste nello stabilire corrispondenze e relazioni tra oggetti; è anche per questo motivo che il concetto di corrispondenza è uno dei

Dettagli

Automazione Industriale (scheduling+mms) scheduling+mms. adacher@dia.uniroma3.it

Automazione Industriale (scheduling+mms) scheduling+mms. adacher@dia.uniroma3.it Automazione Industriale (scheduling+mms) scheduling+mms adacher@dia.uniroma3.it Introduzione Sistemi e Modelli Lo studio e l analisi di sistemi tramite una rappresentazione astratta o una sua formalizzazione

Dettagli

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione in virgola mobile

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione in virgola mobile Problemi connessi all utilizzo di un numero di bit limitato Abbiamo visto quali sono i vantaggi dell utilizzo della rappresentazione in complemento alla base: corrispondenza biunivoca fra rappresentazione

Dettagli

B+Trees. Introduzione

B+Trees. Introduzione B+Trees Introduzione B+Trees Il B+Trees e la variante maggiormente utilizzata dei BTrees BTrees e B+trees fanno parte della famiglia degli alberi di ricerca. Nel B+Trees i dati sono memorizzati solo nelle

Dettagli

Lezione 9: Cambio di base

Lezione 9: Cambio di base Lezione 9: Cambio di base In questa lezione vogliamo affrontare uno degli argomenti piu ostici per lo studente e cioè il cambio di base all interno di uno spazio vettoriale, inoltre cercheremo di capire

Dettagli

Soluzione dell esercizio del 2 Febbraio 2004

Soluzione dell esercizio del 2 Febbraio 2004 Soluzione dell esercizio del 2 Febbraio 2004 1. Casi d uso I casi d uso sono riportati in Figura 1. Figura 1: Diagramma dei casi d uso. E evidenziato un sotto caso di uso. 2. Modello concettuale Osserviamo

Dettagli

un protocollo è costituito da una serie di passi (step) e coinvolge due o più persone (parti, entità) allo scopo di svolgere un incarico

un protocollo è costituito da una serie di passi (step) e coinvolge due o più persone (parti, entità) allo scopo di svolgere un incarico protocolli un protocollo è costituito da una serie di passi (step) e coinvolge due o più persone (parti, entità) allo scopo di svolgere un incarico proprietà ogni persona coinvolta deve conoscere il protocollo

Dettagli

Transitori del primo ordine

Transitori del primo ordine Università di Ferrara Corso di Elettrotecnica Transitori del primo ordine Si consideri il circuito in figura, composto da un generatore ideale di tensione, una resistenza ed una capacità. I tre bipoli

Dettagli

Appunti sulla Macchina di Turing. Macchina di Turing

Appunti sulla Macchina di Turing. Macchina di Turing Macchina di Turing Una macchina di Turing è costituita dai seguenti elementi (vedi fig. 1): a) una unità di memoria, detta memoria esterna, consistente in un nastro illimitato in entrambi i sensi e suddiviso

Dettagli

Introduzione alla crittografia con OpenPGP

Introduzione alla crittografia con OpenPGP Introduzione alla crittografia con OpenPGP D avide Cerri dav ide@ linux.it Crittografia Per proteggere le comunicazioni su Internet si utilizza la crittografia. La crittografia è la scienza che si occupa

Dettagli

Codifiche a lunghezza variabile

Codifiche a lunghezza variabile Sistemi Multimediali Codifiche a lunghezza variabile Marco Gribaudo marcog@di.unito.it, gribaudo@elet.polimi.it Assegnazione del codice Come visto in precedenza, per poter memorizzare o trasmettere un

Dettagli

Il concetto di valore medio in generale

Il concetto di valore medio in generale Il concetto di valore medio in generale Nella statistica descrittiva si distinguono solitamente due tipi di medie: - le medie analitiche, che soddisfano ad una condizione di invarianza e si calcolano tenendo

Dettagli

Scopo della lezione. Informatica. Informatica - def. 1. Informatica

Scopo della lezione. Informatica. Informatica - def. 1. Informatica Scopo della lezione Informatica per le lauree triennali LEZIONE 1 - Che cos è l informatica Introdurre i concetti base della materia Definire le differenze tra hardware e software Individuare le applicazioni

Dettagli

Database. Si ringrazia Marco Bertini per le slides

Database. Si ringrazia Marco Bertini per le slides Database Si ringrazia Marco Bertini per le slides Obiettivo Concetti base dati e informazioni cos è un database terminologia Modelli organizzativi flat file database relazionali Principi e linee guida

Dettagli

Capitolo 2. Operazione di limite

Capitolo 2. Operazione di limite Capitolo 2 Operazione di ite In questo capitolo vogliamo occuparci dell operazione di ite, strumento indispensabile per scoprire molte proprietà delle funzioni. D ora in avanti riguarderemo i domini A

Dettagli

Informatica B a.a 2005/06 (Meccanici 4 squadra) PhD. Ing. Michele Folgheraiter

Informatica B a.a 2005/06 (Meccanici 4 squadra) PhD. Ing. Michele Folgheraiter Informatica B a.a 2005/06 (Meccanici 4 squadra) Scaglione: da PO a ZZZZ PhD. Ing. Michele Folgheraiter Architettura del Calcolatore Macchina di von Neumann Il calcolatore moderno è basato su un architettura

Dettagli

Esercizi su. Funzioni

Esercizi su. Funzioni Esercizi su Funzioni ๒ Varie Tracce extra Sul sito del corso ๓ Esercizi funz_max.cc funz_fattoriale.cc ๔ Documentazione Il codice va documentato (commentato) Leggibilità Riduzione degli errori Manutenibilità

Dettagli

Fasi di creazione di un programma

Fasi di creazione di un programma Fasi di creazione di un programma 1. Studio Preliminare 2. Analisi del Sistema 6. Manutenzione e Test 3. Progettazione 5. Implementazione 4. Sviluppo 41 Sviluppo di programmi Per la costruzione di un programma

Dettagli

Capitolo 13: L offerta dell impresa e il surplus del produttore

Capitolo 13: L offerta dell impresa e il surplus del produttore Capitolo 13: L offerta dell impresa e il surplus del produttore 13.1: Introduzione L analisi dei due capitoli precedenti ha fornito tutti i concetti necessari per affrontare l argomento di questo capitolo:

Dettagli

Dispensa di Informatica I.1

Dispensa di Informatica I.1 IL COMPUTER: CONCETTI GENERALI Il Computer (o elaboratore) è un insieme di dispositivi di diversa natura in grado di acquisire dall'esterno dati e algoritmi e produrre in uscita i risultati dell'elaborazione.

Dettagli

f(x) = 1 x. Il dominio di questa funzione è il sottoinsieme proprio di R dato da

f(x) = 1 x. Il dominio di questa funzione è il sottoinsieme proprio di R dato da Data una funzione reale f di variabile reale x, definita su un sottoinsieme proprio D f di R (con questo voglio dire che il dominio di f è un sottoinsieme di R che non coincide con tutto R), ci si chiede

Dettagli

LE SUCCESSIONI 1. COS E UNA SUCCESSIONE

LE SUCCESSIONI 1. COS E UNA SUCCESSIONE LE SUCCESSIONI 1. COS E UNA SUCCESSIONE La sequenza costituisce un esempio di SUCCESSIONE. Ecco un altro esempio di successione: Una successione è dunque una sequenza infinita di numeri reali (ma potrebbe

Dettagli

Analisi e diagramma di Pareto

Analisi e diagramma di Pareto Analisi e diagramma di Pareto L'analisi di Pareto è una metodologia statistica utilizzata per individuare i problemi più rilevanti nella situazione in esame e quindi le priorità di intervento. L'obiettivo

Dettagli

ESERCIZI DI ALGEBRA LINEARE E GEOMETRIA

ESERCIZI DI ALGEBRA LINEARE E GEOMETRIA ESERCIZI DI ALGEBRA LINEARE E GEOMETRIA Francesco Bottacin Padova, 24 febbraio 2012 Capitolo 1 Algebra Lineare 1.1 Spazi e sottospazi vettoriali Esercizio 1.1. Sia U il sottospazio di R 4 generato dai

Dettagli

Analisi di programmi: Crittografia

Analisi di programmi: Crittografia Analisi di programmi: Crittografia Come caso concreto di sistema, proviamo ad abbozzare e a vedere una prima implementazione di un sistema di crittografia a chiave pubblica La crittografia studia le tecniche

Dettagli

Operazioni Aritmetiche e Codici in Binario Giuseppe Talarico 23/01/2013

Operazioni Aritmetiche e Codici in Binario Giuseppe Talarico 23/01/2013 Operazioni Aritmetiche e Codici in Binario Giuseppe Talarico 23/01/2013 In questo documento vengono illustrate brevemente le operazioni aritmetiche salienti e quelle logiche ad esse strettamente collegate.

Dettagli

Alessandro Pellegrini

Alessandro Pellegrini Esercitazione sulle Rappresentazioni Numeriche Esistono 1 tipi di persone al mondo: quelli che conoscono il codice binario e quelli che non lo conoscono Alessandro Pellegrini Cosa studiare prima Conversione

Dettagli

Architettura hardware

Architettura hardware Architettura dell elaboratore Architettura hardware la parte che si può prendere a calci Sistema composto da un numero elevato di componenti, in cui ogni componente svolge una sua funzione elaborazione

Dettagli

Comunicazioni sicure su Internet: https e SSL. Fisica dell Informazione

Comunicazioni sicure su Internet: https e SSL. Fisica dell Informazione Comunicazioni sicure su Internet: https e SSL Fisica dell Informazione Il servizio World Wide Web (WWW) Come funziona nel dettaglio il Web? tre insiemi di regole: Uniform Resource Locator (URL) Hyper Text

Dettagli

I sistemi di numerazione

I sistemi di numerazione I sistemi di numerazione 01-INFORMAZIONE E SUA RAPPRESENTAZIONE Sia dato un insieme finito di caratteri distinti, che chiameremo alfabeto. Utilizzando anche ripetutamente caratteri di un alfabeto, si possono

Dettagli

Luigi Piroddi piroddi@elet.polimi.it

Luigi Piroddi piroddi@elet.polimi.it Automazione industriale dispense del corso 10. Reti di Petri: analisi strutturale Luigi Piroddi piroddi@elet.polimi.it Analisi strutturale Un alternativa all analisi esaustiva basata sul grafo di raggiungibilità,

Dettagli

Logica Numerica Approfondimento 1. Minimo Comune Multiplo e Massimo Comun Divisore. Il concetto di multiplo e di divisore. Il Minimo Comune Multiplo

Logica Numerica Approfondimento 1. Minimo Comune Multiplo e Massimo Comun Divisore. Il concetto di multiplo e di divisore. Il Minimo Comune Multiplo Logica Numerica Approfondimento E. Barbuto Minimo Comune Multiplo e Massimo Comun Divisore Il concetto di multiplo e di divisore Considerato un numero intero n, se esso viene moltiplicato per un numero

Dettagli

ARCHITETTURA DI RETE FOLEGNANI ANDREA

ARCHITETTURA DI RETE FOLEGNANI ANDREA ARCHITETTURA DI RETE FOLEGNANI ANDREA INTRODUZIONE È denominata Architettura di rete un insieme di livelli e protocolli. Le reti sono organizzate gerarchicamente in livelli, ciascuno dei quali interagisce

Dettagli

( x) ( x) 0. Equazioni irrazionali

( x) ( x) 0. Equazioni irrazionali Equazioni irrazionali Definizione: si definisce equazione irrazionale un equazione in cui compaiono uno o più radicali contenenti l incognita. Esempio 7 Ricordiamo quanto visto sulle condizioni di esistenza

Dettagli

Traduzione e adattamento a cura di Gylas per Giochi Rari

Traduzione e adattamento a cura di Gylas per Giochi Rari Traduzione e adattamento a cura di Gylas per Giochi Rari Versione 1.0 Luglio 2001 NOTA. La presente traduzione non sostituisce in alcun modo il regolamento originale del gioco; il presente documento è

Dettagli

Sistemi di Numerazione Binaria NB.1

Sistemi di Numerazione Binaria NB.1 Sistemi di Numerazione Binaria NB.1 Numeri e numerali Numero: entità astratta Numerale : stringa di caratteri che rappresenta un numero in un dato sistema di numerazione Lo stesso numero è rappresentato

Dettagli

DI D AGRA R MM M I M A BLOCC C H C I TEORI R A E D D E SERC R I C ZI 1 1

DI D AGRA R MM M I M A BLOCC C H C I TEORI R A E D D E SERC R I C ZI 1 1 DIAGRAMMI A BLOCCHI TEORIA ED ESERCIZI 1 1 Il linguaggio dei diagrammi a blocchi è un possibile formalismo per la descrizione di algoritmi Il diagramma a blocchi, o flowchart, è una rappresentazione grafica

Dettagli

Macchine a stati finiti. Sommario. Sommario. M. Favalli. 5th June 2007

Macchine a stati finiti. Sommario. Sommario. M. Favalli. 5th June 2007 Sommario Macchine a stati finiti M. Favalli 5th June 27 4 Sommario () 5th June 27 / 35 () 5th June 27 2 / 35 4 Le macchine a stati si utilizzano per modellare di sistemi fisici caratterizzabili mediante:

Dettagli

Macchine a stati finiti. Sommario. Sommario. M. Favalli. Le macchine a stati si utilizzano per modellare di sistemi fisici caratterizzabili mediante:

Macchine a stati finiti. Sommario. Sommario. M. Favalli. Le macchine a stati si utilizzano per modellare di sistemi fisici caratterizzabili mediante: Sommario Macchine a stati finiti M. Favalli Engineering Department in Ferrara 4 Sommario (ENDIF) Analisiesintesideicircuitidigitali / 35 (ENDIF) Analisiesintesideicircuitidigitali 2 / 35 4 Le macchine

Dettagli

Lezione 7 Sicurezza delle informazioni

Lezione 7 Sicurezza delle informazioni Lezione 7 Sicurezza delle informazioni Sommario Concetti generali Meccanismi per la sicurezza IT: Crittografia Hash Firma digitale Autenticazione 1 Concetti generali Availability Confidentiality Integrity

Dettagli

La Firma Digitale La sperimentazione nel Comune di Cuneo. Pier Angelo Mariani Settore Elaborazione Dati Comune di Cuneo

La Firma Digitale La sperimentazione nel Comune di Cuneo. Pier Angelo Mariani Settore Elaborazione Dati Comune di Cuneo La Firma Digitale La sperimentazione nel Comune di Cuneo Pier Angelo Mariani Settore Elaborazione Dati Comune di Cuneo Perchè questa presentazione Il Comune di Cuneo, aderente alla RUPAR, ha ricevuto due

Dettagli

13. Campi vettoriali

13. Campi vettoriali 13. Campi vettoriali 1 Il campo di velocità di un fluido Il concetto di campo in fisica non è limitato ai fenomeni elettrici. In generale il valore di una grandezza fisica assegnato per ogni punto dello

Dettagli

Corso di Matematica per la Chimica

Corso di Matematica per la Chimica Dott.ssa Maria Carmela De Bonis a.a. 203-4 I sistemi lineari Generalità sui sistemi lineari Molti problemi dell ingegneria, della fisica, della chimica, dell informatica e dell economia, si modellizzano

Dettagli

Probabilità discreta

Probabilità discreta Probabilità discreta Daniele A. Gewurz 1 Che probabilità c è che succeda...? Una delle applicazioni della combinatoria è nel calcolo di probabilità discrete. Quando abbiamo a che fare con un fenomeno che

Dettagli

Elementi di Psicometria con Laboratorio di SPSS 1

Elementi di Psicometria con Laboratorio di SPSS 1 Elementi di Psicometria con Laboratorio di SPSS 1 29-Analisi della potenza statistica vers. 1.0 (12 dicembre 2014) Germano Rossi 1 germano.rossi@unimib.it 1 Dipartimento di Psicologia, Università di Milano-Bicocca

Dettagli

Scambio delle chiavi. mercoledì 7 dicembre 2011

Scambio delle chiavi. mercoledì 7 dicembre 2011 Scambio delle chiavi 1 mercoledì 7 dicembre 2011 Distribuzione della chiave Dati due terminali A e B, si possono avere varie alternative per la distribuzione delle chiavi. 1. A sceglie una chiave e la

Dettagli

Informatica. Rappresentazione dei numeri Numerazione binaria

Informatica. Rappresentazione dei numeri Numerazione binaria Informatica Rappresentazione dei numeri Numerazione binaria Sistemi di numerazione Non posizionali: numerazione romana Posizionali: viene associato un peso a ciascuna posizione all interno della rappresentazione

Dettagli

Uso di base delle funzioni in Microsoft Excel

Uso di base delle funzioni in Microsoft Excel Uso di base delle funzioni in Microsoft Excel Le funzioni Una funzione è un operatore che applicato a uno o più argomenti (valori, siano essi numeri con virgola, numeri interi, stringhe di caratteri) restituisce

Dettagli

OCCUPATI SETTORE DI ATTIVITA' ECONOMICA

OCCUPATI SETTORE DI ATTIVITA' ECONOMICA ESERCIZIO 1 La tabella seguente contiene i dati relativi alla composizione degli occupati in Italia relativamente ai tre macrosettori di attività (agricoltura, industria e altre attività) negli anni 1971

Dettagli

Coordinazione Distribuita

Coordinazione Distribuita Coordinazione Distribuita Ordinamento degli eventi Mutua esclusione Atomicità Controllo della Concorrenza 21.1 Introduzione Tutte le questioni relative alla concorrenza che si incontrano in sistemi centralizzati,

Dettagli

Firma digitale Definizione

Firma digitale Definizione FIRMA DIGITALE Firma digitale Definizione La definizione di firma digitale è contenuta nel Dlgs. Del 4/04/2006 n.159 che integra il Codice dell amministrazione digitale in vigore dal 1/01/2006. Firma digitale

Dettagli

Funzioni funzione dominio codominio legge argomento variabile indipendente variabile dipendente

Funzioni funzione dominio codominio legge argomento variabile indipendente variabile dipendente Funzioni In matematica, una funzione f da X in Y consiste in: 1. un insieme X detto dominio di f 2. un insieme Y detto codominio di f 3. una legge che ad ogni elemento x in X associa uno ed un solo elemento

Dettagli

Sicurezza a livello IP: IPsec e le reti private virtuali

Sicurezza a livello IP: IPsec e le reti private virtuali Sicurezza a livello IP: IPsec e le reti private virtuali Davide Cerri Sommario L esigenza di proteggere l informazione che viene trasmessa in rete porta all utilizzo di diversi protocolli crittografici.

Dettagli

Laboratorio di Informatica

Laboratorio di Informatica per chimica industriale e chimica applicata e ambientale LEZIONE 4 - parte II La memoria 1 La memoriaparametri di caratterizzazione Un dato dispositivo di memoria è caratterizzato da : velocità di accesso,

Dettagli

4. Operazioni aritmetiche con i numeri binari

4. Operazioni aritmetiche con i numeri binari I Numeri Binari 4. Operazioni aritmetiche con i numeri binari Contare con i numeri binari Prima di vedere quali operazioni possiamo effettuare con i numeri binari, iniziamo ad imparare a contare in binario:

Dettagli

Architettura (10/9/2003) Pag. 1/6. Cognome e Nome (in stampatello):

Architettura (10/9/2003) Pag. 1/6. Cognome e Nome (in stampatello): Architettura (10/9003) Pag. 1/6 Esame di Architettura (matr.0-1) del 10/9003 Per Fondamenti di Architettura NON rispondere Per le domande a risposta multipla cerchiare la risposta scelta. Non alle domande

Dettagli

Corso di Calcolo Numerico

Corso di Calcolo Numerico Corso di Calcolo Numerico Dott.ssa M.C. De Bonis Università degli Studi della Basilicata, Potenza Facoltà di Ingegneria Corso di Laurea in Ingegneria Meccanica Sistemi di Numerazione Sistema decimale La

Dettagli

UNIVERSITÀ DEGLI STUDI DI TERAMO

UNIVERSITÀ DEGLI STUDI DI TERAMO UNIVERSITÀ DEGLI STUDI DI TERAMO CORSO DI LAUREA IN ECONOMIA BANCARIA FINANZIARIA ED ASSICURATIVA (Classe 7) Corso di Matematica per l Economia (Prof. F. Eugeni) TEST DI INGRESSO Teramo, ottobre 00 SEZIONE

Dettagli