Vai al contenuto
Home » Notes » Appunti Sistemi Operativi: Capitolo Crittografia

Appunti Sistemi Operativi: Capitolo Crittografia

copertina appunti sistemi operativi capitolo protezione e crittografia

Appunti universitari di sistemi operativi , capitolo sulla crittografia e algoritmi di cifratura.
Fonti: il mio libro di Sistemi Operativi Operating Systems Concepts with Java di Silberschatz, Galvin e Gagne.

Appunti Sistemi Operativi: Capitolo Crittografia

Che cosa si intende per crittografia a chiave pubblica e come funziona (brevemente)?

Nella crittografia a chiave pubblica l’idea è quella di avere due chiavi per ogni utente, una pubblica conosciuta a tutti e una privata conosciuta solo all’utente. In uno scambio di messaggi tra due persone A e B, il messaggio che A vuole inviare sarà cifrato con la sua chiave privata (è questo il caso delle firme digitali) oppure con la chiave pubblica di B e sarà di conseguenza decifrato da B con la chiave pubblica di A oppure con la sua chiave privata.

Cosa vuol dire crittografia a chiave simmetrica (o chiave privata)?

Nella crittografia a chiave simmetrica (anche detta privata), invece, sender e receiver devono concordare su una chiave di decifratura, scambiarsela e poi poter procedere allo scambio di messaggi.

Quali sono i principali vantaggi e svantaggi della crittografia a chiave pubblica?

I vantaggi ddella crittografia a chiave pubblica sono la gestione delle firme digitali e una più semplice distribuzione delle chiavi rispetto a quella simmetrica, oltre che alla notevole difficoltà per un attaccante di poter risalire alla chiave privata di un utente. Gli svantaggi della crittografia a chiave pubblica sono i calcoli in aritmetica modulare che possono essere molto complessi e sicuramente più costosi a livello computazionale dei calcoli necessari per la crittografia a chiave privata.

Quali sono i principali vantaggi e svantaggi della crittografia a chiave privata?

Lo svantaggio principale della crittografia a chiave privata sta nella difficoltà di scambiarsi la chiave in modo sicuro affinché rimanga segreta. Questo tipo di crittografia ha il vantaggio di essere più efficiente dal punto di vista computazionale, perché richiede di effettuare di operazioni semplici come permutazioni e moltiplicazioni XOR.

In uno scambio di comunicazioni che richiede firma digitale, quale dei due schemi è preferibile e perché?

In uno scambio di comunicazioni che richiede firma digitale, è preferibile usare lo schema di crittografia a chiave pubblica, perché si vuole mantenere l’autenticità del mittente e l’integrità del messaggio, cioè garantire che un certo documento sia stato effettivamente firmato da quell’utente e che solo questo utente poteva realizzarlo.

Come funziona l’algoritmo RSA? Descrivere i passi che portano alla determinazione della chiave pubblica e privata nell’algoritmo di RSA

L’algoritmo RSA (Rivest, Shamir, Adleman) fa largo uso delle operazioni aritmetiche in modulo n. I passi che portano alla determinazione delle chiavi pubbliche e private sono, in sintesi:

Passo 1: Parto con due numeri primi p e q
Passo 2: Ottengo n=p*q
Passo 3: Scelgo un numero e tale che non abbia fattori comuni con la funzione toziente F(n) = (p-1)*(q-1)
Passo 4: Esiste ed individuo un inverso moltiplicativo d [tale che e*d mod F(n) = 1]
Passo 5: Determino chiave pubblica come coppia (n,e) e chiave privata come coppia (n,d)

Nella cifratura a chiave simmetrica, perché una permutazione sull’alfabeto non è considerata una buona chiave? Come si può ovviare a questi svantaggi negli schemi moderni di crittografia a chiave simmetrica?

Una permutazione sull’alfabeto non è più considerata una buona chiave perché metodi statistici consentono di risalire facilmente alla chiave utilizzata, se i messaggi sono abbastanza lunghi. Una soluzione possibile è quella di usare una cifratura polialfabetica, cioè avere diverse chiavi che vengono applicate al messaggio oppure, ancora meglio, dividere il messaggio in blocchi da cifrare singolarmente secondo una tabella di cifratura e usare la moltiplicazione XOR con blocchi random per rendere più difficile ad un potenziale attaccante la decodifica del messaggio.

