Vediamo come utilizzare la misura crittografica per ottenere segretezza tra due agenti che vogliano comunicare.
Segretezza del messaggio
-
Crittografia simmetrica
-
Prerequisito: chiave
$k_{ab}$ sia condivisa tra$A$ e$B$ soli, cioè: $$ A \rightarrow B : m_{k_{ab}} $$
-
Prerequisito: chiave
-
Crittografia asimmetrica
-
Prerequisito 1:
$B$ abbia una chiave privata valida (sicura, non scaduta) -
Prerequisito 2:
$A$ possa verificare che$k_b$ è di$B$ ( ovvero$A$ conosce il proprietario della chiave pubblica, ha un associazione valida tra il messaggio e la chiave pubblica di$B$ , e non ipoteticamente di un terzo agente$C$ ) $$ A \rightarrow B : m_{k_b} $$
-
Queste ultime due assunzioni, insieme, garantiscono segretezza. Se una di queste due viene a mancare la priorità di segretezza non viene garantita. Serve ovviamente certificazione per garantire il prerequisito 2 della crittografia asimmetrica.
In questo caso
Vediamo come utilizzare la misura crittografica per ottenere autenticazione tra due agenti che vogliano comunicare. A differenza della segretezza, qui c'è bisogno di un'evidenza del con chi si stia parlando.
Autenticazione di
-
Crittografia simmetrica
-
Prerequisito 1: chiave
$k_{ab}$ sia condivisa fra$A$ e$B$ soli -
Prerequisito 2:
$B$ possa verificare prerequisito 1 $$ A \rightarrow B :\ "Sono\ io"{k{ab}} $$
-
-
Crittografia asimmetrica
-
Prerequisito 1:
$A$ abbia una chiave privata valida -
Prerequisito 2:
$B$ possa verificare che$k_a$ è di$A$ .$A$ cifrerà dunque con la sua chiave privata il messaggio che spedisce a$B$ : $$ A \rightarrow B : "Sono \ io"_{k_a^{-1}} $$
-
Notiamo ancora una volta come segretezza e autenticazione siano due aspetti differenti.
Nel caso di crittografia simmetrica i prerequisiti che portano all'autenticazione implicano anche segretezza del messaggio (in quanto esso è cifrato e solo il diretto interessato può decifrarlo).
Discorso differente si ha per la crittografia asimmetrica. Nel punto 2 infatti il messaggio di
Non è il contenuto del messaggio a fornire autenticazione (nell'esempio infatti si utilizza una stringa in chiaro) ma la misura crittografica apposta su di esso. Autentichiamo la controparte perché, viste le assunzioni, sappiamo per certo che solo il legittimo agente mittente possa aver cifrato (con la propria chiave pubblica) il messaggio che stiamo tentando di decifrare.
Per ottenere entrambe le proprietà di segretezza ed autenticazione dobbiamo sommare le assunzioni delle due.
Come detto prima, nel caso della crittografia simmetrica la somma dei prerequisiti è già presente nell'autenticazione, differente è il caso della crittografia asimmetrica.
-
Crittografia simmetrica
-
Prerequisito 1: chiave
$k_{ab}$ sia condivisa fra$A$ e$B$ soli -
Prerequisito 2:
$B$ possa verificare prerequisito 1 $$ A \rightarrow B : m_{k_{ab}} $$
-
-
Crittografia asimmetrica
-
Prerequisito 1:
$B$ abbia una chiave privata valida -
Prerequisito 2:
$A$ possa verificare che$k_b$ è di$B$ -
Prerequisito 3:
$A$ abbia una chiave privata valida -
Prerequisito 4:
$B$ possa verificare che$k_a$ è di$A$ $$ A \rightarrow B : {{m_{k_a^{-1}}} } _ {k_b} \ oppure \ A \rightarrow B : {m_{k_b} } _ {k_a^{-1}} $$
-
Qualunque messaggio nella rete può essere alterato. Anche utilizzando l'hash la proprietà di integrità non è garantita perché l'attaccante potrebbe ricalcolare l'hash per il messaggio manomesso e spedirlo, facendolo passare per vero. Aggiungiamo quindi all'hash, come irrobustimento della misura di integrità, un segreto (condiviso o asimmetrico).
-
Caso asimmetrico:
$A \rightarrow B : m, h(m)_{k_a^{-1}}$ (DS, Digital signature) -
Caso simmetrico:
$A \rightarrow B : m, h(m, k_{sessione})$ Utilizziamo in questo caso il sistema simmetrico, ottenendo chiavi di sessione da utilizzare per costruire l'hash (MAC, Message autentication code)
L'unica differenza tra queste due misure, in termini di "bontà" della misura, è la scalabilità. Nel primo caso chiunque può verificare la firma, nel secondo solo il ricevente, visto che c'è bisogno della chiave di sessione per farlo.
Alle misure di integrità, in principio, non importa cifrare il contenuto del messaggio, ma renderlo inalterabile. Ancora una volta vediamo come una proprietà non implica le altre (in questo caso non implica segretezza).
Nel caso della firma digitale il protocollo si compone di due step:
- Generare la firma
- Verificare la firma
Come nel mondo reale la firma digitale serve a certificare a terzi l'integrità. Garantisce anche l'autenticazione ed eredita come limiti quelli della cifratura asimmetrica (da cui deriva).
Analizziamo gli step:
-
$A$ , partendo da un testo in chiaro, effettua:-
L'hashing, trasformando il testo in chiaro in digest, ovvero: $$ cleartext \rightarrow digest $$
-
L'encryption, utilizzando la propria chiave privata, ovvero: $$ digest \rightarrow encrypted \ digest $$
Il testo in chiaro e l'artefatto prodotto al punto 2 costituisco insieme la firma digitale. $$ [ cleartext, encrypted \ digest ] $$
-
-
Ricevuto il messaggio,
$B$ esegue la verifica della firma:- applica la funzione hash alla prima componente, il
$cleartext$ - decodifica la seconda componente, l'
$encrypted \ digest$ - confronta i due risultati
- ottiene garanzia di integrità se e solo se essi combaciano, cioè se:
- applica la funzione hash alla prima componente, il
📝 Domanda d'esame: dov'è che la firma digitale nasconde l'encryption? Risposta: nell'hash.
Sommiamo ancora una volta i prerequisiti di autenticazione, segretezza e integrità.
- Segretezza del messaggio
$m$ per$A$ e$B$ - Autenticazione di
$A$ con$B$ - Integrità di
$m$ nella transazione da$A$ a$B$
Omettiamo per semplicità il caso della crittografia simmetrica ed analizziamo quello asimmetrico.
-
Prerequisito 1:
$B$ abbia una chiave privata valida -
Prerequisito 2:
$A$ possa verificare che$k_b$ è di$B$ -
Prerequisito 3:
$A$ abbia una chiave privata valida -
Prerequisito 4:
$B$ possa verificare che$k_a$ è di$A$
Otteniamo quindi un messaggio cifrato con la chiave pubblica di
Nota bene:
- Ci sono in questa descrizione anche le assunzioni sull'hash.
- Nessuna delle 3 misure viste fino ad ora offre una garanzia di freshness (sono quindi soggetti a replay attack).
Un certificato, in generale, non può prescindere da:
- un identificativo
- un ruolo (qualità o proprietà) associato all'identificativo
- un marker dell'ente certificatore
📝 Domanda d'esame: cosa significa autenticare un messaggio? Risposta: riconoscere che questo abbia un preciso autore.
Il certificato deve essere integro e autentico per essere valido, dobbiamo quindi garantire la proprietà di autenticazione ed integrità. Garantiamo queste proprietà con la firma digitale. Indichiamo quindi il certificato "firmato" come: $$ { A, K_a }{K{CA}^{-1}} $$ Il certificato è pubblico ma non per questo non è robusto, infatti se la firma dietro al certificato perde di validità anche il certificato viene invalidato. Il certificato descrive un'identità. Esprime l'identità che possiede la chiave privata associata alla chiave pubblica.
Citiamo ora alcuni protocolli più evoluti.
- Basati su crittografia simmetrica:
- Diffie-Hellmann (DH)
- RSA Key Exchange
- Basati su crittografia asimmetrica:
- Public-Key Infrastructure (PKI)
Indichiamo ora gli step del protocollo Diffie-Hellmann per lo scambio di chiavi in un sistema crittografico che voglia essere simmetrico.
-
$A$ e$B$ concordano due parametri pubblici$\alpha$ e$\beta$ coprimi tra loro -
$A$ genera$X_a$ random (costruisce un segreto), quindi: $$ Y_a = \alpha^{X_a}\ mod \ \beta $$ -
$B$ genera$X_b$ random (costruisce un segreto), quindi: $$ Y_b = \alpha^{X_b}\ mod \ \beta $$ -
$A$ e$B$ eseguono il protocollo di scambio: $$- \ A \rightarrow B : Y_a \
- \ B \rightarrow A : Y_b $$
-
Alla ricezione di 1,
$B$ calcola: $$ {Y_a}^{X_b} \ mod \ \beta $$ -
Alla ricezione di 2,
$A$ calcola: $$ {Y_b}^{X_a} \ mod \ \beta $$
Il problema del logaritmo discreto, introdotto dalla presenza del modulo, rende il risalire ad
Notare bene che questo protocollo non prevede misure di autenticazione. Dati i parametri