Schlüsselgeheimnis vs Algorithmusgeheimnis


8

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.


Antworten:


4

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 decryptsolche 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 cryptund decryptwerden von verschiedenen Programmen oder verschiedenen Läufen desselben Programms aufgerufen. Daher müssen wir crypteine 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.

decryptcrypt=ichdentichty

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. cryptund decrypthaben einen hohen Informationsgehalt aufgrund des hohen Informationsgehalts des Geheimnisses, obwohl crypt_algound decrypt_algohaben einen niedrigen Informationsgehalt.

secretmuss 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_algoWenn 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.


Ich denke, dies ist die richtige Antwort, Algorithmus hat Struktur und Schlüssel nicht, und das ist der Schlüssel =)
Hernan_eche

5

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.


Ich denke, das verdient einen Kommentar. Ich habe Ihre Antwort gelesen und verstehe, dass Ihr Punkt irgendwann richtig ist, aber ich habe die Antwort von @Mike Samuel ausgewählt, die erstaunlicherweise genau das Gegenteil sagt!. Es ist so, dass der Algorithmus weniger komplex als der Schlüssel ist, weil der Algorithmus eine Struktur hat (und braucht), aber der Schlüssel (muss keine Struktur haben). Genau. Stattdessen haben Sie gesagt: "Der Schlüssel ist andererseits ein einfaches Konzept: Es ist eine Reihe von Bits, die zufällig sein müssen". Tatsächlich ist ein einfaches 'Konzept' keine einfachen 'Daten'. Die Komplexität von 'zufälligen' Daten ist die maximal mögliche Komplexität!
Hernan_eche

@Hernan_eche Der Schlüssel weist eine hohe Kolmogorov-Komplexität in Bezug auf andere Bitfolgen gleicher Länge auf. Aber konzeptionell ist es nur eine zufällige Folge von Bits, und als Konzept ist das viel einfacher zu verstehen als jeder gute Krypto-Algorithmus.
David Richerby

2

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.