Sicurezza Informatica PDF
Document Details
2024
Tags
Summary
Appunti sulla sicurezza informatica di una lezione. Si parla di attacchi informatici, aggiornamenti, DDoS, SQL injection, cifratura, sicurezza di rete, applicazioni e protocolli TCP/IP. Vengono menzionati anche aspetti economici e mitigazione.
Full Transcript
Lezione 1 01/10/2024 Quando parliamo di attacchi informatici parliamo di sistemi di attacco verticalizzati. Devo conoscere quel sistema nel dettaglio. Sapere i sistemi di attacco. Uno dei problemi più diffusi è l'aggiornamento dove se esiste un thread per quel sistema diventa attaccabile. Un attacc...
Lezione 1 01/10/2024 Quando parliamo di attacchi informatici parliamo di sistemi di attacco verticalizzati. Devo conoscere quel sistema nel dettaglio. Sapere i sistemi di attacco. Uno dei problemi più diffusi è l'aggiornamento dove se esiste un thread per quel sistema diventa attaccabile. Un attacco è il **Distributed Denial of Service(DDoS)** dove sovraccarico il sistema e sto attaccando le sue funzioni normali. Sto usando come pattern di attacco lo stesso pattern di quello normale. È un attacco dove possibilmente non mi fa accettare delle richieste rispetto ad altre. Es. Tutti gli studenti fanno la stessa richiesta contemporaneamente e incomincia il server ad andare fuori uso. Mi posso difendere filtrando , bloccando qualcuno ecc...ma ci sono delle procedure per mitigare. Preferisco diminuire l'impatto e mantenere il servizio rispetto che perderlo ovvero mitigo l'effetto dell'attacco. Non c'è solo l'aspetto tecnico ma anche economico sulla cyber security , perché se si blocca un sito e-commerce si perdono soldi a livello di vendite ad esempio. Parleremo di cifratura nella prima parte, nella seconda la sicurezza di rete , sicurezza nelle applicazioni dove il principio di base è la progettazione ovviamente non sono sicuro assolutamente e non esisterà mai un sistema super sicuro. Prima di tutto devo progettare bene il sistema ed è già una fase di strategia , fare un testing strutturato che vanno dalle cose banali fino a quelle più complicate (J-unit è un esempio dove per sviluppare ci sono delle strategie per rendere più robusto il codice ). Quindi , prima progettiamo bene e poi lo rendiamo sicuro e vale per tutto. Ogni sistema ovviamente ha una propria peculiarità come, ad esempio, nei database con le query. Uno dei problemi è **l'SQL injection** dove forzo con un comando diverso una funzione diversa. I sistemi fanno una POST e una GET (nel GET i parametri stanno nell'URL , POST stanno nel contenuto) , entrambe non aggiungono bit di sicurezza perché entrambe viaggiono in chiaro e quindi leggibili. Per difendermi , potrei utilizzare dei campi dove posso togliere semantica o togliere dei dati cioè cambiarli. Quindi, i protocolli TCP/IP e iPV6 e 8 sono rimasti immutati perché riprogettare da 0 sarebbe infattibile. Le problematiche di cybersecurity però, potrebbero portarci a cambiare idea e a riprogettare la rete. L'infrastruttura di rete è stata progettata all\'inizio senza nemmeno basarci sulla sicurezza. Tutti i protocolli viaggiono in chiaro (WireShark permette di vedere il traffico a livello basso ), lo strumento è il TCP dump (vedo tutti i pacchetti dei livelli che viaggiono ). Da qui è nata la cifratura. Il protocollo standard dove la struttura è rimasta la stessa per la posta elettronica è l 822 ed è rimasto tale e quindi la sicurezza deve essere fondamentale. Con POP è nata un po' di sicurezza con l'utente e password ma era in chiaro, poi è nato POP3 e via via che la posta aumentava è nato IMAP. La mia e-mail è sul server ma devono essere sicuri i miei accessi. Il primo **SMTP** era talmente basic che io potevo spacciarmi per un nodo qualsiasi , e bastava che mi collegassi ad esempio con un tool come Telnet e potevo spacciarmi per un'altra persona. La crittografia già dai tempi passati è stata utilizzata e gli algoritmi che cifrano sono importanti dove se sono ben utilizzati diventano efficienti. Il **Phishing** piuttosto che rompere il sistema ruba la chiave. Un sistema va dal PHY fino al livello applicativo. C'è il problema del database perché è un problema di backend perché i contenuti sono conservati lì in chiaro, o problemi di design dell'applicazione. Il database deve essere perfetto per evitare gli errori con i privilegi di chi vuole accedere. La sicurezza del sistema è la sicurezza minima di tutto il sistema che lo compongono. È l'anello debole che viene attaccato e quindi un sistema meno attaccabile varia anche nel prezzo. (È meglio avere un buon wallet con password robuste rispetto a password meno sicure ). Allora, noi immaginiamo sempre che l'impatto economico dell'investimento è creare l'infrastruttura , e il problema principale è che a volte si risparmia sull'infrastruttura di sicurezza e quindi ci potrebbero essere danni sull'immagine , perdita di informazioni , di servizio , legali ecc\... Devo riuscire a quantificare i danni e soprattutto devo sapere la statistica dei sistemi che vengono attaccati e qui avviene l'aspetto di mitigazione in modo tale da sapere quanto devo spendere per mitigare l'attacco. Chi fa queste analisi è chi gestisce la sicurezza e chi gestisce le analisi economiche. Ci sono anche le assicurazioni , però sempre delle valutazioni si devono fare. **Aldilà di ciò , l'idea è che il sistema sicuro NON esiste.** Bisogna capire quanto è giusto spendere per capire dove migliorare il problema e qual è l'elemento più debole del sistema in modo tale di capire come migliorarlo. Il ruolo dell'aspetto della sicurezza è ovviamente legato al concetto di un team e non di una singola persona. Chi attacca può essere un tizio che ha competenze verticali su quell'elemento , chi difende deve avere competenze su tutto. **CIA** , la c sta per confidenzialità , la i integrità ovvero che quel messaggio deve essere integro e non deve essere stato manomesso , è pubblico ma deve contenere il contenuto originale cioè integro. A sta per autenticità che vuol dire che quell'oggetto è autentico ovvero è effettivamente quello che ho scritto io ,non implica né l'integrità e ne la confidenzialità. L'autenticità la ottengo con il timbro , con la firma ma anche questi possono essere manomessi. Autenticità e integrità sono diverse. Gli altri elementi sono l'availability, cioè il sistema può essere sicuro e tutto ma deve essere disponibile (il problema visto prima del Denial service ), Accountability sono quei meccanismi che mi permettono di ricostruire tutta la storia del documento originario , cioè il fatto che io so quello che ho fatto anche in passato. Il NIST ha preso questi punti chiave per la sicurezza. L'architettura OSI (non è ISO/OSI) è un modello per affrontare la sicurezza. Tra le voci c'è il problema dell'attacco dove qualsiasi persona potrebbe attaccare, i meccanismi sono tutto quell'insieme di cose che progettato per detect , prevenire o recovering ovvero ho subito l'attacco ma devo ricostruire il sistema efficiente e fallo ripartire (backup ovviamente senza virus ). Il servizio security è qualcosa di attivo che tratta il processamento dei dati e quindi la sicurezza, ad esempio una libreria di crittografia permette in maniera trasparente di cifrare i dati ( lo fa la VPN ). Dobbiamo aspettarci che la penetrazione arrivi da livelli più deboli. Il timeliness , ovvero devo proteggere il sistema di informazione fin quando ha un valore economico. L'efficacia, ovvero il valore deve essere efficace, cioè, capire chi lo usa e farlo in maniera ragionevole e non perdere più di quello che è tollerabile da perdere. Il link più vecchio riprende il concetto dell'inizio **Plaintext** : è il messaggio originale , **cyphertext** : è il messaggio modificato. La **criptoanalisi** sono tutte quelle tecniche per cifrare un messaggio e come posso ottenere il contenuto del messaggio senza avere la chiave di cifratura. Quando io ho una sequenza di bit , il primo passo è cercare di capire che cosa è questa sequenza. La criptologia è tutto. Lezione 2 04/10/2024 La problematica di dover trasmettere messaggi riservati o confidenziali utilizzando dei canali aperti, è sempre un problema della sicurezza informatica e ci siamo sempre fidati parzialmente del canale attraverso cui trasmettiamo l'informazione. L\'evoluzione della tecnologia e il cambiamento delle conoscenze incidono in maniera sostanziale sui problemi di cifratura. Ora, quando parliamo di tecniche classiche ci riferiamo appunto a cose tradizionali, storiche e antichissime. Ci sono tracce di sistemi di cifratura o comunque meccanismi di simili già ai tempi dei romani. Passando poi verso la fine dell' 800 , già i nobili comunque utilizzavano alcuni meccanismi per rendere i messaggi segreti, ovviamente qualsiasi meccanismo che oggi pensiamo era molto più complesso ai tempi perché veniva riprodotto su carta, un\'altra considerazione che può essere fatta è che cifrare un messaggio comunque richiede delle conoscenze tecniche, soprattutto nelle versioni cifrari diciamo pre-800, fino alla data del 1900, prevedevano anche competenze linguistiche, cifrare un messaggio era più o meno come tradurre il messaggio in una lingua straniera, che in realtà è in quanto misura una forma di cifratura. Per tutti gli studi che sono stati fatti negli anni per scoprire gli antichi linguaggi, la famosa stele di Rosetta, sono problemi di cifratura o di criptoanalisi, in questo caso, andare a scoprire quello. Ora è chiaro che è un\'area quotidiana e in qualche maniera continuiamo a vederla attuali essenzialmente come una forma di guida a quello che possiamo fare o a capire quelli che possono essere i problemi. L\'altro aspetto fondamentale nei cifrari risale più o meno agli anni posto-bellici, quindi quelli dopo la Seconda Guerra Mondiale, l'avvento dell\'informatizzazione e dell\'informatica e del mondo digitale ha cambiato di nuovo il mondo e l\'ha cambiato in particolare nel contesto della cifratura. Perché? Perché abbiamo cominciato a codificare tutto con il tool. Tutti i cifrari classici partono dal principio che io devo elaborare un alfabeto con un altro alfabeto, caratteri con caratteri, ok? Perché era quello lo strumento? Perché sarebbe stato scomodissimo, senza avere il calcolatore che fa per noi il conto, andare a tradurre quegli elementi in numeri. Oggi è quasi il contrario. Il supporto, immenso con cui andiamo a memorizzare la nostra informazione e codificarla e quindi a costruire anche i cifrari che ovviamente hanno cambiato il loro modo di essere non cito più la lettera A ma cito il numero 43, sequenza di bit che corrisponde al carattere A e naturalmente questo ha cambiato completamente anche i meccanismi con cui vengono fatti. Se volete c\'è sempre stata una base matematica dietro che è diventata più solida e più forte negli anni, in fondo un **cifrario** è una **funzione matematica** che noi vogliamo che sia digettiva, **cioè che ci consente di fare una produzione al contrario in cui introduciamo un terzo concetto, che è quello della chiave**. Ci sono **tre** elementi importanti quando parliamo di cifrario: **testo originale, testo cifrato e la chiave** che mi permette di passare da uno all\'altro senza fatica, dove per fatica parlo di una complessità computazionale. Come nasce quindi la cifratura? Cifratura simmetrica. La **cifratura simmetrica** è stato l\'unico modello di cifratura fino all\'inizio degli anni 50-60 del secolo XX. Quindi è stata "la cifratura", non se ne conoscevano di fatto altre. Qual è la caratteristica della cifratura simmetrica? Che utilizza una sola chiave, la stessa e viene utilizzata sia come informazione per cifrare il testo che come informazione per decifrare il testo. Tuttora, il meccanismo principale con cui vengono cifrati i messaggi, con cui viene adottata la cifratura, con cui giustamente garantiamo la privacy dei messaggi in internet, la confidenzialità, l\'identità, sono ancora cifrari simmetrici. Altri meccanismi comunque non hanno sostituito i cifrari simmetrici, ma si sono integrati. I nostri meccanismi di garanzia della confidenzialità più o meno dovremmo fare un ragionamento che vi parlo di meccanismi, noi partiamo da un algoritmo, che è quello che utilizziamo, costruiamo dei servizi e utilizzando dei servizi definiamo dei protocolli, quindi se volete un po\' con la tecnologia, alla base ci stanno l\'algoritmo di cifratura, poi e gli altri che in qualche maniera entrano nel mondo delle operazioni che facciamo, questi sono i mattoncini, poi li mettiamo insieme, quindi utilizziamo 1 più l\'algoritmo di cifratura, 1 algoritmo di cifratura con l\'algoritmo 10, e riusciamo a creare dei servizi, un servizio di confidenzialità, un servizio di integrità, il servizio di confidenzialità e integrità, il servizio di firma elettronica, servizi che vuol dire che utilizzate cosa? Più algoritmi, normalmente più algoritmi per raggiungere questo servizio. Il passo successivo e poi definire un protocollo che utilizzando questi servizi mi consente di fare determinare operazioni, quindi nasce **SSL o TSL** che è **protocollo a livello di trasporto** che consente tutte le transazioni commerciali, la famosa S dopo HTTP, per capirci vuol dire che HTTP, utilizza come meccanismo di trasporto il TLS o SSL e quindi vuol dire che noi in qualche maniera stiamo già utilizzando una serie di meccanismi per garantire un certo livello di sicurezza, nello specifico quelli che utilizziamo sono un meccanismo per garantire l\'autenticazione, almeno da parte del server, ma potrebbe essere da parte del client, e un meccanismo di cifratura per garantire confidenzialità e integrità. Quindi stiamo mettendo insieme questi tre pezzi ma li mettiamo dentro un protocollo. Quando mettiamo o utilizziamo o creiamo anche il nostro protocollo interno, vuol dire che stiamo definendo in maniera precisa quali sono le operazioni, cioè quando vanno fatte, come vanno fatte, è importante che ci siano informati del come viene fatto. Questo è quello che c\'è oggi quando parliamo della cyber security, in ultima analisi parliamo di meccanismi di cifratura. Perché? Perché quando abbiamo parlato poi dell\'internet tradizionale non è stata progettata, non è stata pensata, non è stata immaginata per offrire alcun tipo di servizio di sicurezza, le informazioni viaggiano in chiaro, sostanzialmente perché quando è nata era quella l\'esigenza primaria, non ci si aspettava nemmeno che ci potessero essere ragioni che rendessero necessaria una confidenzialità , anzi è il contrario siccome era una cosa che nasce, il fatto che tutti potessero facilmente debuggarla, andando a leggere tutto era un vantaggio, non era un svantaggio. È l\'unico modo che noi abbiamo per poter infilare a forza dei servizi di sicurezza, degli aspetti di sicurezza, la CIA che abbiamo visto dietro, che è un servizio segreto, con confidenzialità, immunità e autenticità, lo abbiamo attraverso meccanismi che in ultima fase utilizzano algoritmi di cifratura. Siccome la maggior parte dei tre rischi che ci sono, sono legati ad errori sottovalutazioni, non implementazioni corrette, l\'altro è legato ad avere delle prassi di progettazione che diventano sempre più precise, fiscali, attente, con una quantità di test che oggi non riguardano solo l\'aspetto funzionale. Giusto per fare un esempio concreto, che buona parte dei servizi danno informazioni sulla versione del server è Apache, che è la versione 2.48 ovvero informazioni utili per far funzionare il protocollo bene, ma terribili se seguiti dal punto di vista della server security. Se l\'attaccante conosce bene qual è la versione del server, entra nel suo archivio e conosce la versione 2.0 e i problemi: Problema A, problema B, problema C, problema D ecc\...ecc. Praticamente siamo a conoscenza di quelli che sono i problemi di quelle persone, quello che si chiama, in gergo spesso si chiama **fingering**, cioè identificazione di quello che mi dà il servizio, nella stragrande maggioranza, è fatto in maniera esplicita ho esposto a tutti quella versione e non sempre da configurazione vi posso dire no, non lo voglio esporre. Ma purtroppo non è così difficile, come sempre, capire qual è il tipo di applicativo , sviluppare codice ha qualcosa di assolutamente personale; quindi, gli sviluppatori di Apache ci sono delle caratteristiche specifiche che ha Apache invece di avere NGNX, invece di avere NSS che sono inizializzati i bit di un campo opzionale del protocollo, ce ne sono a uno invece che a zero. Oppure, tutti i protocolli mi lasciano alcuni margini di lavoro, perché ci sono le parti che non devo implementare obbligatoriamente, ci sono le parti dei frammenti che sono lasciate libere; quindi, non ho una scelta e con un\'analisi niente troppo complicata tendenzialmente riesco ad identificare qual è l'informazione del servizio. Il discorso della simmetria è legato al meccanismo per come funziona, quello che vedete qui sono i modi con cui noi andiamo a caratterizzare un cifrario o, se preferite, un sistema di crittografia sostanzialmente come elaboriamo l\'informazione, cioè come trasformiamo l\'ingresso in uscita. Immagine che contiene testo, schermata, Carattere, design Descrizione generata automaticamente Nel mondo delle tecniche classiche che sono sostanzialmente tre i modi con cui operiamo: **Sostituzione**in altri termini vuol dire che sostituiamo un simbolo del cifrario in ingresso con un simbolo del cifrario in uscita. **Trasposizione** invece si riferisce al fatto scambio i messaggi di ingresso con i simboli di quelli in uscita. **Cifrare prodotti** utilizzo entrambe le tecniche precedenti perché, quando io inizio il cifrario di sostituzione e trasposizione tra di loro se li combino opportunamente la complessità del risultato è superiore alla somma delle complessità dei due cifrari originali. Quindi se per decifrare il cifrario per sostituzione mi servono n tentativi e per cifrare quello per trasposizione me ne servono n, in realtà la complessità per il cifrario prodotto è superiore a n\*n. L\'altra cosa ovviamente è il numero delle chiavi che utilizziamo. Fino a una settantina di anni fa, conosceranno solo la **single key** chiamata anche segreta oppure un **meccanismo a due chiavi o pubbliche.** L\'altro modo è come processiamo un ingresso. Lo facciamo a **blocchi**, che oggi è quello che ci viene più naturale, il calcolatore lo facciamo a blocchi, il disco memorizza a blocchi, noi lo trasferiamo a pacchetti, per cui oggi è normale ragione a blocchi a blocchi di bit più che altro. Mentre **stream** vuol dire che ci diamo un simbolo alla volta. È chiaro che nel mondo della cifratura classica vuol dire un carattere alla volta, tendenzialmente pochi caratteri alla volta, mentre nel mondo di oggi vuol dire n bit alla volta. Con questo riusciamo a classificare tutti i tipi di cifrario con cui noi possiamo lavorare i requisiti sostanzialmente quali sono le caratteristiche che deve avere un buon cifrario: ovviamente deve essere un buono algoritmo di cifratura, sembra banale ma è un elemento di discussione. *Cosa caratterizza un buono algoritmo di cifratura? La cosa non è così ovvia come può sembrare.* La qualità di un algoritmo lo si può fare in maniera semplice, per esempio esiste un meccanismo di base che è **l'algoritmo di forza bruta** che data una chiave si va a scansionare tutte le possibili combinazioni per trovare quella opportuna, ma ha delle difficoltà. Allora, prima di tutto, le dimensioni della chiave. Eh, su queste possono lavorare con l' algoritmo, però se ci riflettiamo, non è detto che tutte le chiavi siano improbabili; quindi, qui diventa importante il modo in cui vado a gestire. Se è una chiave basata sui bit, forse una chiave di tutti 0, non è proprio una chiave ideale. Non è la stessa cosa che funziona con la password, anche se somiglia al concetto della password. Qualsiasi algoritmo ha una dimensione della chiave prefissata. *Cosa ci serve per attaccare un cifrario con un algoritmo di forza bruta?* Posso conoscere il testo cifrato e il testo in chiaro. Ma supponiamo di avere il testo cifrato, che voi avete questo messaggio, che questo messaggio non contenga errori di qualsiasi tipo e che conoscete qual è l'algoritmo di cifratura utilizzato. Immaginiamo di attaccarlo con la forza bruta. Come facciamo a capire che l'output è giusto ? In realtà dato un testo cifrato non riesco a capire se quella sequenza di 0 e 1 era un'immagine , una fotografia o altro. Nelle cifrature classiche, una persona che parlava doveva avere competenze linguistiche perché doveva essere in grado di capire che quello che era venuto fuori, sequenza di caratteri, fosse effettivamente un testo scritto in una lingua che lui conosce. Talvolta nei sistemi crittografici si comprime il messaggio , perché la compressione in qualche maniera distrugge la caratteristica originale del messaggio , che cosa fanno questi algoritmi di compressione? determinate cose, pigliano quello che era il messaggio originale e lo trasformano in una sequenza di 0 e di 1 facilmente riconoscibili al messaggio originale. Quindi già nel mio sistema una cosa è cifrare il testo originale, il messaggio originale una cosa è cifrare un\'elaborazione di questo messaggio sempre con la stessa chiave perché vuol dire che io sto rendendo la vita difficile all\'algoritmo a questo potenziale attacco alla forza brutta. Il mio attaccante, il mio crittoanalista in qualche maniera deve venire a sapere che io ci faccio, che io ho un compresso per poter poi risalire al messaggio. Questa slide riassume quello che abbiamo detto in maniera matematica: ![Immagine che contiene testo, schermata, design Descrizione generata automaticamente](media/image2.png) Assumo che l\'algoritmo di cifratura sia molto noto dalle due parti il che implica che una chiave segreta, visto che è la stessa, perlomeno devo poterla distribuire in maniera sicura, quindi l\'obiettivo è così, utilizzare un canale sicuro per trasferire un messaggio, ma per poterlo fare devo avere a disposizione un canale sicuro per trasferire la chiave segreta non avrebbe nessun senso cifrare una chiave sul canale insicuro perché stiamo solo spostando solo a monte perché dobbiamo avere un\'altra chiave con cui cifrare la chiave sicura. Importante è dire che la robustezza di un cifrario non deve si basare sulla segretezza dell\'algoritmo ma solo sulla segretezza della chiave. Ovvero gli algoritmi devono essere pubblici, che motivazione c\'è? Possono essere tante, due sono principali. La prima, è che eventuali debolezze e bug vengono fuori. L'altra è : supponiamo che io invece di rendere segreto il messaggio tramite la chiave lo faccia rendendo segreto in modo come lui trasforma il messaggio per qualsiasi motivo questo algoritmo viene scoperto preso pubblico o pagato o viene messo pubblico qual è l\'effetto sui cifrari che prima che ho preso erano scambiati? Sono tutti decifrati. In un cifrario invece in cui la sicurezza è sulla chiave, la perdita di una chiave comporta la violazione dei cifrari per cui ho utilizzato quella chiave; quindi, ho una perdita di informazione ma continua a funzionare l'algoritmo. Un cripto analista come primo obiettivo ha quello di ottenere la chiave se ho questa posso decifrare questi messaggi. Il secondo obiettivo decifrare tutto il messaggio. Via via che la mia capacità di elaborazione cresce gli algoritmi che potessero andare bene, non vanno più bene. Quindi altro aspetto che si viene a focalizzare, dovunque c\'è un problema di cifrare, è il bilancio economico. Siccome spendo le mie risorse, per farlo vuol dire che io ne devo avere un guadagno. Noi che creiamo il sistema di difesa essenzialmente quello che cerchiamo di fare è rendere antieconomico l\'attacco, nel momento che la mia informazione è importante devo pensare anche a questo, cioè nel mio sistema la componente umana con tutti gli svolti che ci possono essere ne fa pienamente parte. Gli attacchi cripto analitici sfruttano invece le caratteristiche dell\'algoritmo. Io studio come è fatto l\'algoritmo e scopro che ha alcuni elementi che mi permettono, come dire, di trovare delle scorciatole. Questa slide raccoglie i tipi di attacco che possono essere: solo il testo cifrato. possono conoscere il plain text(algoritmo di cifratura, chiave), testo cifrato scelto(forzare l\'ottenimento dell\'algoritmo), scelta del testo(attaccare per ottenere la chiave) La probabilità che due chiavi diamo la stessa cosa è praticamente nulla. Quindi riassumendo possiamo dire: ![Immagine che contiene testo, schermata, Carattere, design Descrizione generata automaticamente](media/image4.png) Immagine che contiene testo, schermata, Carattere Descrizione generata automaticamente L'algoritmo di brute force si può riassumere in questo modo:![](media/image6.png) 198 bit è attualmente uno delle dimensioni più utilizzate. Quanto tempo deve rimanere inviolato il mio cifrario? Fin quando l\'informazione ha un valore economico. Allora, se ho l\'informazione a cui valore è infinito, pure a qualche ora. In base a quanto tempo deve permanere la mia informazione deciderò se andare ad utilizzare più o meno una chiave grande con più bit. 26 characters permutation vuol dire, se prendiamo un classico alfabeto, quante sono le possibili permutazioni quindi scambio di posizione di questi oggetti e se volete il cifrario per sostituzione è più semplice quello che abbiamo fatto da bambini ci scriviamo l\'alfabeto facciamo una permutazione dell\'alfabeto scriviamo un po\' di freccette, questo è un cifrario ok, la A corrisponde con la T la B, casuale, attenzione, senza nessuna regola particolare quindi la chiave cos\'è? la tabellina delle permutazioni quanto è robusto questo cifrario quando attacca a forza bruta? beh, in realtà è molto robusto i problemi di questo cifrario sono di tipo di criptoanalisi, non di forza bruta sostanzialmente le permutazioni sono altre che 26 fattoriali.No, non è difficile, uno lo collego a tutte le altre 25, la seconda la collego con la 24, la terza con la 23, ecce 26 fattoriali, che come vedete è nell\'ordine di grandezza di 10 alla 26, vicino in qualche maniera a un cifrario intorno ai 128. Questo è un algoritmo estremamente potente che però è debole per altri motivi. Uno, perché è abbastanza scomodo portarsi la chiave. La chiave è una tabella e nel calcolatore deve essere memorizzata. Si potrebbe riportare tutte le trasposizioni che servono per parlare con lui, e questo complica e noi cerchiamo di avere chiavi comode da trattare, e l\'altro motivo vedremo che è legato invece al fatto che ha delle debolezze legate alla caratteristica di ciò che è cifrato, cioè del fatto che è un messaggio di testo e non è una sequenza. Lezione 3 08/10/2024 Una prima classificazione ,se volete, è il modo in cui noi definiamo un determinato algoritmo può essere **incondizionalmente sicuro** e **computazionalmente sicuro**. Sostanzialmente, **computazionalmente sicuro, vuol dire che il costo per il particolare cifrario è maggiore del valore dell\'informazione contenuta all\'interno**. L\'altra **condizione è legata al tempo, o può essere legata al tempo necessario per un determinato algoritmo impiegato a cifrare quell'informazione supera il valore effettivo dell' informazione cifrata( per quanto tempo ha valore quella informazione)**. Questo è direttamente collegato al concetto di complessità computazionale stessa. Buona parte degli algoritmi è che sono basati su dei meccanismi o computazionali onerosi per il calcolo di determinate soluzioni. Anzi, per essere ancora più precisi in questo momento sono dei sistemi asimmetrici, in cui una determinata funzione ha un costo computazionale relativamente basso quindi riesco a decifrare in un tempo relativamente breve vediamo che questo tempo è ragionevole potrebbe anche essere qualche minuto, ma è ragionevole, dipende dalle informazioni. Mentre fare una operazione inversa, partendo da un cifrario eccetera eccetera, è computazionalmente complesso, l\'algoritmo lo conosciamo in sostanza. Esistono degli algoritmi, anche se molto pochi, che si possono considerare sicuri a prescindere cioè sostanzialmente, a prescindere dal tempo della disposizione, a prescindere dall\'investimento che possono avere nelle risorse da spendere, questo algoritmo non è risolvibile, cioè non è possibile attaccare questo sistema e ovvio che questo sarebbe, è l'algoritmo ideale, una volta che lo faccio l'attaccante non ha più nessun ruolo. Quindi poi come vedremo in questi attualmente utilizzati, ne conosciamo uno in determinate condizioni che potremmo non partire da una pubblicazione, essendo basato sul qualcosa che viene un po\' dal mondo delle telecomunicazioni, magari quello del meglio, ma brevemente voi sapete che, se io so che, se ho un rumore ed è bianco, il segnale in uscita è un rumore bianco. Un rumore bianco vi ricordo che vuol dire che è statisticamente distribuito in maniera uniforme in tutte le frequenze disponibili; quindi, non c\'è la possibilità di avere un tipo di informazione. Quello che sappiamo sempre, questi segnali che in realtà se poi io lo sottraggo, e ce l\'ho a disposizione il segnale, per esempio. Questo è cifrare incondizionatamente i segnali. Cominciamo con il mondo delle tecniche classiche. Immagine che contiene testo, schermata, Carattere Descrizione generata automaticamente **L'algoritmo di sostituzione l\'idea è proprio il simbolo di uscita corrisponde ad un simbolo in ingresso.** **Naturalmente la chiave nel nostro algoritmo è la mappatura, tra i simboli in ingresso e i simboli in uscita**, è un po\' come il linguaggio a gesti che si faceva a volte da bambini in un certo senso è la stessa cosa di una cifratura. Se io non conosco la mappatura tra il simbolo visuale che ho detto e il valore originario, ovviamente non sono in grado di capire quali sono i contenuti del messaggio. Naturalmente questi nascono prevalentemente in contesto di diffusione, di ignoranza diffusa in cui già scrivere potrebbe rappresentare un elemento di difficoltà intrinseca. Shift Cipher Il più semplice tra questi algoritmi è il cosiddetto **shift cipher** è che un l'alfabeto in ingresso è uguale a quello in uscita e l'algoritmo consiste proprio in uno shift delle lettere. Lo shift cipher è un meccanismo di cifratura circolare, cioè, **aggiungiamo un valore costante, che è la chiave**, **che mi dice a quale carattere corrisponde un carattere diverso**. Naturalmente essendo uno shift circolare dobbiamo andare a considerare il modulo.Naturalmente così come il ciclo tutto sommato è semplice ovviamente lo sarà pure la decifratura, quante sono **le chiavi disponibili**, tante, quante sono le lettere dell'alfabeto, non sono tutte le combinazioni possibili ma, **sono 26**. ![Immagine che contiene testo, Carattere, schermata, design Descrizione generata automaticamente](media/image8.png) Vediamo come però questi soggetti hanno un altro tipo di attacco che è basato sulla frequenza delle analisi che potrebbe essere applicabile a tutti i cifrari, tra quello famoso si ha quello di Cesare che non è altro che uno shift register con chiave costante. Cifrario di Cesare Quindi quando K è uguale a 3, è cifrario di cesare. Anche qui ricordiamoci il contesto, dove sapevano scrivere pochissime persone, e in più Cesare, ma utilizzava stesso un\'altra lingua per rendere tutto più difficile. **Era un cifrario sostanzialmente diffuso l\'operazione banale dove abbiamo il plain che viene tradotto semplicemente mediante uno shift nel testo di sotto.** Quindi era facile da pubblicare senza avere strumenti aggiuntivi, ecco questa è in linea di massima uno dei cifrari storici, cioè tutti quelli legati all\'epoca pre-meccanizzata c\'era un aspetto piuttosto importante nel senso che non si poteva portare il calcolatore, dovevo essere in grado di farlo carta e penna , l'aspetto fondamentale e che ci deve essere una certa semplicità nell\'utilizzo, carta e penna per capirci o di altri strumenti per poter decifrare il messaggio. Chiaro se io faccio attaccare i cifrari di Cesare, io attacco lo Shift Register, **aggiunge un ulteriore difficoltà, se io non so se per esempio che si sta utilizzando un\'altra lingua e non riesco a decifrare il testo in chiaro.** Inoltre, ai giorni d'oggi in un cifrario di tipo shift, **se io sto cifrando un file compresso piuttosto che una foto, piuttosto che altro, il risultato potrebbe non essere intelligibile**. Quindi, in un file compresso probabilmente l\'informazione che viene in uscita non è più comprensibile. Se ho l'immagine codifica in RAW questo modo fare lo shift vuol dire cambiare dal rosso al giallo e quindi l\'informazione sarebbe comprensibile o per lo meno abbastanza comprensibile*.* *Quali sono i meccanismi che possono complicare ulteriormente la decifratura?* ![Immagine che contiene testo, schermata, Carattere, Blu elettrico Descrizione generata automaticamente](media/image10.png) 1. Linguaggio differente 2. Meccanismi di compressione. Il fatto che stavolta sia codificata con l\'informazione, nessuno impedisce di applicare più codifiche, il fatto che io la codifico mi rende quel testo non immediatamente comprensibile 3. L\'attaccante deve avere delle competenze linguistiche. Ricordiamoci che la lingua è estremamente ridondante, se togliamo gli articoli, gli spazi le virgole, i segni di interruzione continua ad essere leggibile il testo e se lo immaginiamo come un messaggio che non ha scopo letterale ma ha scopo di scambiare l\'informazione posso togliere tanti pezzi per non aiutare il potenziale attacco. E allora proviamo a ragionare, qual è la prima condizione che abbiamo visto in testo cifrato? Che **la politica di cifratura avviene utilizzando un solo alfabeto in uscita questo cifrario prende il nome di monoalphabetic cipher, tutti i caratteri in ingresso vengono codificati in uscita con lo stesso alfabeto**. Quindi io prima creo la mappatura tra l\'ingresso e l'uscita e poi lo applico su tutti i cifrari. Quello di Cesare, è debole perché noi stiamo condizionando il modo in cui noi andiamo a creare la nostra la sequenza che è invariata, la B segue sempre la A, la C sembra sempre la B. **Debolezza della cifratura di Cesare**: è un meccanismo molto debole perché la chiave è sempre la stessa. Monoalphabetic **Un meccanismo abbastanza potente è fare uno shuffle del nostro alfabeto**(ottima chiave per il nostro algoritmo), quanto è forte questo algoritmo e robusto alla forza bruta ? tante quante sono le combinazioni di 26 caratteri **ovvero 26!** , che corrisponde a 4x10\^26 molti di più del DES (algoritmo simmetrico). Questo tipo di approccio mi dice che è una buona resistenza alla forza bruta, **ma non è stato molto usato** ci sono delle ragioni. Le ragioni sono due. La prima è la **difficoltà di gestione della chiave**, se lo utilizziamo sempre carta e penne, volevo dire che avrò un quaderno dove c'era una mappa dei caratteri che andava scritta. Visto che la robustezza del mio cifrario è connessa con la robustezza della chiave, **la chiave deve essere scambiata su un canale sicuro.** **La debolezza, quindi, non è connessa alla forza brutta, ma è connessa alle caratteristiche della cifratura monoalfabetiche.** In particolare, in qualsiasi tipo di messaggio ci sono delle distribuzioni statistiche non uniforme dei contenuti, un **linguaggio è ridondante** ha determinate caratteristiche **e** soprattutto **non tutte le lettere sono equamente distribuite.** La ridondanza aiuta? In che modo aiuta il crittoanalista? Beh, vado a cercare degli elementi, nei messaggi in uscita, che sono ridondanti, perché nel cifrario monoalfabetico, le caratteristiche strutturali, quindi non il contenuto informativo, ma come costruito il messaggio tutte le A hanno lo stesso carattere di uscita, tutte le C hanno lo stesso carattere di uscita e allora seguiamo la seconda caratteristica che mi dice che le lettere non sono egualmente distribuite e nella nostra esperienza comunque lo sappiamo che la Q è meno frequente dell\'A, che la U è meno frequente dell\'A. In inglese la E è in carattere più diffuso ,in italiano è un linguaggio più vocale, più aperto, ci sono le vocali in testa Prendo un testo abbastanza lungo, tipo, prendo un libro, degli articoli del giornale, quante volte è presente la A, la X, la Y e la Z e a questo punto è la distribuzione statistica. Se questo lavoro di calcolo della distribuzione statistica che ho fatto è accettabilmente tanto ampio da coprire la lingua che sto utilizzando posso dire che sto caratterizzando il linguaggio di ingresso. **Questa caratteristica statistica, quindi queste distribuzioni, restano invariate nel testo cifrato. Perché? tutti i caratteri sono cifrati sempre con la stessa lettera.** Oggi, cioè con il calcolatore, non ci sto niente a eseguire un programma del genere fino a 100 anni fa voleva dire un bel po\' di lavoro, di conti ma soprattutto era difficile realizzare una notazione. Immagine che contiene testo, schermata, Carattere, design Descrizione generata automaticamente Le competenze del crittoanalista devono comprendere anche le competenze del linguaggio(nel cifrario non è contenuta la lingua in cui sto codificando il messaggio), ma è in realtà quello che in quanto si chiama ingegneria sociale. Se io so che un determinato messaggio è stato inviato dalla cardinale X francese mi aspetto che il messaggio sia scritto in francese. Quindi a volte è importante avere delle informazioni di contesto per il mio messaggio che devo decifrare. Sostanzialmente, visto che non cambia la frequenza relativa dei caratteri di un messaggio cifrato non faccio altro che **calcolare la frequenza dei caratteri del messaggio cifrato e provare a mapparli con i caratteri della lingua originaria**. **Di solito si preferisce cercare quelli meno frequenti**, non quelli più frequenti poi vedo anche le regole della lingua che sto utilizzando(ad esempio una Q è seguita da una U ) faccio un\'ipotesi, ho trovato la frequenza più bassa, **vado a controllare il carattere accanto e vedo se la frequenza del carattere accanto è paragonabile a quello della lettera (conoscendo la lingua)**, una volta che ho beccato Q ed U probabilmente mi vado a cercare un altro carattere tipo le vocali a seguire. Quindi in realtà è un processo a tentativi, ma guidato in maniera tale che non devo fare tutte le combinazioni ma sto andando a cercare certamente cose che sono chiaramente statistiche. Quali sono le contromisure che potrei individuare per rendere un po\' **più complicato il lavoro del crittoanalista?** **Fornire più cifre per lo stesso carattere**, tipo i e j lo codifico con un unico carattere. Qual è il mio problema? La frequenza. Come contrasto la frequenza **abbassando la frequenza di quelli più comuni o alzando la frequenza di quelli più alti** ,come posso ridurre la frequenza delle A ?codificandola con due caratteri differenti. **Un altro aspetto è andare a prendere coppie di caratteri** ,non tutti i caratteri a coppia ,ma alcune combinazioni frequenti nella lingua che mi incidono nella statistica li codifico con un solo carattere, tipo in inglese il dittongo TH corrisponde a X ,in italiano CH con X. Quando parliamo di omofoni ci riferiamo a combinazioni che suonano alla stessa maniera, appunto la K per il CH che più o meno funziona, è chiaro che, non mi piglio al caso, ma in maniera tale da effettivamente appiattire delle caratteristiche statistiche per riuscire a rendere più difficile l'approccio. **Quindi un approccio è quello di estendere l'alfabeto di uscita in maniera tale da codificare i caratteri più frequenti con più caratteri. L\'altro è applicare varie coppie e cifrarle con un unico carattere.** **Di fatto l\'obiettivo è manipolare la distribuzione delle statistiche del messaggio in uscita**. [I cifrari sono attaccati dalla via più debole e più strana; quindi, non dobbiamo mai concentrare solo sull\'aspetto squisitamente tecnico, quanto è difficile decifrare e qual è quella frequenza delle lettere che cerco, ma devo guardare a tutto il sistema. ] **Come posso rendere più robusto questo? Sistematicamente andando a cifrare coppie di caratteri non solo essendo coppie hanno una distribuzione statistica più piatta, meno evidente.** ![](media/image12.png) Immagine che contiene testo, biglietto da visita, schermata, Carattere Descrizione generata automaticamente Playfair cipher Playfair è stato un cifrario che è stato utilizzato fino alla Seconda guerra mondiale, perché è molto semplice e abbastanza robusto per cifrare delle informazioni brevi come quelli dei comandi nella guerra mondiale. È importante che l\'alfabeto sia in qualche maniera sia quello comune, quindi non devo avere una struttura di trasmissione o non deve creare una struttura di trasmissione differente. Un aspetto fondamentale l\'usabilità in questo caso dello strumento. **È basato su una matrice 5x5 di vector che viene costruita usando una parola**. E' stato inventato nel 1854. Ho bisogno di una base, di una chiave. Supponiamo che la chiave, sia quella delle slide "universita di catania". Poi mi viene costruita la tabella, semplicemente ricopiando la mia chiave ed eliminando le eventuali ripetizioni. La tabella è di 5, perché nella tabella inglese i e j vengono codificati nello stesso modo. ![](media/image14.png) Il testo in chiaro viene crittografato due lettere alla volta, in base alle seguenti regole: - Le lettere di testo in chiaro ripetute che cadrebbero nella stessa coppia devono essere separate da una lettera di riempimento, per esempio la "x"; - Due lettere di testo in chiaro che rientrano nella stessa riga della matrice vengono tutte sostituite dalla lettera che si trova a destra (il primo elemento della riga segue l'ultimo in modo circolare); - Due lettere di testo in chiaro che rientrano nella stessa colonna vengono sostituite dalla lettera sottostante (l'elemento superiore della colonna segue l'ultimo); - In ogni altro caso, ciascuna lettera di testo in chiaro di una coppia verrà sostituita dalla lettera che si trova nella stessa riga e nella colonna occupata dall'altra lettera di testo in chiaro. **È più robusto perché qui stiamo prendendo le coppie**, le coppie ce sono molte di più nel testo che si sta considerando, si attacca esattamente al concetto di tabella come mi costruisco una tabella delle frequenze delle coppie e cerco di trovare le frequenze in tabella. **Se mantengo il messaggio generalmente breve, posso mandare un testo senza che di fatto ci siano elementi statistici particolari.** Immagine che contiene testo, schermata, Carattere, design Descrizione generata automaticamente Hill Cipher Interessante è un altro cifrario che si chiama **Hill Cipher,** è uno dei primi esempi in cui sfruttiamo l\'informazione, diciamo, la struttura matematica contenuta nel fatto che non abbiamo i caratteri ma numeri. Di base, quindi vuol dire che ogni lettera la cifriamo con un numero. Prendo una parola, questa parola corrisponde a 2 numero, è un vettore. Decido quale dimensione ha. Il mio testo lo prendo a blocchi di tre elementi e lo vado a considerare come se fossero appunto 1 numero. Modifico il testo seguendo una matrice n x n invertibile. Perché deve essere invertibile? perché è una matrice non invertibile è riducibile, non è più una matrice che mi permette di avere un cifrario unico; quindi, deve essere invertibile così che si traduce nel fatto che io posso appunto ricostruire il messaggio con l\'operazione inversa.La chiave cos\'è? La matrice. È un cifrario in cui posso decidere le dimensioni? Assolutamente sì, perché è chiaro che io posso lavorare con matrici due per due, tre per tre, quattro per quattro, è semplicemente più difficile farsi i conti. ![Immagine che contiene testo, schermata, Carattere, design Descrizione generata automaticamente](media/image16.png) Ho un testo in chiaro. A, B, C lo modifico con 0, 1, 2 , in realtà potrei anche averlo modificato prima, avere fatto uno shift prima. Il risultato è dato da un prodotto tra un vettore di 3 e una matrice 3x3. Qui nell\'esempio 0, 23, 22 faccio il modulo 26 perché ho bisogno di un ricondurlo al carattere. C'è una competenza matematica che prima non era necessaria e la complessità di fare un vero e proprio calcolo matematico matriciale. Immagine che contiene testo, schermata, Carattere, diagramma Descrizione generata automaticamente Quindi è sicuramente più robusto del precedente, mi lascia anche spazio nel decidere di andare avanti con le terne, con le quaterne. Questo è un esempio di utilizzo della struttura matematica. Se la matrice è invertibile, abbiamo questa prima condizione necessaria, vuol dire che l\'operazione che io scritto è invertibile. Quindi sto applicando semplicemente l\'inversa. Se io modifico il testo cifrato per l'inversa della matrice, viene fuori il valore originale. Due approcci comuni per quello che riguarda le **strategie di ottimizzazione**. Il primo si chiama la **"scalata" o "Hill Climbing".** Sostanzialmente è un algoritmo di ottimizzazione, è usato quando sto cercando il massimo o il minimo di una funzione. Seguo un determinato elemento, se la funzione è lineare e non ha massimi locali funziona abbastanza bene se io ho trovato un valore mi aspetto di valutare solo i termini vicini; Nell'ipotesi che la mia funzione ha un andamento abbastanza lineare per cui se io miglioro, se il nuovo passo è migliore del precedente, mi piglio quello e poi cerco di migliorare immaginando di avvicinarmi alla mia soluzione. Sostanzialmente cerco di muovermi continuamente per cercare una soluzione migliore fin quanto non la trovo. Quindi mi serve un criterio di verifica. Come? Magari applicando The Saurrus, se escono delle parole che possono essere identificate come una parola simile all'originale vuol dire che ho trovato il risultato. Quindi ho una soluzione iniziale, quindi sto ipotizzando una chiave? in generale ho detto che cerco il massimo; quindi, il mio obiettivo potrebbe essere trovare il massimo, trovare il massimo vuol dire che è approssimazione, quando io cerco il massimo, per esempio, vuol dire che quel valore negli ultimi 5 tentativi non è mai cambiato o che quel valore almeno nel nostro caso vuol dire che avete trovato un testo che è comprensibile. A questo punto ho bisogno di definire le soluzioni prossime. Data una soluzione a quali sono le soluzioni prossime? sostanzialmente il processo generale delle soluzioni facendo solo le piccole modifiche alla soluzione che in quel momento è candidata. Qui, presuppongo che la chiave è il Picco, sono io che sto ammettendo questa soluzione, faccio una prova e vedo che il criterio di verifica non è valido. Allora sostituisco una P con una E. Faccio una prova, è migliorato, prendo quella come soluzione, è peggiorata, resto dove sono. **C\'è una valutazione della nuova soluzione, se la nuova soluzione è migliore della corrente, scelgo quella.** Cosa vuol dire nel caso dell\'analisi che la soluzione è migliore della corrente? Vuol dire che probabilmente ho provato più carattere, più dintorni della frequenza analizzata. Se sto parlando del monoalfabetico puro, ho trovato più caratteri, c\'è un certo numero di parole intelligibili, cominciano ad esserci elementi certamente significativi nel testo che sto cercando di scrivere; quindi, ho bisogno di un criterio di valutazione che è di tipo comparabile meglio o peggio del precedente. A questo punto ripeto il processo fino a quando trovo un testo dal significato chiaro. Un altro approccio di ottimizzazione è il **simuleted anneling**. L\'idea dietro questo algoritmo è fisica e che esista sostanzialmente un'ottimizzazione probabilistica che ispirata al modo come di fatto funziona la creazione delle regole. L\'idea è questa, in base a ciò che si ispira al precedente, tentativi che di via via vanno avanti, ma aggiungo il concetto di pensare al futuro. Qual è il problema. Allora se io devo trovare un massimo, ho preso questa soluzione ne vado a pigliare una con una piccola variazione e vado a vedere dove è migliore o peggiore, fin tanto che non trovo la soluzione esatta. Però se la mia funzione non è lineare , questa soluzione non funziona più e potrei essere catturato da un massimo locale. L\'idea che c\'è del simulated anneling è che normalmente faccio questo processo ma con una determinata probabilità ogni tanto scelgo a caso; quindi, aggiungo un fattore in cui dico sì il vicino migliore è questo, estraggo un dato se questo dato è uscito un valore buono non mi muovo più. Scelgo questo valore e quindi a questo punto avvicinarmi al valore locale. Via via che io mi muovo verso una soluzione, faccio diminuire la temperatura in altri termini, faccio diminuire la probabilità che io salti, perché altrimenti questo algoritmo continua a saltare all'infinito. Quindi è un algoritmo basato sulla temperatura. All\'inizio del mio processo ho una temperatura molto alta vado quasi a caso, perché l\'ipotesi è che con una decente provabilità finirò il mio lavoro, via via che vado avanti però la temperatura si abbassa, quindi il salto che faccio rispetto alla posizione iniziale è sempre più alto; Quindi l\'idea è che anche qui c\'è una soluzione generale inizialmente, una soluzione obiettivo che ti dice qual è la qualità del risultato con gli stessi elementi, ho in più un parametro di temperatura che controlla la probabilità di accettare la nostra soluzione peggiore. L'algoritmo genera le soluzioni vicine a quelli che faccio, quindi le risolvo di nuovo, cioè la mia soluzione, applico n variazioni a quella attuale; nell\'algoritmo tradizionale scelgo sempre la migliore, in questo caso nell\'algoritmo di cui stiamo parlando se la nuova soluzione è migliore l'accetto, se la nuova soluzione è peggiore invece di rifiutare e fare una nuova soluzione potrei accettare in base al dato delle probabilità. Questi sono due approcci comuni alla semplice iterazione perché in qualche maniera sono mirati a ottimizzare il processo di ricerca del nostro algoritmo in linea di massima, funziona perché via via io vado a ottenere soluzioni migliorative. Resta comunque il problema del mono alfabetismo. Dobbiamo definire qualche regolo che vi consente di utilizzare più alfabeti nel nostro cifrario. Polyalphabetic Ciphers Se io il carattere di ingresso del testo cifrato, lo decifro sempre con un carattere differente, come risultato cosa avrò? Che sarà un carattere diverso. È un meccanismo semplice che mi consente senza andare a mettermi a generare casualmente lo shuffle ogni volta, perché direi che è impossibile cambiare queste meccaniche. Quindi teoricamente che faccio? Faccio lo shuffle per l'alfabeto e lo utilizzo per il primo carattere. Faccio lo shuffle per l'alfabeto, lo utilizzo per il secondo carattere. Quindi la chiave sarebbe lo shuffle casuale per ogni carattere. ![](media/image18.png) Vigenère Cipher Il cifratore si costruisce una sorta di tabellina. La tabellina si costruisce semplicemente scrivendo l\'algoritmo. Questa tabella ha due proprietà : non ha un aspetto segreto tipo un algoritmo alla base , la posso scrivere tranquillamente carta e penna. Le 26 cifrature sono disposte orizzontalmente (ovvero righe) e sulla sinistra viene indicata la lettera chiave di ciascuna cifratura. Nella parte superiore (ovvero colonne) sono disposte le lettere dell'alfabeto in chiaro. La chiave deve essere lunga quanto il messaggio stesso. Normalmente ciò si ottiene con una parola chiave ripetuta. Per decifrare il messaggio è sufficiente ancora una volta riferirsi alla tabella di Vigenère e vedere qual è la colonna corrispondente alla lettera cifrata che sarà a sua volta nella riga della lettera chiave. La struttura statistica non esiste, perché ad ogni passo io utilizzo un alfabeto differente. La debolezza è nella lunghezza della chiave, se becco la stessa lunghezza ripetuta li codifico nello stesso modo; quindi, diventa monoalfabetico e quindi lo posso attaccare tranquillamente (iterativamente). Come si può osservare dal testo cifrato nell'esempio, esso conserva dipendenze statistiche del testo in chiaro. Immagine che contiene testo, schermata, Carattere, design Descrizione generata automaticamente ![Immagine che contiene testo, schermata, Carattere Descrizione generata automaticamente](media/image20.png) Non è stato facilmente decifrabile, dobbiamo arrivare all'800 con il metodo Kasiski per trovare un algoritmo che decifrasse il tutto. Kakiski Method/Babbege È un matematico dell\'Ottocento che inventò probabilmente il primo robot, qual è il problema di questo cifrario? La debolezza è nella lunghezza della chiave. Se io prendo lo stesso gruppo di caratteri a una stessa distanza quindi con la stessa dimensione della chiave ho codificato il messaggio. Quindi cerco blocchi di carattere che si ripetono. Allora l\'attaccante va a cercare cosa? La probabilità che ci siano blocchi di carattere liberi, giocando sul fatto che nella lingua ci sono degli elementi che si ripetono molto bene. Quanto distanti sono questi? In questo caso quello che io sto cercando di attaccare non è la cifratura ma è la chiave. Cerco brevemente la chiave. La prima informazione che mi è utile per attaccare questo sistema è la lunghezza della chiave. Se io sapessi la lunghezza della chiave , sono in grado di trasformare questa cifratura polialfabetica in tante cifrature monoalfabetiche? Si, perché codifico sempre quei caratteri ripetuti con un altro blocco di caratteri quindi la lunghezza della chiave mi permette di decodificare facilmente tutto. L'idea di fondo è cercare di studiare questo testo per avere abbastanza informazioni per identificare la frequenza dell\'elemento. Per fare questo vado a cercare la ripetizione, giocando sul fatto che, per quanto possa essere lunga la chiave, la lingua originale c\'è un blocco di caratteri che sono abbastanza frequenti da poter capitare nella stessa posizione relativa alla lunghezza della chiave. Vengono fuori dei documenti abbastanza lunghi perché vengono fuori degli alfabeti significativi. Se sto parlando di messaggi brevi resta ad oggi tuttora un meccanismo estremamente robusto, ma se il documento mi diventa lungo io non riesco a trasformarlo in cifrari monoalfabetici a questo punto attacco i cifrari monoalfabetici, faccio le ipotesi che abbiamo detto e ovviamente iterativamente e qui devo ritornare indietro, ricostruire il messaggio originale, in base a quell\'ipotesi vedere se spunta fuori qualche cosa. Una volta trovata la chiave decifro tutto. La gestione delle chiavi è un aspetto fisico. Nei limiti del possibile, nei limiti degli strumenti che utilizzo, le chiavi dovrebbero essere gestite in maniera tale da non essere utilizzate più del necessario. Immagine che contiene testo, schermata, Carattere Descrizione generata automaticamente Per renderlo più robusto, è nato il cosiddetto **Vigenere autokey system**. Visto che la debolezza è nella definizione della chiave devo fare in maniera tale che la chiave non si ripeta. La chiave viene costruita sempre partendo da quella originale ma poi viene semplicemente concatenato il messaggio; il messaggio diventa contemporaneamente chiave e documento. Perché lo posso fare? Perché in fase di decifrazione nota la chiave io riesco a ricavarne via via le componenti del messaggio. Questo direi che è estremamente più robusto perché ha perso una parte che è il meccanismo con cui viene attaccato il cifrario, resta vulnerabile per le dimensioni molto grandi, sulle debolezze della chiave, sugli elementi di errore. ![Immagine che contiene testo, schermata, Carattere Descrizione generata automaticamente](media/image22.png) Vernam Cipher(One time Pad) Cifrario incondizionatamente sicuro. Ho bisogno di un generatore, mi limito a sommare questo generatore a questo, se la chiave è casuale, il cifrario è indecifrabile. Come li attacco questi schemi utilizzando qualsiasi caratteristica di tipo statistica della chiave, il cifrario polialfabetico ha eliminato la debolezza, del resto, perché in realtà faccio riferimento alla chiave ma se anche la chiave è completamente random quindi non ha caratteristiche statistiche a questo punto diventa indecifrabile. Quello moderno è stato presentato nel 1918. Dove la difficoltà ? Il problema è generare una chiave random, scambiare una chiave random e tenere sicuro una chiave di lunghezza dandogli un messaggio non è assolutamente semplice. La chiave è utilizzata per decifrare e non è mai riutilizzata. Ogni nuovo messaggio ha bisogno sempre di una nuova chiave. È stato formalizzato questo aspetto nel 1940, formalizzato perché si è riuscito matematicamente a dimostrare che questo cifrato è incondiziotamente sicuro. In figura si vede che qui venivano creati anche dei cifratori e dei scrambler perché noi tutti sappiamo che se aggiungo un determinato segnale o a uno scrambler basato proprio su questo cifrario aggiungo un ruolo casuale che poi viene utilizzato. Nella II guerra mondiale le autorità generava un libro, un taccuino, con una sequenza di caratteri. taccuino ovviamente veniva scambiato proprio per questo, io la persona fisica con le famose valigie che passano le cose, ogni volta che veniva decifrato un singolo carattere, si passava avanti, la distribuzione della chiave è di una difficoltà enorme ma è incondizionatamente sicuro. Tutto ora, se io lo utilizzo ho la certezza che non c\'è un approccio di tipo statistico, non ho un attacco consapevole, perché la chiave è infinita. La forza brutta è basata sul fatto che il numero di combinazione della chiave è N e quindi è 2 a N, 26 a L poco importa ma è finito. Qui invece stiamo dicendo che la chiave è infinita. Come tale il numero di prove che io dovrei fare per cercare di decifrare il messaggio è infinito. Ho distrutto la struttura statistica del messaggio e quindi non ho una crittoanalisi. Grazie alla potenza infinita non ho ripetizioni di parti della chiave, ho distrutto gli aspetti statistici della chiave e quindi non ho nessun algoritmo. Durante la Seconda guerra mondiale, i servizi segreti piuttosto che utilizzare il taccuino per la chiave utilizzavano la bibbia. Nel mondo anglosassone, la Bibbia la trovo sempre e resta sempre. E ha una caratteristica, la Bibbia, è uguale dappertutto. L\'informazione che giravo ulteriormente era il Salmo dove dovevo dire, dove inizio, è un sistema estremamente produttivo anche perché l\'attaccante anche se possedeva la Bibbia ma che non so da dove partire non riesco a decifrare il messaggio. Immagine che contiene testo, schermata, Carattere, diagramma Descrizione generata automaticamente Abbiamo parlato delle tecniche di sostituzione l\'altra, grande della famiglia, sono le tecniche di trasposizione non parlo di sostituzione, è una tecnica classica la differenza è che le tecniche di sostituzione certe volte i simboli sono gli stessi, ma sono sempre due, sostituiscono un carattere con un altro. Nelle tecniche di trasposizione, invece, in qualche maniera, scambio la posizione. Transposition Ciphers Prima di entrare in termini classici, è un cifrario che risale ai tempi di Alessandro Magno; quindi, stiamo parlando di un cifrario di circa 4.000 anni e tuttora è un cifrario molto complesso, praticamente che aveva la caratteristica di avere dimensioni prefissate, in particolare il passo per decifrare il cifrario è sempre lo stesso. Quindi l'unica prerogativa era avere un bastone che avesse la stessa circonferenza con cui era stato scritto il messaggio. Spesso veniva fatta la scelta di cuoio, perché veniva utilizzata come breccia dell\'elemento decorativo, cioè la competenza linguistica dell\'epoca non permetteva di capire che fossero caratteri di un messaggio, quindi era anche facile trasferirlo. Più uomini partivano con lo stesso messaggio e poi qualcuno di loro dopo mesi giungeva a destinazione con il messaggio da decifrare e possibilmente nessuno di loro sapeva che avesse addosso un messaggio, venivano motivati dando magari appezzamenti di terreno. ![Immagine che contiene testo, schermata Descrizione generata automaticamente](media/image24.png) Lezione 4 - 11/10/2024 Tra le tecniche classiche abbiamo visto tutte quelle di sostituzione e abbiamo cominciato a vedere quelle lì relative alla trasposizione, l\'esempio classico che è relativo all\'immagine che c\'è qui in basso della scitala cioè di questa striscietta essenzialmente avvolta intorno a un supporto che evidenzia come di fatto quello che facciamo è cambiare la posizione non c\'è più il concetto di variazione di alfabetico ma c\'è di variazione di posizione ovviamente come in tutti i casi in cui parliamo di cifrari dobbiamo definire una chiave cioè un meccanismo che ci consente in maniera in un tempo ragionevole con una fatica ragionevole sia di cifrare che di decifrare nel caso della scitala era la scitala stessa la stessa sostanzialmente il diametro o se preferite il passo di avvolgimento di questa striscietta intorno al bastone che la riusciva a rendere abbastanza robusto ovviamente considerato l\'epoca. Altri due semplici algoritmi semplici sempre al solito per provare a piazzarli in un contesto temporale sono algoritmi che sono stati utilizzati fino a cavallo tra la fine ottocento e le prime guerre del novecento, quindi sì sono classici ma restano definiti come classici per il tipo di approccio che abbiamo. Il confine tra classici e moderni è legato principalmente al fatto che si è passati da una codifica in cui erano gli alfabeti erano fatti da caratteri e si convertivano caratteri, parole, testi ad alfabeti in cui la codifica quindi il fatto che associamo un numero a un carattere o a un insieme di caratteri se preferiti e che poi vengono utilizzati degli algoritmi numerici cioè basati sul fatto che ci sono dei numeri o ancor più delle sequenze di bit perché poi rappresentiamo con bit nell\'andarli ad elaborare è uno dei passaggi che vanno un pochettino da quello che è la storia della cifratura e quella che comincia ad entrare nell\'epoca moderna della cifratura. L'altro passo essenziale è quello della meccanizzazione, cioè si passa da operazioni di cifratura e decifratura fatte da esseri umani, carta e penna per intenderci, dove lo strumento era la carta e la penna a macchine più o meno automatiche che mi consentiranno quindi di adottare dei meccanismi di combinazione polialfabetici, monoalfabetici, misti, prodotto, tutto quello che vogliamo sempre più complessi, sempre più difficili da interpretare. [Rail Fance Cipher]{.smallcaps} La traduzione di RailFance è staccionata. L'idea è veramente semplice , quello che io sto facendo è andare a scrivere decidere in quante righe voglio dividere il mio messaggio e poi andarlo a scrivere in diagonale quindi il messaggio originale che è sempre il "incontrami dopo la festa da ballo dopo il toga party" è scritto così ,qual è la chiave di questo cifrario? principalmente è una è il numero di righe che io utilizzo anche se in realtà potrei aggiungere un minimo il passo invece di spostarmi di un solo carattere sulla destra potrei spostarmi di due caratteri sulla destra cambierebbe qualcosa? Sì, ma non cambierebbe la logica del mio messaggio sotto vedete che c\'è quello che risulterebbe il testo scrambled cioè il testo così come lo avete il potenziale attaccante e che quindi sostanzialmente mi nasconde il contenuto del messaggio. La prima cosa che possiamo immediatamente vedere in questo cifrario che in qualche maniera non riesce a nascondere gli stessi aspetti statistici che abbiamo visto nel messaggio originale , ma che comunque ha una struttura diversa di codifica e che, come tale, potrebbe complicare la vita con approcci di tipo diverso. Resta comunque un approccio relativamente semplice. Immagine che contiene testo, schermata, Carattere, design Descrizione generata automaticamente Row transposition Cipher Un pochettino più complesso nel senso che distrugge di più quelli che sono gli aspetti così è il row transposition l\'idea anche in questo caso è abbastanza semplice. Il messaggio è quello originale sostanzialmente la chiave è una sequenza numerica in questo caso quella che vedete sotto sostanzialmente l\'ordine con cui riallineo le colonne. Quindi nel momento che io devo andare a gestire il mio messaggio lo scrivo in base alla matrice che ho messo, in questo caso si legge facilmente in figura: "L\'attacco è rinviato fino a domani." Questo è il contenuto del testo che abbiamo in questo caso. Quando io lo vado a convertire, principalmente non faccio altro, sembra in base alla chiave, a modificare l\'ordine di lettura delle colonne. Quindi la chiave mi dice come devo andare a leggere le diverse colonne in base a quel numero che io ho messo facile da convertire. Sono tutti meccanismi relativamente semplici da implementare e da tradurre. Lo potrei vedere al contrario invece scrivere il messaggio scrivo direttamente il messaggio in un ordine trasposto quindi scrivo prima il quarto carattere poi il quinto e via dicendo è chiaro che in questo caso la chiave è una combinazione ovviamente delle dimensioni del numero di righe di come divido sostanzialmente il mio testo e il resto vado davanti. Nell'esempio sto iniziando dalla colonna 2 da apt ,leggo la colonna ed è la prima parte del mio messaggio poi vedete quindi sto leggendo sto leggendo questo questa parte qui poi c\'è R a questo punto vado a leggere quello che è il successivo che è la T cosa c\'è dopo il 2 c\'è il 3 TS e così via la lettura dei miei messaggi. Quindi ho scritto per riga con la chiave stabilisco l\'ordine di lettura che comunico ci comunichiamo in qualche maniera e poi leggo per colonna. Di questi ce ne sono diversi , alcuni sfruttano dei semplici meccanismi di trasposizione uno di questi piuttosto diffusa nella Seconda guerra mondiale erano basate su due rotelle che giravano sostanzialmente dove il passo era dato dalla posizione iniziale , le due rotelle che giravano fra di loro avevano dei punti che andavano in corrispondenza quindi principalmente ci sono due ruote metalliche con alcune finestrelle a seconda la posizione si sovrapponevano alcuni buchi. La cosa dipendeva principalmente dalla posizione iniziale ,da quel momento in poi ogni rotazione veniva a cambiare quello che era la posizione finale. ![Immagine che contiene testo, schermata, Carattere, documento Descrizione generata automaticamente](media/image26.png) Cifrario prodotto Costruisco un cifrario abbastanza intuitivo che nessuno mi vieta di andare ad adottare più cifrari in cascata la prima volta cifro con cesare la seconda volta poi ce ne metto un altro e poi ce ne metto un altro ancora. La prima osservazione che possiamo fare è che se io applico la stessa tecnica di cifratura in altri termini se io utilizzo più cifrari per sostituzione in cascata, cosa ottengo? Di fatto ottengo esclusivamente un cifrario per sostituzione, alfabeto d\'origine, alfabeto finale di destinazione magari la costruzione della mappa è un pochettino più lunga ma alla fine se io considero tutti i cifrari in cascata, come se fosse una black box, che cos\'è? Nient\'altro che un numero per sostituzione dove la chiave, volendo, può essere riscritta come una combinazione delle chiavi precedenti. Cosa intendo dire? Che in realtà essendo lo stesso tipo di cifrario di fatto non sto aggiungendo elementi di complessità all\'attacco del cifrario un cifrario per sostituzione monoalfabetico, sempre monoalfabetico resta il fatto che io abbia applicato diversi algoritmi di cifratura me lo lascia totalmente attaccabile agli attacchi statistici né più né meno. Quindi non è tanto la trasformazione ma è perché indicano il cifrario stesso. La stessa cosa possiamo dire tranquillamente per i cifrari per trasposizione il fatto che io applico un rail fance prima e un cifrario per trasposizione delle righe dopo , quello che mi ha quello che abbiamo ottenuto è sempre un cifrario per trasposizione dove magari la costruzione della chiave è lì ma anche quella è una scatola nera. In realtà aver messo uno dietro l\'altro n cifrari dello stesso tipo non aumenta la complessità o la resistenza agli attacchi in maniera significativa. Chiaro la chiave diventa più complessa , forse lo spazio delle chiavi può aumentare in qualche misura ma la sostanza è che le debolezze dell\'algoritmo restano tali e quali. Il passaggio importante che avvenga più o meno all\'inizio del novecento è l\'idea è rendersi conto che se io metto in cascata un cifrario di sostituzione e un cifrario per trasposizione allora il cifrario risultante risulta più robusto dei precedenti; perché siccome hanno delle caratteristiche di funzionamento diverse in qualche maniera l\'uso di un cifrario copre le magagne del precedente e quindi rende più robusto l\'insieme dei due cifrari. Questo porta alla nascita di una serie di cifrari che in realtà mettono insieme o cercano di mettere insieme entrambi gli elementi non necessariamente con cifrari complessi, il fatto stesso di aggiungere un cifrario per sostituzione, anche il più banale che abbiamo, il primo che abbiamo visto aggiunge complessità. Quindi ho un cifrario polialfabetico molto forte che il Vigenère che abbiamo detto che è sicuramente un ottimo cifrario se a questo io aggiungo a valle un\'operazione di trasposizione questo diventa molto più robusto ai tempi di attacco più del doppio più robusto agli attacchi di crittoanalisi di quanto possono essere i singoli cifrari. Questo è un aspetto importante perché dà un ulteriore passaggio alle tecniche di cifratura a quale costo? Il costo che c\'è in questa operazione è che diventa sempre più lungo e complicato fare questa operazione. Una delle applicazioni più frequenti dei cifrari era quello lì, nell' uso dei campi di battaglia l\'ordine scritto, trasmesso o telegrafato quando è iniziato ad arrivare il telegrafo e quindi gli strumenti a disposizione erano il pezzo di legno o la canna per scrivere a terra o poco più quindi è chiaro che dall\'altro lato devo andare incontro alle esigenze pratiche di poter utilizzare quel cifrario in maniera adeguata. Ovviamente una sostituzione seguita da una trasposizione o viceversa attenzione l\'importante è che sia appunto un cifrario prodotto dei due ,un po\' il nome nasce da questo in realtà non è la somma o la combinazione o la concatenazione dei due cifrari risultate come se fosse il prodotto quindi un effetto amplificato dell\'uso. Da qui c\'è il passaggio principale della macchina enigma che è interessante per diversi punti di vista uno perché effettivamente è il primo passaggio di meccanizzazione pesante potremmo definirla, non è informatizzazione in senso stretto non stiamo utilizzando gli strumenti informatici. Immagine che contiene testo, schermata, Carattere, design Descrizione generata automaticamente Enigma Enigma è una calcolatrice a ruote dentate elettrificate mettiamola così, la costruzione è geniale sotto certi punti di vista, utilizza il top della tecnologia dell\'epoca. La cosa che rende forte questo tipo di macchine è che io di fatto implemento un cifrario polialfabetico molto complesso quindi qualcosa che sfrutta il meccanismo che abbiamo visto per Billionare, ma potendolo fare tramite una macchina con un numero di combinazioni molto maggiore è un cifrario di trasposizione che sfrutta il principio che è venuto fuori negli studi di inizio secolo che il cifrario prodotto è più forte. ![Immagine che contiene testo, schermata, Carattere, documento Descrizione generata automaticamente](media/image28.png) Perché è importante? Prima perché di fatto è stata la prima macchina funzionante al riguardo. Secondo, perché nel bene e nel male, l\'impatto sulla Seconda guerra mondiale di questa macchina è significativo. O meglio, l\'impatto della capacità di riuscire a trovare un modo per decifrarla si ritiene oggi con varie ragioni storiche che possano aver ridotto i tempi della guerra a più lustro dai tre ai cinque anni. La cosa che forse colpisce di più è come questo cifrario sia stato essenzialmente rotto per due motivi, uno la capacità di un grosso avanzamento tecnologico e un modo visionario di vedere il futuro, è nata l\'informatica in quel momento, l\'informatica moderna sostanzialmente, ma l\'altro la debolezza umana, è un fatto provato che Enigma non sarebbe stata violabile neppure con quegli strumenti che furono sviluppati, la famosa bomba, il calcolatore, se non ci fosse stata una serie di errori umani nell\'utilizzo di questo cifrario; il cifrario può essere robusto quando vogliamo, l\'algoritmo può essere ottimale ma gli attacchi avvengono dalla fonte meno prevedibile e attraverso i canali meno prevedibili; in questo caso un generale ha venduto le modalità di accesso di enigma. **Spiegazione Macchina (video):** Ogni volta che premi una lettera sulla tastiera, si illumina una lettera sulla Lamboard, ma sarà sempre diversa da quella premuta. Di solito ci sono due persone coinvolte nell\'uso della macchina. Una per digitare le lettere e un\'altra per annotare le lettere che appaiono sulla Lamboard. Digita ogni lettera e annota le lettere sulla Lamboard. Ora abbiamo il messaggio criptato, le lettere mescolate che nessuno può leggere. Questo messaggio viene spesso inviato via radio con il codice MOS. Chi lo possiede possiede una macchina enigma uguale. Per decifrarlo, digita le lettere su una tastiera e annota quelle sulla lamboard per ottenere il messaggio originale. La macchina Enigma serviva sia per cifrare che per decifrare i messaggi. Chi invia e chi riceve il messaggio dovevano entrambi avere una macchina per leggerlo. Quindi, come fa la macchina Enigma a sapere quali lettere darti? Premi una A e esce una H. Parte della risposta sta nell'elettricità, a seconda dell\'interruttore che attiviamo c\'è un percorso diverso tra i fili. Ma se incrociamo questi fili, l\'interruttore A accende la lampadina C e C accende la lampadina B. Il termine vuol dire incrociare i fili, vuol dire che stiamo adottando un vario monoalfabetico per una sostituzione. La tastiera ha 26 tasti. Quando premi uno di questi, si crea un circuito che accenderà una delle 26 lampadine. Le lampadine illumineranno la lettera sopra di esse sulla tavola delle lampade. Quando si rilascia il tasto, il circuito si interrompe e la lampadina si spegne. Ogni tasto connette un percorso diverso, accendendo una lampadina diversa. Diamo un\'occhiata a uno dei rotori, ha i numeri da 1 a 26 per tutte le lettere quindi 1 corrisponde alla A, 2 alla B, 3 alla C e così via fino a 26 per la Z sul lato noterai 26 punti di contatto metallici con altrettanti sul lato opposto. Unendo due rotori, i contatti metallici si collegano permettendo il passaggio di corrente. Nei tre rotori ci sono molti fili che connettono i due lati, ma come puoi vedere è tutto mescolato. Quindi, passiamo al perno per il primo rotore. Segui il filo e vedrai che esce dal perno per il quattro. Quindi, in questo caso, una A è diventata una D. Quando l\'elettricità attraversa un rotore, la lettera cambia una volta. Abbiamo tre rotori con cablaggi diversi. Quando l\'elettricità li attraversa tutti e tre, la lettera cambia tre volte. Allora, alla fine abbiamo il riflettore. Ha 26 contatti metallici. All\'interno c\'è il cablaggio, che collega le lettere a coppie. Quindi entra come una lettera ed esce come un\'altra. Qui a destra c\'è la ruota d\'ingresso. Ha 26 fili che si collegano ai 26 contatti metallici. Mettiamo insieme il tutto. La corrente scorre attraverso uno dei 26 fili. Diciamo il filo per la lettera I. Poi viene cambiata in un\'altra lettera in tutti e tre i rotori. Poi colpisce il riflettore, che cambia nuovamente la lettera. E infine torna indietro attraverso i rotori che la modificano altre tre volte e esce su un filo che rappresenta una lettera completamente diversa se stai contando la lettera è stata cambiata sette volte questo è solo un esempio di come le lettere potrebbero essere criptate ma il percorso può e ognuno di questi tre rotori può ruotare in 26 posizioni diverse. Quando uno di essi cambia posizione , questo cambierà il percorso della corrente elettrica, rendendo difficile prevedere quali lettere usciranno. I 26 fili dalla ruota d\'ingresso scendono lungo il lato destro della macchina fino alla tavola di connessione nella parte anteriore. La tavola di connessione offriva un altro modo per scambiare le lettere, permettendo di sostituirne due. Quindi diciamo che vogliamo scambiare la tab U con la J. Prendi uno di questi cavi e inseriscilo nello spazio della U e l\'altro al posto della J. Sul retro del quadro di connessione i fili entrano nella parte superiore di ogni presa ed escono dalla parte inferiore di ciascuna. Se la lettera non è collegata a nulla, la spina della tastiera non ha cambiato la lettera, poiché è entrata come la O ed è uscita con la O. Quando si inserisce una spina , inserirla nella barra del cortocircuito per evitare il contatto. Ora l\'elettricità scorre dalla parte superiore, esce dal polo superiore della spina, attraversa il cavo ed esce dal lato inferiore. Quello che è entrato come O ora esce a E. Spesso usano fino a dieci cavi. Nota che alcune lettere sono ancora senza spina. Esaminiamo il meccanismo della tastiera. Ogni tasto è collegato a un lungo stero sottostante e a molle che lo fanno tornare in alto quando lo rilasci. L\'ultima fila di tasti ha le molle collegate in alto. Accanto a tutti questi tasti, la maggior parte dello spazio è occupata dai 26 interruttori. Questi interruttori sono più complessi dei semplici on-off visti prima. L\'interruttore ha tre linguette rame diverse. I fili sono collegati qui dietro e il flusso di elettricità è controllato dall\'altro cavo. Quando si preme un tasto, questo scende e colpisce l\'estremità nella gomma della lingua centrale, modificando il percorso dell\'elettricità. Prima di premere un tasto, le due linguette superiori sono collegate. Dopo aver premuto il tasto, le due linguette inferiori si connettono. Ci sono 26 interruttori a chiave ed ecco tutti i fili connessi ad essi. Le linguette superiori sono collegate alle lampadine. I fili vanno verso sinistra e salgono fino alle corrispondenti 26 lampadine. Le linguette centrali si collegano alla scheda di connessione e passano attraverso i fili al lato destro della macchina e raggiungono le lettere sulla scheda dei collegamenti. Un filo dalla batteria entra direttamente nelle linguette di ogni interruttore. Quindi ogni interruttore ha tre linguette e tre diversi punti in cui sono collegati. Prima di premere un tasto, la lingua inferiore non è collegata a nulla, quindi l\'elettricità non ha un percorso. Questo vale per tutti i 26 interruttori dei tasti. Nessun circuito, quindi tutte le lampadine sono spente. Ora, premiamo il tasto X. La batteria e la piastra di connessione sono ora collegate, completando un circuito più complesso rispetto a prima. L\'elettricità fluisce dalla batteria alla linguetta inferiore e poi a quella centrale dell\'interruttore per la lettera X. Poi va direttamente al quadro di distribuzione. In questo caso non c\'è nulla collegato per la lettera X, quindi ritorna fuori come X. Risale in lato ed entra nella ruota d\'ingresso attraverso tre rotori in riflettore e di nuovo indietro attraverso i rotori cambiando lettere ad ogni passaggio iniziato come X è ora la lettera K torniamo alla tavola di connessione per la seconda volta la K viene sostituita con una C quindi attraverso la K un accordo poi fuori per la C ,poi torna dal quadro di connessione al contatto centrale del tasto C. Ricorda, siamo partiti come la lettera X, ma siamo tornati come la lettera C. Poi esce dal filo della linguetta superiore e arriva alla lampadina a forma di C. La corrente scorre nella piastra metallica della lampadina a questo filo sottile che si ricollega alla batteria. Così si completa il circuito. Appena si rilascia la chiave, il circuito si interrompe e la lampadina si spegne. **Quindi, per riassumere, premendo una chiave si attiva l\'elettricità dall\'interruttore specifico collegato alla batteria**. Poi la tavola di connessione, i rotori e di nuova la tavola. Poi l\'interruttore della chiave per la nostra nuova lettera criptata, la lampadina corrispondente e di nuova la batteria. **La lettera cambia sette volte grazie ai rotori**. E poi forse altre due volte al quadro connettori. La lettera non cambia sempre quando passa al quadro connettori. Ma c\'è ancora un po\' che voglio mostrarti. Ogni volta che premi un tasto, almeno uno dei tre rotori girerà. Premi un tasto e il rotore gira. Questo significa che se premi due volte lo stesso tasto, otterrai due lettere diverse. Se continua a prendere la stessa lettera, si accende una luce diversa ogni volta, rendendo Enigma potente. Il codice cambiava sempre, quindi era difficile prevedere quali lettere sarebbero uscite. I rotori girano in modo completamente meccanico, senza bisogno di elettricità. Anche senza batteria, premendo un tasto, il rotore girerebbe comunque. Sul fondo della macchina c\'è una grande lastra metallica chiamata barra al rotore. Funziona come un\'altalena o un dondolo. Premendo uno qualsiasi dei tasti lo passa da questo lato, il che lo solleva dall\'altro. Sul retro è dove avviene la magia. Questo usa un meccanismo a cricchetto e rocchetto. Questo è l\'ingranaggio a cricchetto e questo è il rocchetto. Quando il cricchetto viene spinto verso l\'alto fa girare il rotore e poi ritorna giù. Puoi vedere come questo farebbe girare in una sola direzione? Questo movimento su e giù continuerà a far girare i rotori di una tacca ogni volta. I prossimi due rotori funzionano diversamente. Diamo un\'occhiata al secondo. Spesso il cricchetto non può toccare i denti dell\'ingranaggio a cricco, bloccato da un bordo intorno al primo rotore. Il primo rotore ha una piccola tacca qui intorno. Quando il rotore gira, la tacca si sposta lungo il bordo. Quando riappare dall' altro lato il cricchetto si incastra nell\'attacco e il secondo rotore può girare, ma solo una volta. La prossima volta sarà bloccato di nuovo e solo il primo rotore potrà girare. Il bordo sul primo rotore deve completare un giro prima che il secondo possa girare di nuovo, ogni 26 pressioni del tasto. Lo stesso vale per il terzo rotore. C'è un altro bordo sul secondo rotore che deve fare un giro completo prima che il terzo possa girare. Infine, ma non meno importante, le tre leve sul retro di indice all\'estremità scorrono lungo il bordo esterno dei denti degli ingranaggi del rotore, facendoli fermare sempre sul numero successivo, per garantire l\'allineamento costante dei contatti elettrici tra i rotori. Prima di usare Enigma, configurarla con le impostazioni corrette. Ci sono quattro da impostare. Primo è l\'ordine dei rotori. Ogni Enigma aveva 5 rotori. Scegline 3. E decidi l\'ordine di inserimento. Poi c\'è la regolazione dell\'anello per ogni rotore, che consiste nello spostamento delle ruote numeriche e della tacca sul lato. Questo significa che cambierà quando i rotori più a sinistra passeranno al numero successivo. C\'è la posizione iniziale di ogni rotore. Puoi impostarla tramite queste finestrelle qui sopra. L\'ultima impostazione è la configurazione della tavola di commutazione qui davanti. Quindi tutti nell\'esercito tedesco avevano queste impostazioni in anticipo, distribuite su carta per sapere quali impostazioni usare in ogni giorno. Anche se la parte avversaria ha una macchina Enigma, non potrà leggere i messaggi senza conoscere le impostazioni del giorno. Link video: [[https://www.youtube.com/watch?v=ybkkiGtJmkM]](https://www.youtube.com/watch?v=ybkkiGtJmkM) Allora è chiaro che sono un cifrario prodotto a tutti gli effetti dove la parte di sostituzione è un cifrario polialfabetico. Il cifrario polialfabetico è quello lì che sostanzialmente è gestito dai rotori il fatto che i rotori siano concatenati fra di loro con quel meccanismo cioè sostanzialmente il secondo gira solo dopo che il primo ha completato le 26 rotazioni , mi permette sostanzialmente di aumentare in maniera estremamente ampia quello che è la complessità della mappatura. La cosa interessante di questo cifrario è che è un numero molto grande, 26 fattoriali, andrebbe bene anche oggi per molti aspetti di cifratura. La debolezza era connessa al problema degli eventuali attacchi statistici. Per questo interviene il fatto, come lo risolve Billionare? passando dal monoalfabetico al polialfabetico. Cosa vuol dire? Cambiare l\'alfabeto ogni volta che faccio un carattere. Cosa fa Enigma? Stiamo cambiando l\'alfabeto ad ogni rotazione. Ma non ne abbiamo 26. Ne abbiamo 26 per 26 per 26. Quindi prima di ritornare all\'alfabeto originale, perché ci torna, stiamo passando un numero piuttosto grande 26 x 26 x 26 , quindi un messaggio di più di 8000 caratteri è cifrato sempre con un alfabeto differente. La modalità di attacco di Kasiski è legata sulla ripetizione della chiave qui stiamo dicendo che se va bene andiamo nell\'ordine di un testo abbastanza ampio. A seguirli abbiamo il riflettore è vero che tutte le enigmi hanno umane lo stesso riflettore non è qualcosa che cambia ma mi consente sostanzialmente di shakerare di nuovo i caratteri perché siamo tornati indietro quindi in realtà anche ammesso che il riflettore fosse una mappa A con A entro ed esco non è così anche perché fisicamente non è possibile se il filo entra da un connettore deve uscire per forza da un altro ma anche se questo fosse il più banale degli alfabeti di Cesare shifting di una posizione, di due posizioni, di tre posizioni poi che fa? rientra nelle ruote e quindi le combinazioni che noi abbiamo seppure non del tutto statisticamente indipendenti sono 26x26x26 , stiamo parlando di numeri enormi la macchina ce la fa noi non ce la facciamo. Quindi se ci concentriamo su quello che è il cifrario per sostituzione di tipo polialfabetico però con un ampio range di movimento difficile da attaccare seppure attaccabile. Quella roba che c\'è messa davanti il pad o la tastiera sono invece un banalissimo cifrario per trasposizione il più banale possibile stiamo scambiando alcune coppie di carattere da 3 a 10 , però mi consente di fare il passo successivo è diventato un cifrario prodotto quindi in qualche maniera l\'idea del progettista di questa macchina: è inutile che vada a mettere qui un altro meccanismo particolarmente complicato la complessità l\'ho già messa nell\'insieme geniale della gestione dei rotori però mettendoci un cifrario per trasposizione diventa cifrario prodotto, essendo cifrario prodotto siamo saltati, abbiamo detto più della somma delle singole difficoltà quindi quello che è il cifrario per trasposizione oltre ad intervenire per un fattore moltiplicativo che comunque non è tanto significativo come l\'altro interviene perché cambiamo tipologia di cifrario. Altri due aspetti prima di passare alla tecnologia. Allora, anni 20-30 il progetto della macchina unica. Siamo agli albori dell\'elettricità. Oggi immaginare un rotore con i fili opportunamente isolati, accettabilmente resistenti alle angherie del tempo perché deve poter funzionare comunque, la plastica non esisteva infatti sono fatti in bakelite che è un materiale relativamente fragile e non banale da gestire quindi i componenti utilizzati con la tecnologia di oggi non sono particolarmente complessi con le tecnologie dell\'epoca lo erano. Qui stiamo agli albori della macchina da scrivere elettrica quindi ci sono degli aspetti tecnologica estremamente interessante : l\'idea del rotore completamente meccanico perché la batteria come sempre si esaurisce quindi c\'è il problema di consumarla il meno possibile ovviamente le lampadine non sono dei led ma sono delle lampadine a incandescenza le batterie, la macchina, come l\'avete visto lì era realmente portabile, seppure abbastanza pesante. Per la matematica se potevamo capire qual è lo spazio delle chiavi, quindi, quant\'è la resistenza alla forza bruta di questa macchina enigma il conto lo si può fare così simbolicamente parlando il numerino che esce di sotto è il risultato di questo prodotto. essenzialmente se noi con P denotiamo le trasformazioni quindi quante sono le possibili variazioni della plug board quella davanti dipende da quanti cavi abbiamo messo da quanti ne possiamo mettere al massimo a pensare che c\'è un massimo perché chiaramente io riempio sempre due buchi quindi il 10 è più o meno il massimo che posso mettere, sarebbe 26 e potrei mettere 13 se faccio la trasformazione tra tutti ma mi cambia relativamente poco così come abbiamo detto prima. U denota la complessità introdotta dal riflettore L, M ed R, le complessità rispettivamente del rotore di sinistra, ,centro e destra, quindi le complessità di ognuno di questi. Allora, visto il processo che ora è chiaro, che cosa succede sostanzialmente? Noi andiamo, prima siamo passati dalla plugboard, quindi introduciamo tutte le possibili varianti della chiave è un calcolo combinatorio quante sono le coppie che possiamo mettere rispetto a 26? ci sono quante coppie posso sopportare? è quello che denotiamo n fattoriale tra le parentesi è un calcolo combinatorio poi che cosa succede? passiamo la prima volta tra i vari rotori. Ogni rotore abbiamo detto che ha una complessità di 26 fattoriale. Poi da un riflettore che ha un ingresso e un\'uscita più o meno l\'ordine di grandezza della sua complessità è simile a quello della plugboard, solo che avviene su tutte e 13 gli elementi. Abbiamo 13 combinazioni, 13 possibili variazioni. A questo punto vi è indicato come L^-1^, ma non va inteso in senso matematico, è la trasformazione immersa del rotore in F. Infine, ripassiamo dal plug board cioè rientriamo e usciamo di nuovo dal possibile cambio della plug board. Qui vi è la possibilità che nell\'esempio che portavamo nell\'animazione, nell\'ingresso del video la plug board non cambiava niente ma comunque non cambiare è una possibilità ma poi quando rientra, ripassa dalla plug board e cambia carattere; quindi, viene applicata due volte sostanzialmente a questo cifrario. Immagine che contiene testo, schermata, Carattere, design Descrizione generata automaticamente I rotori 3 su 5 è un\'altra ulteriore combinazione che stiamo introducendo; quindi, supponiamo che io riesca a rubare una macchina enigma io non so quali sono tutti questi presi, quindi già questo introduce le complessità. Se devo analizzare il numero di varianti possibili , sono tutte le terne su 5 elementi che posso andare a pigliare. Quindi il numero di combinazioni è piuttosto grande, talmente grande che i crittoanalisti dell\'epoca lo considerarono inattaccabile. Poi furono i polacchi molto più vicini al confine tedesco e molto più coscienti del fatto che c\'erano pieni tedeschi di invasione, quindi molto più attivi. Vi ricordo giusto per capire, per raccontare al minimo della storia che c\'è intorno alla macchina, l\'Inghilterra degli anni 20 sembra era pacifista; quindi, sembra un\'investita su quelle che potrebbero essere tutti il resto; quindi, anche i finanziamenti dei loro servizi segreti e l\'attenzione non ce n\'erano. Sostanzialmente, pur essendosi resi conto che c\'era un cifrario, non ci investivano , lo dichiaravano essenzialmente non attaccabile, e continuavano ad utilizzare le tecniche di spionaggio tradizionale. Nell\'anno dello spionaggio tradizionale, più o meno negli anni 30, i piani costruttivi di Enigma vengono fuori, nel modo più tradizionale possibile, un ufficiale tedesco insoddisfatto se l\'è venditi. Quindi la robustezza di un cifrario non deve stare sull\'algoritmo. I piani furono acquisiti dall'intelligence , chiamiamoli servizi segreti, sempre polacca, che ci ha lavorato, riuscì a costruire una macchina enigma equivalente, allora l\'unico modo per poter approcciare i tentativi di attacco a questa macchina è da meccanizzare anche l\'attacco. La Polonia, fu invasa, questo lavoro dei polacchi fu salvato per miracolo , comincia la storia quella di leggere i pacchi e sfruttarono questa conoscenza per andare avanti e lì c\'è la storia di un passaggio, se volete, importante che avvenne fu proprio nell\'idea che invece con le macchine cablate si doveva cominciare a provare a programmarle e lì è nata la storia della famosa bomba , una macchina meccanica che faceva un rumore bestiale. Quindi nasce il primo calcolatore programmabile. La prima idea di fondo che è stata portata era quella che conosciamo tutti, istruzioni e dati codificati nella stessa maniera, in maniera tale che io posso volta per volta programmare. Era un calcolatore mirato, principalmente l\'obiettivo del calcolatore era, mi metto lì, faccio tentativi fino a quando non ottengo il testo. C\'era una chiave del giorno, perché anche questa è una traccia comune in qualsiasi approccio crittografico. Le chiavi devono essere effimere, cioè devono durare il meno possibile, in maniera tale che se il potenziale attaccante riesce a rompere il cifrario, il numero di messaggi a cui può accedere è limitato. **Quindi il primo approccio è la chiave che si cambia ogni giorno**. Per rendere una cosa più difficile, la chiave, chiamiamola primaria per ora, quindi questa chiave che era scritta nel documento, come veniva utilizzata? Veniva utilizzata per cifrare la chiave del messaggio. Quindi nel protocollo di uso di enigma c\'era scritto io operatore centralinista decido una nuova chiave, la chiave che cos\'è? La chiave è la combinazione dei tre rotori che sto utilizzando e questo era nel blocchetto che scrivevo ,nel plug board che metto lì è quella più facile da modificare rapidamente qual è? La posizione iniziale, perché a seconda della posizione iniziale dei rotori che si inserisce sto partendo con un alfabeto differente. Quello è in una chiave a tutti gli effetti, perché il punto iniziale è comunque partire, se non lo so, io non sapevo mai aggiustare le tre rotelle nella posizione iniziale e quindi non è in grado di funzionare. Quindi, alcuni elementi erano costanti e scritti , tipo la chiave da utilizzare è "il 10 ottobre". L\'operatore doveva scegliere una posizione per il messaggio e codificare con la chiave di giornata questa posizione. Il ricevente quindi cosa faceva? riceveva il messaggio decodificava i tre caratteri riposizionava ed era un\'operazione rapida le tre lettere e poi riusciva a decodificare il messaggio. È il meccanismo con cui tutt\'oggi utilizziamo per i cifrari abbiamo appunto una chiave principale che utilizziamo esclusivamente per generare delle chiavi effimere che poi hanno una durata per il numero di caratteri estremamente limitata nel tempo in modo tale che il potenziale attaccante che riesce a violare il cifrario viola la chiave effimera e non riesce a risalire perché c\'è un\'altra chiave. Non solo la chiave primaria viene utilizzata pochissimo e su un numero limitatissimo di elementi anche se io mando 100 messaggi differenti sto codificando 300 caratteri, 3 nuove posizioni per ogni uno dei messaggi che è un cambiamento statistico estremamente basso difficilissimo da attaccare in maniera statistica. Quindi il protocollo di utilizzo di enigma era pensato in maniera robusta. Poi sono intervenuti alcuni fattori, primo che per ovviare un errore di trasmissione decisero di mettere nel protocollo che la chiave, quella di messaggio, quella di effetto, venisse codificata due volte. Quindi in realtà l'operatore mandava due volte la nuova sequenza ecco questo è un punto di debolezza non assicurabile perché non è a tutti gli effetti una conoscenza della sorgente ma è una conoscenza della struttura del sorgente, perché so che i primi X caratteri rappresentano le chiavi di messaggio questa informazione tramite canali spionistici, uso queste informazioni che fanno parte del manuale di utilizzo di enigma. E quindi chi cominciò a studiare questo cifrario come prima informazione aveva veramente un valore importante e consentiva all\'attaccante cifrare il messaggio. Un\'altra debolezza del sistema, i tedeschi e i militari messi insieme sono estremamente precisi ed estremamente dettagliati, in altri termini i messaggi avevano una struttura molto ben definita, la maggior parte dei messaggi aveva una struttura molto ben definita e quindi per me lo attaccavo, una volta che lo identificavo ero in grado di immaginare certi elementi tra quelli con una struttura più definita e di cui era possibile avere un\'idea del contenuto c\'era il bollettino meteorologico che trasmetteva ogni mattina come tutti i bollettini meteorologici è assolutamente schematico , volutamente schematico perché serve con facilità ad essere trasmesso ed eventualmente perdo tutta l\'informazione al volo, la so solo di quale parte faccio l\'errore che d\'altro canto però è il miglior modo per cercare di aiutare un critto analista non solo sa quale è lo schema, ma in realtà un minimo sarà anche contenuto perché è chiaro che le previsioni del tempo non erano quelle di oggi, ma se pioveva in un determinato luogo lo sapeva, quindi si poteva aspettare un sotto insieme che diceva quello che era di oggi, alta, bassa, quello che sia. La macchina, la famosa bomba che faceva la mattina quando si veniva switchata la nuova chiave veniva messa in moto e gli si dava in pasto tutti i messaggi che si riuscivano ad intercettare , nel 1924 non ci riuscivo, la domanda alla fine è troppo grande, anche se ne so la struttura, anche se lo so, anche se so che erano troppi caratteri e tutto il resto e quando andava bene riuscivo a rompere il cifrario a tarda da serata, quando già era vecchio il messaggio. Chi ha visto i film si ricorda qual è stato l\'altro elemento umano in questo caso che aiutava nel rompere il sistema, che in qualche maniera riduceva in maniera sistematica le prove per consentire di romperlo in qualche ora e quindi quando era utile principalmente intercettare i messaggi diretti, l'errore umano era legato sul fatto che molti centralinisti tendevano ad utilizzare sempre lo stesso codice dei codici ripetitivi per la chiave di messaggio. Con queste informazioni, con un calcolatore programmabile, in poco tempo, riuscivo a decifrare il messaggio. I polacchi riuscirono a trovare, un meccanismo matematico per cui riuscì a separare l\'influenza dell\'alfabeto per sostituzione da quella per trasposizione. Si riuscì a rompere il concetto di prodotto. Non avevo un unico cifrario prodotto. Avevo un cifrario per trasposizione che poi mandavo a un cifrario per sostituzione avendo i due pezzi, riuscendo a separare i due effetti, potevo attaccare lo specifico cifrario per sostituzione a tentativi più che abbassando la complessità eliminando l\'effetto determinante quindi il primo venne tolto e poi con tutto questo all\'inizio di tutti i messaggi alcuni operatori che ripetevano o utilizzavano con più frequenza quello che era il codice, di fatto erano quelli che avevano consentito di attaccare in maniera efficace tanto da essere strategicamente significativo il cifrario enigma. Chi decideva come usare queste informazioni? Un aspetto fondamentale era quello di non far capire, in questo caso ai tedeschi, che il cifrario noto. L\'altro è dalla parte dell\'intelligence tedesca e in particolare nella parte più alta dell\'intelligenza tedesca c\'è stata una sottovalutazione. La storia ha provato, legge gli documenti, che in realtà una parte significativa dell\'intelligence tedesca aveva intuito che qualcosa si riusciva a decifrare e che quindi il cifrario enigma non doveva essere più considerato sicuro in assoluto. Però è stato sottovalutato. Tenete presenti gli strumenti c'erano , per esempio tutte le messaggi che venivano scambiati a livello di comando più alto e da guerra nautica non erano accattate, sapete perché? Perché venivano utilizzati in ogni macchina 5 rotori piuttosto che 3. Quell\'aumento di combinazioni era sufficiente a non permettere, con la te