Definizione del problema
L'obiettivo della crittografia è approssimare un processo mediante il quale
crypt(x)
non trasmette informazioni su x ma esiste una funzione decrypt
tale che
decrypt(crypt(x)) == x
Se decrypt e crypt sono stati eseguiti solo nella stessa esecuzione dello stesso programma, è possibile implementarlo perfettamente utilizzando lo stato nascosto:
var map = {}; // A hidden hashmap.
function crypt(x) {
var k = unique_unforgeable_value();
map[k] = x;
return k;
}
function decrypt(k) { return map[k]; }
In pratica però, crypt
e decrypt
sono chiamati da programmi diversi o diverse esecuzioni dello stesso programma, quindi dobbiamo approssimarci crypt
usando una funzione deterministica il cui output è indistinguibile da bit casuali - deve essere incomprimibile (nel senso di Shannon) quindi non ci sono bit di struttura extra che possono essere usati per raccogliere informazioni su x.
Gli algoritmi sono altamente strutturati e quindi comprimibili. Quindi ciò di cui abbiamo bisogno è un modo per ottenere un'apparente casualità mantenendo il determinismo necessario per .decrypt∘crypt=identity
Risposta
Curry un semplice algoritmo comprimibile con un segreto incomprimibile
crypt = crypt_algo(secret)
decrypt = decrypt_algo(secret)
possiamo approssimare l'obiettivo sopra. crypt
e decrypt
hanno un alto contenuto informativo a causa dell'elevato contenuto informativo di secret anche se crypt_algo
e decrypt_algo
hanno un basso contenuto informativo.
secret
deve essere tenuto lontano dagli attaccanti perché funzioni perché altrimenti un attaccante potrebbe semplicemente fare il curry sopra. L'algoritmo non deve essere tenuto segreto poiché fornisce solo una piccola parte del contenuto informativo della funzione curry.
Avvertimento
"La sicurezza crittografica deve basarsi su una chiave segreta anziché su un algoritmo segreto."
Non sono d'accordo con la parte anziché .
Potresti ottenere qualche misura di difesa in profondità mantenendo entrambi segreti, ma i test crypt_algo
sono difficili, quindi storicamente, gli algoritmi segreti sviluppati internamente dai dilettanti sono andati peggio quando sottoposti ad attacchi rispetto a quelli che sono stati attentamente esaminati da un gran numero di crittografi professionisti. Questo è il motivo per cui la sicurezza per oscurità ha ottenuto un nome meritatamente cattivo. L '"oscurità" si riferisce ai tentativi di mantenere segreto l'algoritmo in sostituzione della protezione adeguata delle chiavi.