Loading
Study Reminders
Support
Text Version

Set your study reminders

We will email you at these times to remind you to study.
  • Monday

    -

    7am

    +

    Tuesday

    -

    7am

    +

    Wednesday

    -

    7am

    +

    Thursday

    -

    7am

    +

    Friday

    -

    7am

    +

    Saturday

    -

    7am

    +

    Sunday

    -

    7am

    +

Fondamenta della crittografia Prof. Dr. Ashish Choudhury (Ex) Infosys Foundation Career Development Chair Professor Indian Institute of Technology - Bengaluru Collezione - 02 Symmetric Key Encryption Hello tutti, benvenuti alla seconda lezione. Il piano per questa lezione è il seguente. (Riferimento Slide Time: 00.36) discuteremo i problemi fondamentali affrontati dalla crittografia ovvero il problema dell'accordo chiave e un problema di comunicazione sicuro. Poi discuteremo i vari tipi di primitivi crittografici ovvero i primitivi chiave simmetrici e i primitivi chiave asimmetrici. E poi inizieremo la nostra discussione su primitivi chiave simmetrici dove vedremo la sintassi del meccanismo di crittografia simmetrica e la definizione di sicurezza informale e poi finiremo la lezione con il principio di Kerckhoffs. Destra! (Fare Slide Time: 01 :05) Quindi, se ricordate nell'ultima lezione abbiamo discusso che il problema centrale affrontato dalla crittografia è quello della comunicazione sicura. E in essa si scopre che la comunicazione sicura è in realtà risolta risolendo 2 problemi di core e il primo problema di core è quello di un accordo chiave. Quindi, nel problema dell'accordo chiave, lo scenario è il seguente. Abbiamo 2 entità un mittente e il destinatario che non si conoscono e che non hanno alcun tipo di informazione pre condivisa. E si incontrano per la prima volta e il requisito per il protocollo d'accordo chiave è che come per il protocollo il mittente e il destinatario dovrebbero dialitalizzare l'uno con l'altro su un canale pubblico e dovrebbe essere garantito al mittente che effettivamente sta parlando con il ricevitore Ram e viceversa. E alla fine del protocollo sia mittente che destinatario dovrebbero emettere una chiave comune k. Il requisito di sicurezza dal protocollo d'accordo chiave è che anche se il mittente e il destinatario parlano pubblicamente e se c'è una terza parte che sta effettivamente origliando la comunicazione o notando l'intera comunicazione che sta accadendo tra il mittente e il destinatario, allora il terzo non dovrebbe essere in grado di capire qual è esattamente la chiave che il mittente e il destinatario stanno andando in uscita alla fine del protocollo. Quindi, è come dire il seguente che se considero una classe e il protocollo d'accordo chiave dovrebbe richiedere che se voglio essere d'accordo su una chiave con un determinato studente, allora usando il protocollo d'accordo chiave, dovrei gridare qualcosa in classe. E in risposta che particolare studente dovrebbe ridare qualcosa a me e usando qualunque cosa gli comunicassi e qualunque cosa comunicasse a me, entrambi dovrebbero essere in grado di calcolare una chiave comune e nessun altro in classe che abbia effettivamente visto i messaggi reali che ho comunicato a quel particolare studente e che studente mi ha comunicato non dovrebbe essere in grado di capire qual è esattamente la chiave che io stesso e quel particolare studente stanno andando in uscita. Questo è il primo problema di core affrontato dalla crittografia. E questo sarà il tema della seconda metà del corso, dove vedremo come usare la crittografia a chiave pubblica che possiamo risolvere questo problema di accordo chiave. (Riferimento Slide Time: 03.19) Il secondo problema di core che si rivolge alla crittografia è quello della comunicazione sicura. E qui l'impostazione è la seguente. Immaginate che mittente e destinatario abbiano ora una chiave segreta k che è stata concordata da qualche significato magico in questo contesto, in realtà, percorrendo un protocollo di scambio chiavi. Immaginate quindi che mittente e destinatario abbiano eseguito un protocollo di scambio chiavi sicuro, e di conseguenza hanno una chiave comune già disponibile con loro. Ora usando la chiave comune, l'obiettivo del mittente e del destinatario è quello di parlare su un canale pubblico tale da garantire la riservatezza della comunicazione e dell'integrità della comunicazione. Per riservatezza intendo qualsiasi terza parte che non abbia la conoscenza della chiave non deve essere in grado di capire quali sono esattamente i contenuti, che mittenti e riceventi si scambiano tra di loro. E per integrità intendo dire che se c'è una terza parte che effettivamente intercetta parte della comunicazione e cerca di cambiare il contenuto dei messaggi, allora dovrebbe essere individuabile a entrambe le estremità. Ecco dunque il secondo problema affrontato dalla crittografia e questo sarà il tema della prima metà del corso, ovvero la crittografia simmetrica, dove ipotizzeremo che in qualche modo il mittente e il destinatario abbiano già concordato sulla chiave e il nostro obiettivo sarà quello di risolvere i problemi di riservatezza e integrità. (Riferimento Slide Time: 04.39) Così, pressappoco nella crittografia, usiamo 2 tipi di primitivi. Il primo tipo di primitivi sono i primitivi chiave simmetrici, chiamati anche come primitivi di chiave privata. E qui la stessa chiave verrà utilizzata sia dal mittente che dal destinatario. Ecco perché il nome symmetric key primitives o la crittografia a chiave privata. Simmetrico perché è simmetrico nella natura. La stessa chiave viene utilizzata sia alla fine dei mittenti che come i ricevitori terminano. E il nome la crittografia a chiave privata perché la chiave k che è comune sia al mittente che al destinatario sarà privata, non sarebbe disponibile nel dominio pubblico. Ora, ci sono entrambi i pro e i contro di questi tipi di primitivo. Il lato buono di questi primitivi è che sono computazionalmente molto efficienti nella pratica. E il lato negativo di questi primitivi è che l'accordo chiave sarà una grande questione. Che questo tutti questi primitivi lavori nell'ipotesi che la chiave comune sia stata già concordata da qualche meccanismo magico, e che è una grande assunzione. Quindi garantire che sia mittente che destinatario abbiano la stessa chiave è il compito impegnativo. Questo è un lato negativo di questi primitivi. Il secondo tipo di primitivi sono chiamati come primitivi asimmetrici o primitivi di crittografia a chiave pubblica dove il primitivo è operato con 2 tasti. Una delle chiavi che è il pubblico la chiave sarà disponibile nel dominio pubblico mentre l'altra chiave ovvero, la chiave segreta sarà disponibile solo ad uno degli enti o nell'ambito dello schema di codifica, sarà disponibile solo con il ricevitore. Questo significa che questa ha natura asimmetrica. Ecco perché il nome è primitivo asimmetrico. E il motivo per cui si chiama public key primitive è che una delle chiavi è disponibile nel dominio pubblico. Di nuovo, ha questi tipi di primitivi hanno sia plus che il lato negativo. Il lato buono di questi primitivi è che non si ha bisogno di alcun tipo di accordo chiave. Il che significa che se prendo uno schema di crittografia pubblica per esempio, allora non c'è alcun obbligo di fare alcun tipo di accordo chiave. Chi vuole criptare un messaggio per me, può prendere la mia chiave pubblica che sarà disponibile in ambito pubblico. Quindi non ho bisogno di concordare esplicitamente una chiave con quel mittente particolare. Il lato negativo di questi tipi di primitivi è che sono computazionalmente inefficienti che significa la quantità di calcolo che interviene in questo tipo di primitivo è di diversi ordini di grandezza rispetto al calcolo richiesto nei primitivi della chiave simmetrica. In pratica, usiamo una combinazione di entrambi. Così quando ci avviliremo del nostro corso e parleremo dei veri protocolli mondiali come SSL, vedremo come combineremo entrambi questi 2 primitivi per ottenere il meglio da entrambi i mondi. (Riferimento Slide Time: 07 :19) Quindi ora iniziamo la nostra discussione su schemi di crittografia a chiave privata o simmetrica. Quindi, a livello molto alto, l'obiettivo è di seguire. L'impostazione è la seguente, abbiamo un mittente e il destinatario e da qualche meccanismo magico, supponiamo che sia stata condivisa una chiave casuale concordata tra il mittente e il destinatario. Così dengo la chiave come k che in realtà sarà un po' stringa. Ora sender è interessato a inviare qualche messaggio m, che sarà di nuovo un po' stringato, e nel gergo della crittografia chiamiamo questa stringa m ad essere il querelante. Ora usando la chiave, il mittente utilizzerà un algoritmo di crittografia, che prende il messaggio e la chiave come input. E produce un'altra stringa di bit denotata come C, ovvero il testo cifrato o il testo scrambolo, che verrà comunicato su un canale pubblico al destinatario. Al termine ricevente, il ricevitore prenderà il cifrato che è un po' stringa, e la chiave che è la stessa chiave con cui il mittente ha operato il processo di codifica e sta andando ad operare un algoritmo di decodifica. Ora così l'algoritmo di decriptazione prenderà il testo scrambolo e la chiave e sta andando a produrre il testo di pianura che il mittente ha effettivamente crittografato utilizzando l'algoritmo di crittografia. Quindi il motivo per cui questo meccanismo di crittografia è chiamato meccanismo di crittografia simmetrica è che abbiamo una simmetria che la stessa chiave sta ottenendo sia per la crittografia che per la decodifica. (Riferimento Slide Time: 08 :51) Così prima di entrare nella descrizione formale di un processo di codifica a chiave simmetrica, cerchiamo di prima di tutto capire la differenza tra deterministico e un algoritmo randomizzato. In un algoritmo deterministico, l'output è una funzione deterministica dell'input. Questo significa, se consideriamo la transizione retta all'interno dell'algoritmo, allora il flusso dall'input all'output è sempre una funzione deterministica. Ciò che intendo dire con questo è, se eseguo un algoritmo deterministico su un input x 100 volte, vado a ottenere la stessa emissione y 100 volte. Non otterrei output diverso che significa che l'output Y è una funzione deterministica dell'input x. Mentre in un algoritmo randomizzato il flusso dall'input all'output è non deterministico. E il flusso sarà deciso dal valore di stringhe di bit casuali che verranno generate all'interno dell'algoritmo, come parte dell'algoritmo. Il che significa, in un algoritmo randomizzato, non è garantito che se io chiamo quell' algoritmo con lo stesso input ancora e ancora, non è garantito che otterrò la stessa uscita. L'output può dipendere dalla sequenza di bit casuali, che sto per generare all'interno dell'algoritmo. E a seconda del valore di quei bit casuali, quale percorso ho seguito all'interno dell'algoritmo. Ecco quindi una differenza di altissimo livello tra un algoritmo deterministico e un algoritmo randomizzato. (Riferimento Slide Time: 10 :17) Ora, vediamo la sintassi di uno schema di crittografia simmetrica. Quindi, qualsiasi schema di crittografia dei tasti simmetrici, chiamato anche come cifrario consisterà in 3 algoritmi. Il primo algoritmo è l'algoritmo di generazione chiavi, che viene denotato dal Gen. Questo algoritmo non prenderà alcun input esterno. Quello che questo algoritmo farà è come parte dell'algoritmo all'interno ci saranno alcune stringhe di bit casuali che verranno generate, che denotano da questa particolare notazione. Quando scrivo questa notazione che qualcuno sta lanciando la moneta, intendo che all'interno dell'algoritmo verranno generate stringhe di bit casuali e in base al valore di quel bit stringa, che l'output verrà determinato. L'uscita di questo algoritmo di generazione chiave è una chiave denotata dal simbolo k. E dato che si tratta di un algoritmo randomizzato, ogni volta che eseguo l'algoritmo di generazione chiavi, sono legato ad ottenere un output diverso, non otterrei la stessa uscita. La sintassi che usiamo per denotare l'algoritmo di generazione della chiave è la seguente. Diciamo che l'algoritmo di generazione chiave Gen, non prende alcun input. Ecco perché le staffe sono lasciate vuote perché non assume alcun input esterno. E si va a produrre una chiave che io denota da k. E questo k appartiene ad un set più grande, questo k calligrafico, che è il set di tutte le chiavi possibili che è l'algoritmo di generazione chiavi in uscita. E la cosa importante qui è che dato che questo algoritmo è un algoritmo randomizzato, ecco perché non dico che l'output di Gen ha assegnato una chiave di valore, invece dico che l'output di Gen prenderà uno dei possibili valore k dal set di tutte le possibili chiavi. Non uso l'operatore di assegnazione perché non è una funzione deterministica. Si tratta di una funzione randomizzata è un algoritmo randomizzato. Ecco allora questa calligrafica K (la maiuscola K) è il set di tutte le chiavi possibili che l'algoritmo di generazione chiave potrebbe produrre. Per esempio, se sappiamo che l'algoritmo di generazione della chiave sta andando a produrre una chiave a 256 bit, allora so che questa calligrafica K è l'insieme di tutte le possibili 256 bit stringhe, ovvero, lo spazio chiave K è di 2 alla potenza a 256. E come ho detto prima, questo algoritmo di generazione chiave sarà un algoritmo randomizzato. Il secondo algoritmo in qualsiasi schema di crittografia a chiave simmetrica è l'algoritmo di crittografia denotato come Enc. E ci vorranno 2 input esterni cioè il testo di pianura che il mittente vuole criptare, che è un po' stringa che ho denotato dal simbolo B, e il tasto k, che l'algoritmo di generazione chiave avrebbe prodotto. E a parte questi 2 input, ha un input interno cioè le monete casuali interne, generate o i bit casuali generati come parte di questo processo di codifica. E di conseguenza, questo algoritmo di crittografia è un algoritmo randomizzato. Quindi, in base al messaggio, lo spazio chiave e i bit casuali generati all'interno dell'algoritmo di crittografia, l'algoritmo di crittografia sta andando a produrre un testo cifrato denso come c. Così, come ho detto che dato che l'algoritmo di crittografia potrebbe generare bit casuali interni per decidere l'esito c, si tratta di un algoritmo randomizzato. E la sintassi che usiamo per denotare l'algoritmo di crittografia è la seguente: diciamo che la crittografia del testo di pianura m (all'interno delle staffe che sto scrivendo il messaggio m come input) è l'input esterno con questa funzione di crittografia e la chiave k viene inserita come script secondario. Dirò che il messaggio m è criptato sotto la chiave k. E dato che questo algoritmo è un algoritmo randomizzato, non sto usando l'operatore di assegnazione per denotare l'output di questo algoritmo di crittografia Invece, sto dicendo che l'output di questo algoritmo di crittografia sarà uno dei possibili cifrati dal set di tutti i possibili cifrati che il vostro algoritmo di crittografia potrebbe produrre. Dato che questo processo di crittografia è un algoritmo randomizzato, ciò che significa è che anche se io chiamo questo processo di codifica con lo stesso valore di m e lo stesso valore di k più volte, mi capita di ottenere diversi cifrati perché ogni volta che chiamo questo processo di codifica, la serie di stringhe di bit casuali generate come parte dell'algoritmo saranno diverse. E siccome c sarà funzione del messaggio, chiave e dei bit casuali interni, il valore di c sarà diverso per i diversi richiami di c. Ecco quindi la sintassi dell'algoritmo di crittografia. Ora, l'algoritmo di decodifica prende il cifrato c come input esterno e il k chiave che è stato generato dall'algoritmo di generazione chiavi, in cambio produce il testo in chiaro m. La sintassi che seguo per denotare l'algoritmo di decodifica è la seguente: diciamo che la decodifica dell'input c qui c è l'input esterno, che viene alimentato alla funzione di decodifica insieme alla chiave k. Dirò che la decodifica del testo cifrato c sotto la chiave k produrrà il messaggio m. Il messaggio m appartiene alla più grande serie di possibili querelanti ovvero M, che è lo spazio di testo pianeggiante. Notate che il mio algoritmo di decodifica qui è una funzione deterministica. Non ci sono stringhe di bit casuali che vengono generate all'interno dell'algoritmo di decodifica per decidere l'esito m. Di conseguenza, non sto usando la notazione della freccia per denotare l'esito della decodifica. Sto invece utilizzando l'operatore di assegnazione per denotare l'esito della funzione di decodifica. Quello che intendo dire con questo è se io chiamo l'algoritmo di decodifica più volte con lo stesso valore di k e lo stesso valore di c, sono legato ad ottenere di nuovo lo stesso m e ancora, non mi troverei diverso m per i diversi richiami di Deck sullo stesso valore di c e k. In tal senso, si tratta di una funzione deterministica. Di conseguenza, utilizziamo l'operatore di assegnazione per denotare l'output della funzione Dec. Ecco quindi la sintassi del tuo algoritmo di generazione chiavi, algoritmo di codifica e algoritmo di decodifica. Notate che abbiamo richiesto che l'algoritmo di generazione della chiave e l'algoritmo di crittografia fossero randomizzati mentre l'algoritmo di Dec dovrebbe essere deterministico, e c'è un motivo per questo, che potremo apprezzare quando discuteremo i vari modelli di attacco in questa lezione. (Riferimento Slide Time: 17 :09) Ora come utilizzare tipicamente un cifrario simmetrico. Immagina di avere uno schema di codifica a chiave simmetrica. Ovvero, abbiamo una collezione di algoritmo di generazione chiavi, algoritmo di codifica e algoritmo di decodifica. E suppitiamo che i passi di questa generazione chiave, gli algoritmi di crittografia e di decodifica siano pubblicamente noti. Questo significa che i passi sono noti anche al mittente e al destinatario o a qualsiasi terzo in questo mondo. Ora, per usare questo cifrario simmetrico, quello che il mittente sta per fare è quello di eseguire l'algoritmo di generazione della chiave, che sta andando a produrre una delle chiavi candidate cioè k dallo spazio chiave. Questa chiave sarà concordata con il ricevitore da qualche meccanismo magico all'inizio della seduta. Quindi, immaginate che all'inizio del mittente di sessione esegua questo algoritmo di generazione chiave. In quella sessione ci sono diversi messaggi, che sender vorrebbero criptare e comunicare al destinatario utilizzando questo k. Il primo passo della sessione sarà l'algoritmo di generazione chiavi e l'accordo di quella chiave con il ricevitore da qualche meccanismo magico. Ora una volta che la chiave è concordata, ogni volta che il mittente vuole cifrare un testo semplice m usando questa chiave quello che succederà è il seguente, verrà eseguito l'algoritmo di crittografia per produrre il testo di cifratura. Il testo di cifratura sarà comunicato sul canale pubblico, attraverso il quale il mittente viene comunicato al destinatario. Come e quando il destinatario riceve il testo cifrato quello che farà è che il destinatario conoscerà quale processo di crittografia è stato utilizzato dal mittente. Così conoscerà il processo di decodifica corrispondente e non solo, conoscerà anche la chiave usando la quale il mittente ha operato il processo di codifica. Utilizzando la stessa chiave, opererà il processo di decodifica e recupererà il testo di pianura. Ecco come tipicamente utilizzeremo un processo di codifica della chiave simmetrica. (Riferimento Slide Time: 18.57) Ora quali sono le proprietà di cui abbiamo bisogno da qualsiasi schema di crittografia sicuro o uno schema di crittografia simmetrico sicuro. All'incirca abbiamo bisogno di 2 proprietà. La prima proprietà è la proprietà di correttezza, che dice che, per qualsiasi chiave k che l'algoritmo di generazione chiavi ha prodotto e per qualsiasi testo di pianura m che sia stato crittografato da Enc, la seguente condizione dovrebbe tenere. Se cripto un testo semplice m sotto la chiave k per ottenere un testo cifrato c e se decripto quel testo di cifratura c usando il processo di decodifica sotto la stessa chiave k, dovrei riprendere l'originale m. Questa è la proprietà di correttezza. Per darvi l'analogico se avete una serratura fisica, e se ho 2 copie della chiave, ciò che questa correttezza della domanda di proprietà è che se in realtà bloccherò quella chiave usando la chiave e inviando quel blocco nella condizione di blocco a voi. Poi, se hai anche la stessa chiave e se provi ad aprire quella serratura nella posizione di blocco usando la chiave anche tua, dovresti essere in grado di aprire la serratura dalla condizione di blocco alla condizione aperta. Questo è pressappoco l'analogia che si può immaginare da questo requisito di correttezza. La seconda proprietà importante di cui abbiamo bisogno o che ci aspettiamo da un processo di crittografia simmetrica sicura è quella della privacy. E ora vedremo che quali sono le sfide che affrontiamo quando cerchiamo di formalizzare il requisito della privacy. Intuitivamente, quando diciamo che un processo di crittografia a chiave simmetrica è sicuro, oppure raggiunge una proprietà privacy, insomma, che vedendo il cifrato c l'avversario o il cattivo che ha osservato il cifrato c non dovrebbe essere in grado di calcolare nulla del messaggio m. Questo significa immaginare che ci sia un terzo partito che è il cattivo che ha intercettato il testo cifrato che conosce i dettagli del processo di generazione chiave, il processo di codifica e il processo di decodifica. L'unica cosa che il cattivo non conosce è il valore della chiave con cui il mittente ha operato il processo di codifica. La privacy property esige informalmente, che anche dopo questa conoscenza di cifratura, non dovrebbe dare alcuna informazione sul messaggio m. (Riferirsi Slide Time: 21.11) Tuttavia, si scopre che se vogliamo formalizzare la definizione della privacy, ci sono diverse sfide che affrontiamo. Quindi quello che farò il prossimo è proporrò una serie di definizioni per formalizzare la condizione privacy. E poi vedremo una potenziale loophole in ognuna di queste potenziali definizioni, che vi mostrerà come sia difficile che si arrivi con una giusta definizione di privacy.La mia prima definizione candidata a formalizzare la definizione della privacy è la seguente. Dirò che un processo di crittografia è sicuro se il testo cifrato non rivela la chiave sottostante. L'intuizione dietro questa definizione è che il se la chiave viene rivelata all'avversario, allora può scoprire qualsiasi messaggio successivo che sia stato crittografato sotto quella chiave. Il requisito minimo che esigo da qualsiasi schema di crittografia privata è che il testo cifrato non debba rivelare la chiave sottostante. Beh si scopre che il requisito è sicuramente significativo da qualsiasi processo di crittografia sicuro. Ma questa definizione è completamente inutile. Per esempio, consideriamo un algoritmo di crittografia, che sfocia sempre un testo di cifratura, che è uguale al testo della pianura, questo significa che il testo di cifratura non dipende affatto dalla chiave. E il valore del testo di cifratura è lo stesso del testo di pianura. Se si vede questa definizione, e questo processo di codifica dei candidati, sicuramente il processo di codifica non sta rivelando nulla sulla chiave. Come per questa definizione, è possibile etichettare questo algoritmo di codifica come un algoritmo di crittografia sicuro. Ma questo tipo di algoritmo di crittografia è completamente inutile da usare in pratica perché sta rivelando completamente il tuo testo di pianura. Quindi ora vi rettifichiamo questa definizione. E lasciatemi arrivare con la seconda definizione candidata per formalizzare la definizione della privacy. La mia definizione 2 è: dirò che un processo di crittografia è sicuro se il testo cifrato non rivela nulla sul sottostante querelante, perché questo è quello che è l'intuizione di base della privacy. Il problema con questo tipo di definizione è cosa si intende per cifratura non rivela il sottostante querelante? Quanto dovrebbe rivelare, quanto non dovrebbe rivelare? Ad esempio, si potrebbe avere un processo di codifica, dove il 99% del testo di pianura non viene rivelato dal testo cifrato. Ma purtroppo il testo cifrato potrebbe rivelare il 1% del testo pianeggiante e che il 1% del testo di pianura che viene trapelato dal testo cifrato potrebbe essere l'informazione critica che si vuole nascondere. Anche in questo caso, questa definizione e questo processo di codifica dei candidati potrebbe sembrare rispondo alla definizione 2 ma in realtà tale tipo di algoritmo di crittografia non posso usare in pratica. Il problema di questa definizione è che non sto esattamente specificando cosa significhi rivelarlo e non rivelare e quanto rivelare e quanto non rivelare. (Riferimento Slide Time: 24 :05) Quindi per fissare questa definizione, lasciatemi proporre la terza definizione potenziale per formalizzare la definizione della privacy. La definizione 3 dice che un processo di crittografia sarà considerato sicuro se il testo cifrato non rivela alcun carattere del sottostante in chiaro. Così questo si occuperà del potenziale bug che c'era nella nostra definizione 2 o lo schema di codifica dei candidati che abbiamo proposto di violare la definizione 2. Perché ora, anche se il 1% viene rivelato, non soddisfa la definizione 3. Ma ancora, c'è una potenziale scappa in questa definizione. Considerare un algoritmo di crittografia dove cifrare non rivela effettivamente nessuno dei caratteri sottostanti del testo di pianura. Ma un testo di cifratura potrebbe rivelare la gamma del testo di pianura e cioè potrebbe rivelare se il testo di pianura è inferiore a una determinata soglia o se è maggiore di una determinata soglia. Anche in questo caso, se vista la definizione, questo schema di codifica dei candidati soddisfa effettivamente la proprietà perché non viene rivelato alcun carattere del sottostante in chiaro. Ma quello che si sta rivelando è se il querelante sia meno di un certo valore o superiore ad un certo valore. E che potrebbe essere una breccia di sicurezza. Quindi non posso permettermi di usare tale tipo di algoritmo di crittografia per criptare i dati sensibili. Perché se il testo cifrato rivelerà la gamma dei dati sensibili, potrei finire nei guai. Cerchiamo quindi di risolvere questo potenziale problema nella definizione 4 e la definizione 4 dice che un processo di crittografia sarà considerato sicuro se il testo cifrato non rivela alcuna informazione significativa sulla sottostante querelle. Il che significa che dovrebbe nascondere non solo il testo di pianura sottostante, dovrebbe anche nascondere se il messaggio è inferiore ad un certo valore superiore a un certo valore e così via. Beh, intuitivamente questa definizione è buona. Ma il problema qui è quello che esattamente costituisce un'informazione significativa varia da applicazione a applicazione. Per una certa applicazione, i caratteri sottostanti del testo di pianura potrebbero essere le informazioni sensibili, per un'altra applicazione se il messaggio è inferiore ad un certo valore o superiore ad un certo valore che potrebbe essere l'informazione significativa, e così via. Non è possibile elencare in modo esaustivo ciò che costituisce un'informazione significativa per una particolare applicazione. Questo è un lato negativo di questa definizione. Quindi, questo è di conseguenza, non posso assumerlo come una definizione significativa della privacy. (Riferimento Slide Time: 26:25) Quindi per risolvere quel problema, andiamo avanti con la prossima possibile definizione della privacy. E questa definizione dice che un processo di crittografia sarà chiamato come sicuro se il testo cifrato non aiuta l'aggressore a compattare qualsiasi funzione del sottostante querelante. Questo significa immaginare un aggressore che ha visto il cifrato che conosce il processo di crittografia. E l'aggressore è interessato a compattare qualche funzione, diciamo F del messaggio sottostante che il mittente ha effettivamente crittografato nel testo cifrato. Diremo che il processo di crittografia è sicuro, se si utilizza la conoscenza del testo di cifratura, l'avversario non è in grado di calcolare la funzione del messaggio sottostante. Ecco, questo è proprio quello che ci aspettiamo da un cifrario sicuro. Ma ancora ci sono certe scappatoie in questa definizione. Ovvero, ci sono 2 scappatoie. La prima loophole è che come si formalizzano se un particolare testo di cifratura ha aiutato l'avversario a venire a una funzione del testo di pianura sottostante o meno. Come giudicarlo, come si formalizza matematicamente che? Ecco la prima scappata in questa definizione. E la seconda loophole in questa definizione è ciò che esattamente sono le capacità dell'avversario che state valutando, che non è specificato in questa definizione. Ciò significa che si sta considerando un avversario eavesdropper che sta semplicemente osservando il testo cifrato e cercando di calcolare una funzione, o se si sta considerando un avversario o un avversario malintenzionato, che potrebbe modificare il contenuto del cifratto e vedere il comportamento dell'o dell'altra risposta del destinatario e poi cercare di calcolare le funzioni dei messaggi sottostanti. Inoltre, questa definizione non specifica è l'avversario fornito anche con qualsiasi tipo di informazione aggiuntiva che significa, quali sono le varie funzionalità dell'avversario che state considerando.   E se qualcosa si è dimostrato sicuro, anche dopo che sono esistenti per gli ultimi 30 - 40 anni. Poi abbiamo una forte fiducia che effettivamente quegli algoritmi pubblicati sono più sicuri rispetto a un algoritmo su cui non si conoscono dettagli. Il riassunto qui è estremamente pericoloso per utilizzare qualsiasi tipo di processo di crittografia proprietario. Quindi se qualcuno dice che, “ ehi, non lascio la descrizione del mio processo di crittografia, ma vi do la garanzia che vi dà una buona quantità di sicurezza ”. Non dovreste credere a un simile processo di crittografia, perché non si sa che tipo di scappatoie potrebbero essere presenti in un simile algoritmo. Quindi si consiglia sempre di andare o utilizzare algoritmi che hanno a disposizione in pubblico dominio ed è stato scrutato pubblicamente. Così che ci porta fine a questa lezione. Per riepilogare abbiamo discusso i vari tipi di primitivi crittografici che utilizziamo in crittografia. Abbiamo anche discusso la sintassi del processo di crittografia simmetrica. Ci siamo concentrati sull'importanza degli algoritmi di chiave di generazione e di crittografia da randomizzare, perché questo arriva come implicazione del principio di Kerckhoffs, che dice che la segretezza di tutto il sistema dovrebbe affidarsi al fatto che solo la chiave è nascosta non gli algoritmi. Si discutono anche i vari tipi di modelli di attacco, ovvero il modello di attacco COA, il modello di attacco KPA, il modello di attacco CPA, modello e attacco CCA. Spero che ti sia piaciuta la lezione! Grazie.