< Return to Video

Stream ciphers usati nel mondo reale (20 min)

  • 0:00 - 0:04
    In questa sezione, voglio dare alcuni esempi di stream cipher che vengono effettivamente utilizzati
  • 0:04 - 0:07
    Inizierò con due vecchi esempi che in realtà non
  • 0:07 - 0:11
    si suppone vengano utilizzati in nuovi sistemi. Comunque, essi sono ancora piuttosto largamente utilizzati
  • 0:11 - 0:14
    e quindi voglio citarne semplicemente i nomi, in modo che voi possiate famigliarizzare con
  • 0:14 - 0:19
    questi concetti. Il primo stream cipher di cui voglio parlarvi è chiamato RC4, progettato
  • 0:19 - 0:23
    nel lontano 1987. Ve ne darò una descrizione ad alto livello e quindi
  • 0:23 - 0:28
    parleremo di alcune debolezze di RC4 e ci fermeremo lì. RC4 utilizza
  • 0:28 - 0:33
    un seme di lunghezza variabile; qui ho presentato un esempio dove sono stati utilizzati 128
  • 0:33 - 0:37
    bit come lunghezza del seme, che verrà utilizzato come chiave per lo stream cipher.
  • 0:37 - 0:42
    La prima cosa che fa, è espandere la chiave segreta di 128 but in un 2.048 bit, che
  • 0:42 - 0:46
    verranno utilizzati come stato interno per il generatore. Quindi, una volta che questa espansione è stata terminata,
  • 0:46 - 0:51
    esso esegue in pratica un loop molto semplice, dove ogni iterazione produce come
  • 0:51 - 0:56
    output un byte. Quindi, essenzialmente, voi potete far eseguire il generatore per
  • 0:56 - 1:01
    quanto tempo vogliate e generare un byte alla volta. Ora, RC4 è in pratica, come ho detto,
  • 1:01 - 1:05
    largamente popolare. Viene utilizzato in realtà piuttosto comunemente nel protocollo HTTPS.
  • 1:05 - 1:12
    In questi giorni, ad esempio, Google usa RC4 nel suo HTTPS. Viene utilizzato anche nel WEP, come abbiamo
  • 1:12 - 1:16
    discusso nell'ultima sezione, ma ovviamente in WEP esso è usato in maniera sbagliata e
  • 1:16 - 1:19
    il modo in cui viene utilizzato in WEP è assolutamente insicuro. Così, nel corso degli anni,
  • 1:19 - 1:24
    sono state trovate alcune debolezze in RC4 a, di conseguenza, si raccomanda che i nuovi progetti
  • 1:24 - 1:29
    non usino in effetti RC4, ma piuttosto un generatore pseudo-random più moderno, come
  • 1:29 - 1:34
    discuteremo verso la fine della sezione. QUindi, lasciatemi citare due delle debolezze.
  • 1:34 - 1:40
    La prima si trova (è qualcosa di bizzarro, fondamentalmente): se guardate al secondo byte
  • 1:40 - 1:45
    dell'output di RC4. Risulta che il secondo byte è leggermente polarizzato. Se RC4 fosse
  • 1:45 - 1:50
    completamente random, la probabilità che il secondo byte sia zero
  • 1:50 - 1:55
    sarebbe esattamente l'inverso di 256. Ci sono 256 possibili byte, la probabilità che
  • 1:55 - 2:00
    sia zero dovrebbe essere uno su 256. Succede invece che per RC4 la probabilità sia
  • 2:00 - 2:04
    in effetti due su 256, che significa che se usate l'output di RC4 per criptare un
  • 2:04 - 2:10
    messaggio, il secondo byte sia possibilmente non criptato del tutto. In altre parole, esso
  • 2:10 - 2:15
    sarà in XOR con zero due volte la probabilità che si suppone debba succedere.
  • 2:15 - 2:19
    Quindi, due su 256 invece che uno su 256. E, tra l'altro, dovrei dire che non c'è
  • 2:19 - 2:23
    nulla di speciale circa il secondo byte. Risulta però che anche il primo e il terzo byte
  • 2:23 - 2:28
    sono anche polarizzati. E' infatti ora raccomandato che se intendete usare RC4
  • 2:28 - 2:33
    ciò che dovreste fare è in pratica ignorare i primi 256 byte dell'output e giusto
  • 2:33 - 2:37
    iniziare usando l'output del generatore iniziando dal byt 257. La prima coppia
  • 2:37 - 2:41
    di byte risultano essere polarizzati, quindi semplicemente ignorateli. Il secondo attacco che
  • 2:41 - 2:48
    venne scoperto è che in effetti, se guardate a un output molto lungo di RC4, capita che
  • 2:48 - 2:54
    sia più facile ottenere la sequenza 00. In altre parole, è più facile
  • 2:54 - 2:59
    che otteniate sedici bit (due byte) di zero di quanto dobbiate. Di nuovo, se RC4
  • 2:59 - 3:04
    fosse completamente random, la probabilità di vedere zero, zero sarebbe esattamebte il quadrato di 1/256.
  • 3:04 - 3:09
    Risulta che RC4 è leggermente polarizzato e la polarizzazione sia il cubo di 1/256.
  • 3:09 - 3:14
    Risulta che questa polarizzazione in effetti inizi dopo che diversi GByte di dati siano stati prodotti
  • 3:14 - 3:19
    da RC4. Ma ciononostante, questo è qualcosa che può essere usato per predirre il generatore e
  • 3:19 - 3:23
    in definitiva può essere usato per distinguere l'output del generatore
  • 3:23 - 3:28
    da una vera sequenza casuale. Fondamentalmente, il fatto che zero, zero appaia più spesso
  • 3:28 - 3:32
    di quanto dovrebbe è il discriminante. E quindi nell'ultima sezione abbiamo parlato degli
  • 3:32 - 3:36
    attacchi basati su chiavi connesse che sono stati usati per attaccare WEP, che in pratica dicono che se
  • 3:36 - 3:41
    qualcuno usa chiavi che sono strettamente connesse l'una con l'altra, allora è in effetti possibile
  • 3:41 - 3:46
    recuperare la chiave principale. Quindi queste sono debolezze che sono conosciute per RC4 e quindi
  • 3:46 - 3:50
    si raccomanda che nuovi sistemi in effetti non usino RC4 e invece usino
  • 3:50 - 3:54
    generatori pseudo-casuali moderni. OK, il secondo esempio che voglio darvi è uno
  • 3:54 - 3:59
    stream cipher usato per criptare film DVD malamente scardinato. Quando comprate un DVD
  • 3:59 - 4:04
    in negozio, il film è criptato usando uno stream cipher chiamato
  • 4:04 - 4:08
    sistema di scrambling del contenuto (CSS, Content Scrambling System). CSS risulta essere uno stream cipher malamente scardinato,
  • 4:08 - 4:13
    e possiamo scardinarlo molto semplicemente. Ora voglio mostrarvi come funziona l'algoritmo di attacco.
  • 4:13 - 4:17
    Faro' in modo di mostrarvi un esempio di algoritmo di attacco, ma,
  • 4:17 - 4:21
    in effetti, ci sono molti system che fondamentalmente usano questo attacco per decrittare
  • 4:21 - 4:26
    DVD criptati. Lo stream cipher CSS è basato su qualcosa che piace
  • 4:26 - 4:30
    ai progettisti hardware. E' progettato per essere uno stream cipher che si suppone
  • 4:30 - 4:34
    sia facilmente implementabile in hardware ed è basato su un meccanismo chiamato registro di scorrimento a retroazione
  • 4:34 - 4:39
    lineare. Un registro a scorrimento con retroazione lineare è fondamentalmente un registro
  • 4:39 - 4:44
    che consiste in celle, dove ogni cella contiene un bit.
  • 4:44 - 4:49
    Ciò che succede è che ci sono rubinetti in alcune celle (non tutte), cioè certe
  • 4:49 - 4:54
    possizioni vengono chiamate "rubinetti". Questi rubinetti alimentano uno XOR e quindi
  • 4:54 - 4:59
    ad ogni colpo di clock, il registro scorre di un bit a sinistra. L'ultimo bit di sinistra viene scartato
  • 4:59 - 5:04
    e quindi il primo bit diventa il risultato di questo XOR. Potete quindi vedere che
  • 5:04 - 5:09
    questo è un meccanismo molto semplice da implementare e in hardware impiega veramente
  • 5:09 - 5:14
    pochi transistors. Giusto lo scorrimento, lo scarto dell'ultimo bit e l'aggiunta di un but
  • 5:14 - 5:19
    che diventa lo XOR di alcuni bits precedenti. Ciò che serve a questo registro è
  • 5:19 - 5:23
    fondamentalmente lo stato iniziale.
  • 5:24 - 5:29
    E questo è la base di un certo numero di stream ciphers. Qui vengono presentati alcuni esempi.
  • 5:29 - 5:33
    Come ho detto, la crittografia dei DVD usa due registri di questo tipo. Vi mostrerò come funziona tra un secondo.
  • 5:33 - 5:38
    Per quanto riguarda la crittografia GSM, ci sono algoritmi chiamati A51 e A52. E questi
  • 5:38 - 5:43
    usano tre registri di questo tipo. La crittografia Bluetooth è un algoritmo chiamato E zero. Questi sono tutti
  • 5:43 - 5:49
    stream ciphers, ed usano tutti quattro registri di questo tipo. Risulta che tutti questi cifratori sono stati scardinati malamente ed
  • 5:49 - 5:53
    in realtà non dovrebbero assolutamente essere considerati attendibili per traffico cifrato, ma sono tutti
  • 5:53 - 5:57
    implementati in hardware, quindi è alquanto difficile oggi cambiare ciò che viene fatto in hardware.
  • 5:57 - 6:01
    Ma il più semplice di tutti, CSS, in realtà ha un attacco carino che funziona su di esso, quindi lasciatemi
  • 6:01 - 6:05
    descrivere come funziona questo attacco. Prima di tutto vediamo come effettivamente funziona CSS.
  • 6:05 - 6:11
    la chiave di CSS è di cinque bytes, cioè 40 bits (5 volte 8 bit è 40 bit).
  • 6:11 - 6:16
    La ragione per cui hanno dovuto limitarsi a solo 40 bitsè che la cifratura dei DVD è stata progettata
  • 6:16 - 6:20
    in tempi in cui la legislazione per l'esportazione negli US permetteva solo di esportare algoritmi
  • 6:20 - 6:25
    di cifratura dove la chiave fosse solo di 40 bits. Quindi i progettisti di CSS
  • 6:25 - 6:30
    erano già limitati a chiavi molto, motlo corte. Solo 40 bits. Quindi il loro progetto funziona
  • 6:30 - 6:35
    in questo modo. Fondamentalmente, CSS usa due registri a scorrimento. Uno è a 17 bit. In altre parole
  • 6:35 - 6:41
    il registro contiene 17 bit. E l'altro è di 25 bit.
  • 6:41 - 6:47
    un pò più lungo, 25 bit. E il modo in cui questi registri vengono alimentati
  • 6:47 - 6:52
    è il seguente. Quindi la chiave per la cifratura, fondamentalmente è come segue.
  • 6:52 - 6:58
    Si inizia con un uno, che viene concatenato con i primi due byte
  • 6:58 - 7:03
    della chiave. E questo è lo stato iniziale del registro.
  • 7:03 - 7:08
    Il secondo registro fondamentalmente viene inizializzato nello stesso modo.
  • 7:08 - 7:14
    uno concatenato con gli ultimi tre byte della chiave. E questo
  • 7:14 - 7:20
    viene caricato nello stato iniziale del registro. Potete vedere che i primi due byte
  • 7:20 - 7:25
    sono 16 bit, più il primo 1, che sono 17 bit in tutto, mentre il secondo
  • 7:25 - 7:31
    registro è di 24 bit più un 1 che fa 25 bit. Notate che abbiamo usato tutti i cinque bit
  • 7:31 - 7:37
    della chiave. Quindi questi registri vengono fatti scorrere per otto cicli, generando
  • 7:37 - 7:42
    8 bit di output. Quindi questi bit vanno un un sommatore che fa in pratica una
  • 7:42 - 7:48
    somma modulo 256. Corretto, questa è un blocco di addizione modulo 256. C'è inoltre un'altra cosa
  • 7:48 - 7:54
    che succede. Infatti Infatti... viene aggiunto anche una parte derivante
  • 7:54 - 8:00
    dal blocco precedente. Ma questo non è importante. Questo è un dettaglio che non è rilevante.
  • 8:00 - 8:05
    OK, qundi in ogni blocco notate che facciamo un'addizione modulo 256
  • 8:05 - 8:10
    e stiamo ignorando la parte derivante dal blocco precedente, che però è semplicemente l'addizione di uno 0 o un 1
  • 8:10 - 8:15
    all'addizione del blocco successivo. OK? Quindi in pratica questo produce un byte per ciclo.
  • 8:15 - 8:20
    OK, quindi questo byte viene ovviamente usato, messo in XOR con il relativo
  • 8:20 - 8:25
    byte del film che è stato criptato. OK, quindi questo è uno stream cipher molto semplice e
  • 8:25 - 8:30
    impiega molto poco hardware per essere implementato. Viene eseguito velocemente, persino su
  • 8:30 - 8:36
    hardware molto economico e può criptare film. Risulta che questo sia facilmente scardinabile in un tempo
  • 8:36 - 8:41
    proporzionale a 2 alla 17. Lasciatemi mostrare come.
  • 8:41 - 8:46
    Supponiamo che voi intercettiate il film. Quindi abbiamo un
  • 8:46 - 8:51
    film criptato e voi volete decrittarlo. Quindi, diciamo che questo e completamente criptato in modo
  • 8:51 - 8:55
    che non abbiate alcuna idea di cosa ci sia dentro. Comunque, si da il caso che, poichè
  • 8:55 - 9:00
    la cifratura DVD usa file MPEG, succede che voi sappiate il prefisso del
  • 9:00 - 9:04
    file in chiaro, diciamo una ventina di byte. Bene, sappiamo che se fate lo XOR
  • 9:04 - 9:09
    di queste due cose insieme, cioè in altre parole, fate lo XOR qui,
  • 9:09 - 9:14
    Ciò che ottenete è il segmento iniziale del PRG. Quindi voi ottenete
  • 9:14 - 9:18
    i primi 20 byte dell'output del CSS, l'output di questo PRG. OK, quindi
  • 9:18 - 9:24
    ora questo è ciò che faremo. Abbiamo i primi 20 bytes dell'output. Ora
  • 9:24 - 9:31
    faremo ciò che segue. Tentiamo tutti i 2^17 possibili valori del primo
  • 9:31 - 9:37
    registro. OK? Quindi tutti i 2^17 valori. Per ogni tentativo, cioè
  • 9:37 - 9:43
    per ognuno di questi 2^17 valori iniziali del registro, faremo scorrere
  • 9:43 - 9:48
    i registri per venti byte, ok? Quindi genereremo 20 byte di output da questo
  • 9:48 - 9:53
    primo registro, assumendo... per ognuno dei 2^17 possibili settaggi.
  • 9:53 - 9:59
    Ora, considerate che conosciamo l'output completo del sistema CSS, Quindi ciò cjhe possiamo fare è
  • 9:59 - 10:04
    prendere questo output che conosciamo e sottrarlo dai venti byte che
  • 10:04 - 10:09
    abbiamo ottenuto dal primo registro. Se in effetti il nostro tentativo per lo stato iniziale del primo registro
  • 10:09 - 10:14
    è corretto, ciò che dovremmo ottenere sono i primi 20 byte del
  • 10:14 - 10:19
    secondo registro. Giusto? Perchè questo è per definizione l'output del sistema CSS.
  • 10:19 - 10:25
    Ora, risulta che guardando la sequenza di 20 byte, è molto semplice
  • 10:25 - 10:30
    dire se questa sequenza di 20 byte è uscita dal secondo registro oppure no. Se non lo è
  • 10:30 - 10:34
    sappiamo che il nostro tentativo per il primo registro a 17 bit era
  • 10:34 - 10:37
    incorretto e quindi andiamo avanti con il prossimo tentativo per il registro a 17 bit e
  • 10:37 - 10:42
    quindi quello successivo e così via. Finchè alla fine indoviniamo lo stato iniziale corretto
  • 10:42 - 10:47
    pòer il registro a 17 bit e quindi siamo arrivati, vedremo che
  • 10:47 - 10:52
    i 20 byte che otteniamo come output candidato dal registro a 25 bit è
  • 10:52 - 10:57
    in effetti un possibile output per il registro a 25 bit. E ora, non solo abbiamo
  • 10:57 - 11:02
    imparato il corretto stato iniziale per il registro a 17 bit, noi avremo anche
  • 11:02 - 11:08
    imparato il corretto stato iniziale del registro a 25 bit. E quindi possiamo predirre l'output
  • 11:08 - 11:13
    rimanente del CSS e, ovviamnte, usando questo, possiamo decrittare il resto del
  • 11:13 - 11:18
    film. Possiamo recuperare la rimanente parte in chiaro. Ok. Questo è ciò
  • 11:18 - 11:22
    di cui abbiamo parlato prima. L'ho spiegato un pò velocemente, ma, spero, chiaramente.
  • 11:22 - 11:27
    Stiamo per fare un esercizio come compito a casa su questo tipo di stream ciphers
  • 11:27 - 11:31
    e voi potrete capire come questi algoritmi di attacco
  • 11:31 - 11:36
    funzionano. Dovrei dire che ci sono diversi sistemi open-source oggi che in realtà
  • 11:36 - 11:41
    usano questo metodo per decrittare dati criptati con CSS. OK, quindi ora che abbiamo visto due
  • 11:41 - 11:46
    esempi deboli, spostiamoci verso esempi migliori, e in particolare
  • 11:46 - 11:49
    i generatori pseudo-random che vengono da quello che viene chiamato il Progetto eStream. Questo è un
  • 11:49 - 11:56
    progetto che si è concluso nel 2008 e che ha qualificato cinque diversi stream
  • 11:56 - 12:00
    cipher, ma qui voglio presentarne solo uno. Prima di tutto, i parametri per
  • 12:00 - 12:04
    questi stream cipher sono un pò diversi da quelli a cui siamo abituati. Questi
  • 12:04 - 12:08
    stream cipher di norma hanno un seme. Ma inoltre hanno anche ciò
  • 12:08 - 12:13
    che viene chiamato un nonce e vedremo come viene usato un nonce tra giusto un minuto. Quindi,
  • 12:13 - 12:17
    si prendono due input, un seme e un nonce. Vedremo come viene usato un nonce tra
  • 12:17 - 12:21
    giusto un secondo. Si produce ovviamente un output molto grande, quindi n è ora
  • 12:21 - 12:27
    molto, ma molto più grande di s. Ora, quando dico nonce, cosa intendo è un valore che non si ripeterà
  • 12:27 - 12:31
    mai finchè rimane fissata la chiave. Spiegherò tutto questo tin maggiori
  • 12:31 - 12:35
    dettagli tra giusto un secondo. Ma per ora, pensate solo ad esso come ad un valore unico che mai
  • 12:35 - 12:41
    si ripeta finchè la chiave è la stessa. E quindi, ovviamente, una volta che avete questo PRG (generatore pseudo-causale)
  • 12:41 - 12:45
    potrete cifrare e otenere uno stream cipher come prima, eccetto che ora, come vedete, il
  • 12:45 - 12:50
    PRG prende come input sia la chiave che il nonce. E la proprietà del nonce è
  • 12:50 - 12:56
    che la coppia (k,r), cioè (chiave,nonce) non si ripete mai. Non viene
  • 12:56 - 13:03
    mai usata più di una volta. Quindi la conclusione è che potete riusare la chiave,
  • 13:03 - 13:10
    riusare la chiave, perchè il nonce rende la coppia unica, perchè k ed r sono usati
  • 13:10 - 13:16
    solo una volta. Cioè sono unici. Ok, quindi questo nonce è qualcosa come uno stratagemma simpatico che
  • 13:16 - 13:22
    ci risparmia la necessità di utilizzare una nuova chiave ogni volta. ok, l'esempio particolare
  • 13:22 - 13:26
    che proviene da eStream che voglio mostrarvi è chiamato Salsa20. E' uno
  • 13:26 - 13:30
    stream cipher che è stato progettato per implementazioni sia hardware che software.
  • 13:30 - 13:33
    E' piuttosto interessante. Capite che alcni stream ciphers sono
  • 13:33 - 13:39
    progettati per implementazioni software, come RC4. Tutto ciò che fa è progettato per rendere
  • 13:39 - 13:43
    l'implementazione software molto veloce, mentre altri stream ciphers sono progettati
  • 13:43 - 13:48
    per l'hardware, come il CSS, usando un registro di scorrimento che è particolarmente progettato per rendere
  • 13:48 - 13:51
    l'implementazione hardware molto economica. La cosa interessante in questo senso è che
  • 13:51 - 13:55
    esso è progettato in modo che sia semplice da implementare in hardware e che la sua
  • 13:55 - 14:00
    implementazione software sia anche molto veloce. Quindi lasciatemi spiegare come funziona Salsa. Bene, Salsa
  • 14:00 - 14:05
    prende chiavi a 128 o a 256 bit. Spiegherò solo la versione di Salsa a 128 bit.
  • 14:05 - 14:11
    Quindi, questo è il seme. E prende anche un nonce, come prima, che
  • 14:11 - 14:15
    risulta essere di 64 bit. Quindi genera un output lungo. Ora, come funziona
  • 14:15 - 14:21
    realmente? Bene, la funzione stessa è definita nel modo seguente. Fondamentalmente, data
  • 14:21 - 14:26
    la chiave e il nonce, esso genererà una sequenza pseudorandom molto lunga.
  • 14:26 - 14:31
    cioè lunga quanto necessario. E lo farà usando questa funzione che chiamerò
  • 14:31 - 14:36
    H. Questa funzione H prende tre input. Fondamentalmente la chiave, il seme,
  • 14:36 - 14:40
    il nonce r e un contatore che incrementa passo passo. Cioè va
  • 14:40 - 14:45
    da zero a uno, due, tre, quattro finchè serve. Ok? Quindi, fondamentalmente,
  • 14:45 - 14:50
    calcolando questo H su questi k ed r, ma usando questo contatore incrementale, possiamo ottenere
  • 14:50 - 14:55
    una sequenza che è lunga quanto ci serve. Quindi, tutto ciò che devo fare è descrivere come funziona questa funzione
  • 14:55 - 14:59
    H. Ora, lasciatemi fare questo per voi. Il modo in cui funziona è il seguente. Bene, partiamo
  • 14:59 - 15:05
    espandendo gli stati in qualcosa di piuttosto largo che è lungo 64 byte
  • 15:05 - 15:10
    e lo facciamo nel modo seguente. Fondamentalmente prendiamo una costante all'inizio, quindi
  • 15:10 - 15:16
    c'è una tao di zero, fatta di quattro bytes, cioè è una costante di quattro byte. Le specifiche di Salsa vi
  • 15:16 - 15:21
    danno il valore per questa tao di zero. Quindi mettiamo k in 16
  • 15:21 - 15:25
    bytes. Quindi mettiamo un'altra costante. Di nuovo di quattro byte. E, come ho detto,
  • 15:25 - 15:31
    la specifica specifica anche questa costante fissa. Quindi mettiamo
  • 15:31 - 15:37
    il nonce, che è di otto byte. Quindi mettiamo l'indice. Questo è il contatore zero,
  • 15:37 - 15:43
    uno, due, tre, quattro che è di nuovo fatto da otto byte. Quindi mettiamo un'altra costante
  • 15:43 - 15:49
    tau due, che sono altri quattro byte. Quindi mettiamo la chiave di nuovo, che fanno
  • 15:49 - 15:55
    altri sedici byte. E quindi infine mettiamo la terza costante, tau tre, che sono
  • 15:55 - 16:00
    altri quattro byte. Ok, quindi, come ho detto, se sommato tutto questo, vedete che ottenete 64 byte.
  • 16:00 - 16:05
    Quindi, fondamentalmente, abbiamo sepanso la chiave e il nonce e il contatore fino a 64
  • 16:05 - 16:11
    byte. Fondamentalmente la chiave viene ripetuta due volte. E quindi quello che facciamo è applicare
  • 16:11 - 16:16
    la funzione. Chiamerò questa funzione h piccolo. Ok, qindi applichiamo questa funzione h piccolo.
  • 16:16 - 16:22
    E questa è una funzione che è uno a uno, quindi mappa 64 byte in 64 byte. E'
  • 16:22 - 16:26
    una funzione completamente invertibile, ok? Quindi, questa funzione h è, come ho detto, una
  • 16:26 - 16:30
    funzione invertibile. Quindi, dato l'iinput voi ottenete l'output e dato
  • 16:30 - 16:35
    l'output voi potete ritornare all'input. Ed è progettata specificatamente in questo modo, quindi è a - facilmente
  • 16:35 - 16:40
    implementabile in hardware e b- su un x86 è estremamente facile da implementare, perchè
  • 16:40 - 16:44
    x86 ha questo insieme di istruzioni SSE2 che supporta tutte le operazioni di cui avete bisogno per fare
  • 16:44 - 16:49
    questa funzione. Ed è molto, molto veloce. Di conseguenza, Salsa è uno stream cipher molto veloce.
  • 16:49 - 16:53
    E queste operazioni vengono fatte ancora e ancora. Quindi si applica la funzione
  • 16:53 - 16:58
    h ancora e si ottiengono altri 64 bytes. E via di seguito, fondamentalmente
  • 16:58 - 17:05
    lo si fa dieci volte. ok, l'intera operazione è quindi ripetere 10 volte, cioè applicare
  • 17:05 - 17:18
    10 volte la funzione h. Quindi, di per se stessa, non è in effetti molto random.
  • 17:18 - 17:22
    Non sembra random perchè, come abbiamo detto, H è completamente invertibile. Quindi dato
  • 17:22 - 17:26
    l'output finale, è mlto semplice invertire h e quindi tornare indietro agli input originali
  • 17:26 - 17:32
    e quindi verificare che l'input ha la struttura corretta. Quindi si fa un'altra
  • 17:32 - 17:37
    cosa, che è fondamentalmente un XOR tra gli input e gli output finali. In realtà,
  • 17:37 - 17:42
    scusate, non è uno XOR. è in effetti un'addizione. Quindi fate un'addizione parola per parola.
  • 17:42 - 17:48
    Quindi se ci sono 64 byte, fate un'addizione parola per parola a passi di 4 byte
  • 17:48 - 17:53
    e alla fine ottenete l'output di 64 byte e questo è tutto. Questo è l'intero generatore
  • 17:53 - 17:57
    pseudo-random. Quindi questa è l'intera funzione h piccolo. E, come ho
  • 17:57 - 18:02
    spiegato, questa intera costruzione è la funzione H grande. E quindi calcolate
  • 18:02 - 18:06
    H grande incrementando il contatore I da zero, uno, due, tre in avanti. E questo
  • 18:06 - 18:10
    vi fornirà una sequenza pseudo-casuale che è lunga quanto vi serve. E
  • 18:10 - 18:15
    fondamentalmente, non ci sono attacchi significativi su questo algoritmo. Questo ha una sicurezza che è
  • 18:15 - 18:20
    molto vicina a 2 alla 128. edremo cosa significa questo più tardi.
  • 18:20 - 18:25
    E' uno stream cipher molto veloce, sia in hardware che in software. E, per quanto possiamo dirne,
  • 18:25 - 18:30
    esso sembra impredicibile quanto richiesto per uno stream cipher. Quindi
  • 18:30 - 18:35
    dovrei dire che il progetto eStream effettivamente ha cinque stream cipher come
  • 18:35 - 18:39
    questo. Ho scelto Salsa20 perchè pernso sia il più elegante. Ma posso darvi
  • 18:39 - 18:44
    alcuni parametri di performance. Potete vedere che questi sonoparametri di performance su
  • 18:44 - 18:49
    una macchina x86 a 2.2 GHz. E potete vedere che RC4 è effettivmente
  • 18:49 - 18:53
    il più lento. Perchè essenzialmente, beh esso non sfrutta
  • 18:53 - 18:57
    l'hardware. Esso fa solo operazioni su byte. E quindi ci sono molti cicli sprecati
  • 18:57 - 19:01
    che non vengono utilizzati. Ma i candidati eStream, sia Salsa che l'altro dandidato
  • 19:01 - 19:05
    chiamato Sosemanuk, questi sono i finalisti eStream. Questi sono
  • 19:05 - 19:10
    in effetti gli stream ciphers che sono stati approvati dal progetto eStream. Potete vedere che
  • 19:10 - 19:14
    hanno raggiunto una velocità significativa. Questo è 643 MB/s su questa
  • 19:14 - 19:18
    architettura, più del necessario per un video e questi sono in effetti velocità piuttosto impressionanti
  • 19:18 - 19:22
    E quindi, ora avete visto esempi di due vecchi stream ciphers che non dovrebbero più essere usati,
  • 19:22 - 19:27
    compresi gli attacchi su questi stream ciphers. Avete anche visto come sono fatti i moderni stream ciphers
  • 19:27 - 19:30
    con questo nonce. E vedete i numeri di performance per questi
  • 19:30 - 19:35
    moderni stream ciphers. Quindi se vi capita di avere bisogno di uno stream cipher potreste usare uno dei
  • 19:35 - 19:38
    finalisti del progetto eStream. In particolare potreste usare qualcosa come Salsa.
Title:
Stream ciphers usati nel mondo reale (20 min)
Video Language:
English
Sergio Torassa edited Italian subtitles for Real-world stream ciphers (20 min)
Sergio Torassa edited Italian subtitles for Real-world stream ciphers (20 min)
Sergio Torassa edited Italian subtitles for Real-world stream ciphers (20 min)
Sergio Torassa added a translation

Italian subtitles

Revisions