[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,"efficiente" significa che può essere eseguito in un dato tempo. Così per esempio, Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,1101110 che è il testo cifrato. E ora, come faccio a decifrarlo? Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Abbiamo appena visto alcuni esempi storici di cifrari, tutti facilmente Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Dunque one time pad è davvero interessante dal punto di vista delle prestazioni: tutto quello che bisogna fare Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,L'algoritmo di decifratura riceve in input chiavi e testi cifrati e restituisce messaggi. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,L'unico requisito è che questi due algoritmi siano consistenti, che soddisfino cioè Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,La cifratura di m usando k, non è altro che l'XOR fra m e k per definizione. In che consiste la decifratura di (k xor m) Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Si chiama "one time pad" OTP (chiave usata una sola volta) e fu inventato da Vernam all'inizio del Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Si tratta spesso di un algoritmo di tipo random il che significa che quando dobbiamo cifrare Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Sostanzialmente faccio la stessa cosa, cioè decifro un testo cifrato usando Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Spero che tutti voi abbiate capito che infatti dato un messaggio e il Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Vi ricordo che l'XOR, questo + con un cerchio significa addizione Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,XOR m, il che , visto che come sapete k XOR k vale 0 e 0 XOR m vale m qualunque sia m, Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,XX secolo. Prima di spiegarvi effettivamente in che cosa consiste, Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,a farvi riferimento mettendo le virgolette e, come ho già detto, chi è più incline alla teoria Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,ad inviare anche soltanto ad inviare il primo bit del messaggio, deve trasmettere a Bo una chiave che Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,all'algoritmo E si può richiedere di impiegare un tempo inferiore al minuto per cifrare un gigabyte di Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,altrimenti non è possibile decifrare. Una cosa che voglio sottolineare è Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,bit, cioè di caratteri 0 e 1. Anche lo spazio delle chiavi è sostanzialmente lo stesso dei messaggi Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,che chiamerò K, e qualche volta lo chiamerò anche spazio delle chiavi Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,che dobbiamo fare è verificare che siano soddisfatti i requisiti di consistenza. Ora Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,che sono sostanzialmente lunghe quanto il messaggio. Così se Alice e Bob vogliono comunicare Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,che è il risultato della cifratura del messaggio con una data chiave, è semplicemente Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,che è l'insieme di tutte le chiavi possibili. C'è poi l'insieme di tutti i possibili messaggi e anche Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,che è stato cifrato usando una chiave particolare ottengo Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,come un limite di tempo effettivo. Un altro commento che voglio fare è relativo all'algoritmo E. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,coppia di "efficienti" algoritmi E e D. E è l'algoritmo di cifratura; D è Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,dalla randomizzazione usata dall'algoritmo. OK, ora che sappiamo Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,data la coppia m e c, potete pensare di ricavare la chiave one time pad che è stata usata Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,dati. Comunque, la parola "efficiente" può essere interpretata in entrambi i modi e ciascuno può Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,deve essere lunga quanto il messaggio. Bene, se lei avesse un modo per inviare a Bob in modo sicuro una chiave Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,di sicurezza del cifrario fra un attimo. Prima, consentitemi di porvi rapidamente Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,difficile da usare in pratica. Il motivo è che è difficile usare chiavi Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,due algoritmi. Abbiamo un algoritmo per cifrare e un algoritmo per decifrare. Ma Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,e per ogni chiave dell'insieme delle chiavi. Il che vale a dire che se criptiamo Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,ed è anch'esso l'insieme di tutte le stringhe binarie di lunghezza n. Quindi una chiave nel sistema OTP Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,equazione di consistenza e ogni cifrario, può essere considerato tale, solo se la soddisfa Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,esattamente l'insieme di tutte le stringhe binarie di n bit cioé tutte le sequenze di Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,ha significati diversi per persone diverse. Per coloro più inclini alla Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,i messaggi, l'algoritmo E genera un insieme di bit bit casuali che poi Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,il cifrario di Vernam (per il one-time-pad) coincide con lo spazio dei messaggi cifrati che è Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,il cifrario funziona il che in realtà è molto semplice. Quindi, essenzialmente il testo cifrato Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,il corrispondente testo cifrato è molto facile risalire alla chiave. In particolare la chiave è Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,il messaggio M. Cosa succede nel nostro caso? Vediamolo. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,il messaggio originale da cui eravamo partiti. Questa uguaglianza è ciò che chiamiamo Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,il messaggio stesso. Per cui il fatto che la chiave sia lunga quanto il messaggio è davvero Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,il motivo per cui ho virgolettato la parola "efficiente". La ragione è che la parola "efficiente" Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,in effetti, una cifrario viene definito su una terna. Così: l'insieme di tutte le possibili chiavi Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,in maniera sicura, voi sapete che Alice vuole inviare un messaggio a Bob, prima di cominciare Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,interpretarla nel modo che gli è più congeniale. In ogni caso io continuerò Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,l'XOR delle due parti. Basta semplicemente eseguire l'XOR fra K ed M, vediamone un veloce esempio Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,l'algoritmo di decifratura. Naturalmente, E riceve in input chiavi e messaggi e restituisce testi cifrati. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,l'algoritmo di decifrazione è sempre deterministico. In altre parole, data Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,l'ambiente su cui il cifrario viene definito. E allora il cifrario stesso è una Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,l'insieme di tutti i possibili messaggi cifrati. OK, così questa terna definisce in qualche modo Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,la chiave e il testo cifrato l'output è sempre il medesimo, perché non dipende in alcun modo Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,la interpreterà come tempo polinomiale, gli altri invece la interpreteranno Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,la stessa lunghezza del messaggio da cifrare. OK, ora che abbiamo Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,lo farò lentamente una volta e d'ora in avanti assumerò che questo sia semplice Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,lunga quanto il messaggio, allora potrebbe usare lo stesso metodo per trasmettere anche Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,ma non ci dice nulla sulla sicurezza del cifrario. E noi parleremo Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,meglio cosa si intende per cifrario, voglio mostrarvi il primo esempio di cifrario sicuro. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,modulo 2. Quindi se io ho un dato messaggio, diciamo 0110111 e prendiamo Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,ne vedremo la ragione un po' più avanti nella lezione. Bene. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,per cifrario. Quindi, innanzi tutto, ricordiamo che un cifrario è composto da Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,per generare c partendo da m? Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,per voi. Quindi facciamolo, dobbiamo essere certi che se decifro un testo Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,precisato su che cosa il cifrario è definito, possiamo passare specificare come Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,problematico e rende one-time pad un metodo difficile da usare in pratica. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,progettati. Ma prima di fare ciò, voglio definire, prima di tutto, più precisamente cosa si intende Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,quella che viene detta proprietà di correttezza. E questo per ogni messaggio dell'insieme dei messaggi Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,semplicemente m XOR c. Allora vedremo che se non è immediatamente ovvio Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,sia cifrando che decifrando messaggi molto lunghi. Sfortunatamente è molto Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,stringhe. In altre parole, eseguiamo l'addizione modulo 2 bit per bit. Quindi otteniamo Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,teoria, "efficiente" significa che può essere eseguito in un tempo polinomiale. Pertanto gli algoritmi E e D devono essere eseguiti in Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,tutto ciò che avete è il messaggio m e il testo cifrato c. La mia domanda è: Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,un messaggio con una chiave K e poi lo decriptiamo usando la stessa chiave K dobbiamo ottenere Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,un messaggio m e la cifratura del messaggio stesso ottenuta usando one-time pad. Così Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,un tempo polinomiale qualunque sia l'input che ricevono. Per le persone più inclini alla pratica Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,un'addizione modulo 2, l'addizione gode della proprietà associativa, quindi equivale a calcolare (k XOR k) Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,una chiave particolare, diciamo 1011001, per eseguire la cifratura del messaggio Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,una domanda, per essere certi che siamo sincronizzati. Supponete di avere Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,una particolare chiave, quello che faccio è un XOR fra una chiave e il testo cifrato. Così tutto ciò Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,usando k? Non è altro che l'XOR fra k e (k XOR m). Perciò visto che ho detto che XOR è Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,usando questa chiave, basta calcolare l'XOR di queste due Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,utilizza per effettuare al cifratura vera e propria del messaggio che gli è stato fornito in input. Invece Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,violati, passiamo ora a parlare di cifrari meglio Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,voglio riferirlo alla terminologia che abbiamo appena visto. Quindi, lo spazio dei messaggi per Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,è eseguire l'XOR fra la chiave e il messaggio quindi è un cifrario super super veloce Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,è semplicemente m. OK, questo effettivamente dimostra che one-time pad è davvero un cifrario, Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,è semplicemente un lunga stringa di tipo random, cioè una sequenza casuale di bit che ha