Quale tra crittografia a chiave simmetrica e a chiave pubblica è più sicura? E più efficiente?

La crittografia più sicura, tra quella a chiave simmetrica e quella a chiave pubblica, dipende dalla lunghezza dei messaggi da criptare.

È più efficiente dal punto di vista computazionale la crittografia a chiave simmetrica, perché può prevedere molti passi di esecuzione ma relativamente semplici (permutazioni (scramble) e moltiplicazioni XOR) mentre la crittografia a chiave pubblica può prevedere complicate operazioni di calcolo in aritmetica modulare, oltre che eventuali moltiplicazioni XOR.

Descrivere una soluzione al problema delle firme digitali (inviare i messaggi firmati, in modo da essere certi sul sender del messaggio) usando la crittografia

In uno scambio di comunicazioni che richiede firma digitale, se un utente A vuole inviare un messaggio firmato digitalmente a B, deve applicare una particolare funzione hash all’intero messaggio e cifrare il risultato con la sua chiave privata e invierà a B sia il messaggio originale che la sua fingerprint criptata. A questo punto, B andrà ad applicare la funzione hash al messaggio in chiaro che ha ricevuto e andrà a decifrare con la chiave pubblica di A la fingerprint criptata che ha ricevuto. Se il risultato dell’applicazione della funzione di hash è uguale alla fingerprint decriptata, B avrà la certezza che il messaggio è stato effettivamente mandato da A e che non è stata violata la sua integrità.

La particolare funzione di hash sopra nominata deve essere scelta in modo che per un eventuale attaccante deve essere impossibile trovare un messaggio m’ diverso da quello inviato da A tale che il risultato della funzione hash applicata al messaggio inviato da A sia uguale al risultato della funzione hash applicata a m’.

La relazione tra chiave pubblica e il suo possessore è certificata dalle Certification Authorities, che hanno il compito di verificare che un’entità sia effettivamente chi dichiari di essere e rilasciare il certificato che autentica la corrispondenza fra chiave pubblica e quest’entità se la verifica ha avuto esito positivo.

In protocolli di sicurezza, Cosa significa confidentiality, message integrity e end-point authentication?

Confidentiality: solo il mittente e il destinatario devono essere in grado di capire il contenuto del messaggio.

Message Integrity: nessun terzo (man in the middle) deve poter essere in grado di modificare il messaggio originale.

End point authentication: mittente e destinatario vogliono essere sicuri di confermarsi rispettivamente l’identità

Cosa significa adottare una codifica “a blocchi”?

Adottare una codifica a blocchi significa suddividere il messaggio plain text in blocchi dello stesso numero di bit e codificare blocco per blocco usando una tabella di codifica (traduzione) prestabilita

Come si evita che blocchi uguali diano codifiche identiche?

Introducendo il concetto di operatore XOR si può risolvere il problema della codifica di blocchi uguali moltiplicando XOR ogni blocco da codificare per un Random. Esempio:

Voglio codificare 010 010 010

Stabilisco dei random block r1 = 111, r2 = 001, r3 = 100

010#111 = 101

010#001 = 011

010#100= 110

E codificando poi 101 011 110 secondo la tabella prestabilita

Nella “cifratura a blocchi”, con blocchi di 64 bit, è fattibile usare come chiave una qualunque permutazione di questi bit, rappresentata da una tabella che specifica come viene tradotta ogni sequenza di bit?

Avremo una tabella di 264 bit entry, che è un numero altissimo. Il problema è che questa tabella sarebbe di fatto la chiave di cifratura, usata sia per codificare che per decodificare, quindi sender e receiver devono possedere entrambi una copia di questa tabella, devono potersela scambiare e devono poterla aggiornare/manipolare. E su una tabella di dimensione 264 è molto difficoltoso e lento fare queste operazioni di manipolazione e scambio

La soluzione, implementata dallo standard AES, consiste nel prendere un blocco da 64 bit e dividerlo in blocchi di più piccola dimensione.

Altri Capitoli di appunti su sistemi operativi a questo link.

Grazie per la lettura

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *