Per rilevare manomissioni, devi prima definire manomettere. Stai ricevendo un messaggio; cosa renderebbe un messaggio "manomesso" e non il messaggio "genuino"?
La solita definizione di manomissione / genuino utilizza la fonte di messaggi : in un punto nello spazio-tempo, il messaggio è stato assemblato o verificato da un'entità S , che dichiara è corretto. Questa è la definizione del messaggio originale: la sequenza di bit corrispondente a quell'operazione (o ispezione) da S . In un altro punto dello spazio-tempo (più avanti, e forse altrove), il verificatore V vuole assicurarsi che il messaggio sia ancora genuino, cioè la stessa sequenza di bit che S saw.
La conoscenza è potere: tutti possono acquistare gli stessi computer, quindi se la sorgente S può fare qualcosa che un attaccante A non può fare, allora questo deve essere perché S conosce alcuni dati specifici (i crittografi chiamano una "chiave") che A non conosce. Altrimenti, se A conosce tutto ciò che S conosce, allora A può creare messaggi che sono indistinguibili dai messaggi autentici.
Se quel valore segreto (chiamiamolo K ) è noto a entrambi S e V , quindi a MAC può essere utilizzato. Una tale configurazione funziona solo fin tanto che V non è un attaccante. Se K è noto solo per S , allora deve essere ancora verificabile da una verifica affidabile da V e entriamo nel regno della crittografia asimmetrica, con firme digitali .
In entrambi i casi, abbiamo bisogno di aiuto dal contesto. I segreti condivisi non si materializzano dal nulla; nemmeno i certificati. Possiamo avere approssimativamente le seguenti situazioni e soluzioni:
-
S e V si sono già incontrati, oppure c'è un canale sicuro per entrambi da un generatore fidato di bit casuali che solo S e V possono raggiungere. Basta usare un MAC.
-
S e V condividono un segreto, ma è di bassa entropia (ad esempio, una password che un essere umano può ricordare). Protocollo di scambio di chiavi autenticato da password (ad es. SRP ) può essere usato da S e V per espandere quel segreto condiviso in una migliore K condivisa che resiste attacchi di dizionario. Ciò implica che S e V possono, una volta, parlare tra loro ed eseguire il protocollo PAKE (questo non ha bisogno di una linea sicura, ma può essere Internet, ma deve ancora accadere a un certo punto). Una volta che hanno un K condiviso, usano un MAC.
-
S genera una coppia di chiavi pubblica / privata e V ha un modo per assicurarsi che ciò che vede come "chiave pubblica di S "non è stato manomesso. Ciò consente a V di verificare qualsiasi firma calcolata da S . Questo non risolve il tuo problema, ma lo sposta: il rilevamento della manomissione sul "messaggio" è stato spostato al rilevamento della manomissione sulla chiave pubblica. Tuttavia, questo può essere d'aiuto, perché la coppia di chiavi pubblica / privata potrebbe essere stata generata e verificata in anticipo, molto prima che il messaggio venisse creato per la prima volta; e tale coppia di chiavi può essere utilizzata per proteggere diversi (molti) messaggi.
-
V conosce la chiave pubblica di un terzo di fiducia T , che usa la sua chiave privata per firmare la chiave pubblica di S . Questa è un'estensione del caso precedente, ed è fondamentalmente ciò che è PKI .
Il punto importante in tutto questo è che nessuna crittografia o altro sistema creerà fiducia. La crittografia sposta solo la fiducia in giro. Devi ancora iniziare da qualche parte, e che "da qualche parte" è la definizione di ciò che costituisce un "vero messaggio".