Problem Definition
Das Ziel der Kryptographie ist es, einen Prozess zu approximieren, bei dem
crypt(x)
vermittelt keine Informationen über x, aber es gibt eine decrypt
solche Funktion , dass
decrypt(crypt(x)) == x
Wenn Entschlüsseln und Verschlüsseln nur in derselben Ausführung desselben Programms ausgeführt würden, könnten Sie dies perfekt mithilfe des verborgenen Status implementieren:
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 der Praxis jedoch crypt
und decrypt
werden von verschiedenen Programmen oder verschiedenen Läufen desselben Programms aufgerufen. Daher müssen wir crypt
eine deterministische Funktion verwenden, deren Ausgabe nicht von zufälligen Bits zu unterscheiden ist. Sie muss also inkompressibel sein (im Sinne der Shannon-Codierung) sind keine zusätzlichen Strukturbits, mit denen Informationen über x gesammelt werden können.
de c r yp t ∘ c r yp t = i de n t i t y
Antworten
Durch Currying eines einfachen komprimierbaren Algorithmus mit einem inkompressiblen Geheimnis
crypt = crypt_algo(secret)
decrypt = decrypt_algo(secret)
Wir können das obige Ziel annähern. crypt
und decrypt
haben einen hohen Informationsgehalt aufgrund des hohen Informationsgehalts des Geheimnisses, obwohl crypt_algo
und decrypt_algo
haben einen niedrigen Informationsgehalt.
secret
muss von Angreifern ferngehalten werden, damit dies funktioniert, da ein Angreifer sonst einfach das oben genannte Currying ausführen könnte. Der Algorithmus muss nicht geheim gehalten werden, da er nur einen kleinen Teil des Informationsgehalts der Curry-Funktion liefert.
Vorbehalt
"Die kryptografische Sicherheit muss auf einem geheimen Schlüssel anstelle eines geheimen Algorithmus beruhen."
Ich bin nicht einverstanden mit dem statt Teil.
crypt_algo
Wenn Sie beide geheim halten, erhalten Sie möglicherweise ein gewisses Maß an Tiefenverteidigung, aber das Testen ist schwierig. In der Vergangenheit haben sich geheime Algorithmen, die von Amateuren selbst entwickelt wurden, bei Angriffen schlechter geschlagen als diejenigen, die von einer großen Anzahl von Personen sorgfältig geprüft wurden professionelle Kryptographen. Aus diesem Grund hat Sicherheit durch Dunkelheit einen zu Recht schlechten Ruf erhalten. Die "Dunkelheit" dort bezieht sich auf Versuche, den Algorithmus als Ersatz für den ordnungsgemäßen Schutz von Schlüsseln geheim zu halten.