Es ist eine bekannte Aussage, dass
"Die kryptografische Sicherheit muss auf einem geheimen Schlüssel anstelle eines geheimen Algorithmus beruhen ."
Ich möchte nach einigen Details fragen. Und was sind ihre Unterschiede?
Ich sehe die offensichtliche Sache, dass für ein Mehrbenutzersystem das Generieren eines Schlüssels überwältigend einfacher ist als das Generieren eines eindeutigen Algorithmus für jedes Benutzerpaar (und selbst für ein einzelnes Benutzerpaar könnte man argumentieren, dass das Aktualisieren des Schlüssels einfacher ist).
Aber ist es das einzige Argument?
Ich meine, wenn wir definieren
AlgorithmA = AlgorithmX + key A
AlgorithmB = AlgorithmX + key B
Dann unterscheidet sich eine Änderung des Schlüssels nicht von einer Änderung des Algorithmus.
Der einzige Unterschied, den ich sehe, ist der für ein neues Benutzer- / Schlüsselpaar
Der größte Teil der Algorithmusstruktur bleibt im Fall eines geheimen Schlüssels konstant.
Der größte Teil der Algorithmusstruktur muss sich im Fall eines geheimen Algorithmus ändern
Aber wo ist die Grenze? "die meisten" Bedeutung?
Ich hätte gerne mehr Ansichten und Hinweise, um zu verstehen, warum diese Unterscheidung normalerweise erwähnt wird.
quelle
Antworten:
Problem Definition
Das Ziel der Kryptographie ist es, einen Prozess zu approximieren, bei dem
vermittelt keine Informationen über x, aber es gibt eine
decrypt
solche Funktion , dassWenn 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:
In der Praxis jedoch
crypt
unddecrypt
werden von verschiedenen Programmen oder verschiedenen Läufen desselben Programms aufgerufen. Daher müssen wircrypt
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.Antworten
Durch Currying eines einfachen komprimierbaren Algorithmus mit einem inkompressiblen Geheimnis
Wir können das obige Ziel annähern.
crypt
unddecrypt
haben einen hohen Informationsgehalt aufgrund des hohen Informationsgehalts des Geheimnisses, obwohlcrypt_algo
unddecrypt_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
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.quelle
Die Unterscheidung, die Sie zwischen dem Schlüssel und dem eigentlichen Algorithmus treffen möchten, basiert nicht darauf, ob der größte Teil der Operation in der einen oder der anderen enthalten ist, sondern darauf, wo die Komplexität liegt. Ich spreche hier nicht von algorithmischer Komplexität, sondern von Komplexität in ihrer alltäglichen Bedeutung: Schwierigkeit zu verstehen und darüber nachzudenken.
Der eigentliche Algorithmus ist komplex und schwer zu überlegen. Im Allgemeinen werden eine ganze Reihe von willkürlich erscheinenden Bitmanipulationen, logischen und arithmetischen Operationen sowie das allgemeine Mischen der Daten ausgeführt. Für einen Laien oder sogar für einen Kryptographen ist es sehr schwer zu wissen, wie viel Privatsphäre all diese Manipulationen Ihnen tatsächlich einbringen und für welche Art von Kryptoanalyse sie möglicherweise anfällig sind. Der beste Weg, um von der Sicherheit des Algorithmus überzeugt zu sein, besteht darin, ihn offen zu legen und ihn so umfassend wie möglich von Experten überprüfen zu lassen. MACHEN SIE ES ÖFFENTLICH.
Der Schlüssel hingegen ist ein einfaches Konzept: Es handelt sich um eine Reihe von Bits, die zufällig sein müssen. Es ist nicht erforderlich, den Schlüssel zu überprüfen, um die Richtigkeit der Krypto sicherzustellen. Jeder Schlüssel soll so stark sein wie jeder andere Schlüssel (und wenn dies nicht zutrifft, kann er im Prinzip durch Überprüfung des Algorithmus und nicht des Schlüssels entdeckt werden). Wir wissen, dass die Qualität der Zufälligkeit, die zum Generieren von Schlüsseln zur Verfügung steht, nicht perfekt ist. In der Praxis können einige Schlüssel aufgrund mangelnder Zufälligkeit schwach sein, aber zumindest kann jeder wissen, ohne ein erfahrener Kryptograf sein zu müssen und ohne sie erstellen zu müssen Eine schwierige Analyse des Schlüssels, dass eine gute Zufälligkeit zu einem guten Schlüssel führen wird. Verwenden Sie also die beste Zufälligkeit, die Sie zur Verfügung haben, dann müssen Sie den Schlüssel nicht (MUSS nicht!) Mit allen teilen, um Vertrauen in Ihre Krypto zu haben.
quelle
Die gleiche Frage habe ich vor einigen Jahren einem der bekanntesten Experten für Kryptographie gestellt.
Der interessantere Punkt hier ist, dass Sie sich vorstellen können, dass der Schlüssel den Code des Algorithmus enthält und dass der Algorithmus eine einfache Universal Turing Machine (UTM) ist. Denken Sie daran, dass wir einen festen Algorithmus für die kryptografische Aufgabe haben möchten, der sich nicht von einem Lauf des Algorithmus zu einem anderen ändert. Wenn Sie den Schlüssel als Teil des Algorithmus betrachten, muss der Algorithmus jedes Mal auf geändert werden Stellen Sie sicher, dass es sicher ist. Mit einem festen Algorithmus und einem zufällig ausgewählten Schlüssel haben wir dieses Problem nicht.
Der ursprüngliche Unterschied wird deutlicher, wenn Sie an die vormoderne Kryptographie denken. Wenn der Gegner wüsste, dass der Algorithmus alles verloren hat, wäre dies nutzlos. Die Beibehaltung des Algorithmus war unerlässlich. Wenn in einem bestimmten Fall der Algorithmus bekannt wäre, würde alles für alle zukünftigen Verwendungen verloren gehen. In der modernen Kryptographie ist der Schlüssel nicht Teil des Algorithmus , er wird zufällig ausgewählt , wodurch der kryptografische Algorithmus (und sogar die zuvor verwendeten Schlüssel) die Sicherheit seiner zukünftigen Verwendung nicht gefährden, da der Schlüssel in Zukunft nur noch ein anderer sein wird zufällig ausgewählte Zeichenfolge und das würde die Sicherheit gewährleisten. Die zuvor verwendeten Schlüssel helfen nicht, den neuen Lauf zu unterbrechen.
Was passiert also, wenn wir UTM plus einen zufälligen Schlüssel betrachten? Wenn der Schlüssel keine schöne Struktur hat, können Sie nicht beweisen, dass der Algorithmus sicher ist, z. B. funktioniert ein zufällig aus der gleichmäßigen Verteilung ausgewählter Schlüssel nicht. Der Schlüssel müsste "im Wesentlichen" ein fester Algorithmus plus eine zufällige Zeichenfolge sein. In diesem Fall unterscheidet er sich nicht wirklich vom Verschieben des Teils des Schlüssels mit festem Algorithmus in UTM, sondern ändert sich nicht von einem Lauf zum anderen.
quelle