it-swarm.com.de

Implementierung von Diceware: Muss ich einen Würfelwurf simulieren?

Ich erstelle ein kleines Dienstprogramm zum Generieren von Passwörtern basierend auf der Diceware-Methode. Im Moment bin ich dem Algorithmus der echten Diceware sehr nahe - d. H. Ich simuliere das Würfeln n-times, Um ein einzelnes Wort aus der Liste zu erhalten.

Ich frage mich allerdings, ob dies wirklich notwendig ist. Wäre es nicht ausreichend, nur eine Zufallszahl zwischen 0 Und length(diceware_list) -1 zu erhalten, um ein einzelnes Wort zu erhalten?

Würde ein derart vereinfachter Ansatz die Sicherheit des generierten Passworts beeinträchtigen? (Ich verwende eine kryptografisch sichere Quelle für Zufallszahlen, daher ist dies kein Problem.).

Ich denke, dass die vereinfachte Methode in Ordnung sein sollte , aber ich bin mir nicht sicher. Könnte jemand bitte dabei helfen?

14
MaciekTalaska

Der Grund, warum Diceware die Verwendung von Würfeln zur Auswahl eines Passworts befürwortet, besteht darin, dass sichergestellt wird, dass das Passwort, das der Benutzer erhält, generiert wird zufällig. Nein, solange Sie sicher sind, dass Ihr Programm das Kennwort auf unvorhersehbare Weise (kryptografisch sichere Zufallsauswahl mit gleichmäßiger Verteilung) auswählt, spielt es keine Rolle, wie das Kennwort tatsächlich generiert wird.

Es gibt andere Gründe für die Verwendung von Würfeln, die in keinem Programm repliziert werden können:

  1. Es ist für den Benutzer völlig transparent. Sie müssen keinem Computerprogramm vertrauen, um einen geeigneten kryptografisch zufälligen Zahlengenerator zu verwenden oder ihr Passwort nicht an böswillige Akteure weiterzugeben.
  2. 100% Malware-sicher. Wenn Sie beim Würfeln keine Webcam auf Ihren Tisch gerichtet haben, kann ein Schadprogramm auf Ihrem PC das von Ihnen generierte Passwort physisch nicht beobachten oder beeinflussen.

Sofern Ihre Benutzer nicht besonders paranoid sind, besteht eine gute Chance, dass sie auf diese Vorteile verzichten können, um die sofortige Erstellung eines neuen Kennworts zu vereinfachen.

29
Ajedi32

Ja, das ist vollkommen in Ordnung. Mit einem guten PRNG hat jedes Element genau die gleichen Chancen, ausgewählt zu werden, wenn Sie die Begrenzung (1 bis n) korrekt ausführen. (Ich habe persönlich eine Diceware-Implementierung durchgeführt, die genau das tut .)

Es gibt zwei einfache Gründe, warum bei einem physischen Diceware-Prozess mehrere Würfel verwendet werden:

  1. 6-seitige Würfel sind allgegenwärtig und billig.
  2. Ein 7776-seitiger Würfel (6 ^ 5) existiert meines Wissens nicht. Es wäre auch umständlich zu rollen, wenn es groß genug zum Lesen ist, oder schwierig zu lesen, wenn es klein genug ist, um auf traditionelle Weise zu rollen.

Bitte beachten Sie, dass ich sagte "wenn Sie die Einschränkung (1 bis n) richtig machen." Wenn Ihre Zufallszahlengenerierungsbibliothek kein Grundelement für 1 bis n bietet, nehmen Sie nicht einfach einen größeren Wert und modulo n! Dies gibt zwar Antworten im richtigen Bereich, sie werden jedoch nicht gleichmäßig verteilt. Sie sollten entweder:

  1. Wiederholen Sie den Vorgang, bis ein Wert im akzeptablen Bereich zurückgegeben wird (d. H. Alle Werte> n verwerfen).
  2. Linear skalieren: Rand_val * n / Rand_max (was eine willkürliche Genauigkeit erfordert, um Rundungsfehler zu vermeiden)
15
David

Die Antwort von Ajedi32 ist großartig. Ich wollte ein Detail hervorheben, das Ihnen helfen kann, Ihre Frage besser zu beantworten. Der Schlüssel zur sicheren Kennwortgenerierung besteht darin, sicherzustellen, dass Ihr Kennwort nvorhersehbar ist. Nicht "zufällig". Die Idee des Zufalls kommt später. Das Ziel ist unvorhersehbar. Wenn Sie darüber nachdenken, ist das sicherste existierende Passwort kein zufälliges, sondern das letzte Passwort, das der Angreifer erraten würde. Es ist das, was sie nicht vorhersagen konnten.

In der Praxis findet hier ein Katz- und Mausspiel statt. Wenn Sie versuchen, das unvorhersehbarste Kennwort zu finden, versuchen sie vorherzusagen, wie Sie Kennwörter generieren. Aus diesem Grund erscheinen Passwörter wie qazxswedc zufällig, aber sobald sie herausgefunden haben, was Sie getan haben, um das Passwort zu generieren, werden sie es leicht brechen.

Hier kommt endlich die Zufälligkeit ins Spiel. Für die moderne Kryptographie bemühen wir uns, Zahlen zu verwenden, die nicht nur für den Angreifer unvorhersehbar sind, sondern auch für irgendjemanden, einschließlich sich selbst, unvorhersehbar! Zufallszahlen sind Zahlen, die buchstäblich in keiner Weise vorhergesagt werden können. Sie können nur wissen, welche Nummern ausgewählt wurden, wenn Sie beim Generieren der Nummern zugesehen haben. Zufälligkeit bedeutet, dass Sie mathematische Aussagen darüber treffen können, wie schwierig es ist, ein Passwort vorherzusagen, da nicht einmal Sie selbst die Kontrolle über die Generation hatten.

Würfel sind seit Tausenden von Jahren eine "Standard" -Quelle für Zufallszahlen. Es gibt viele andere (I Ging Wahrsagerei zum Beispiel verwendete traditionell ein Bündel Schafgarbenstöcke), aber die Würfel haben lange Zeit bestanden. Wenn sie richtig geworfen werden (kein Hubschrauber!), Sind sie ausreichend gute Zufallszahlenquellen, da das Abprallen des Würfels sehr chaotisch und unvorhersehbar ist. Sie benötigen Telekenese, um die Ergebnisse zu beeinflussen (denken Sie an Star Wars: The Phantom Menace).

Wenn Sie sich Sorgen über geladene Würfel machen, wie in den Kommentaren erwähnt, können Sie statistische Analysen durchführen, um festzustellen, auf wie viele Entropiebits pro Wurf Sie sich tatsächlich verlassen können. Die Passwortgenerierung reagiert weniger empfindlich auf geladene Würfel als Casinos (Sie können jederzeit zusätzliche Würfe machen, wodurch sich die Anzahl der Möglichkeiten vervielfacht. Da Casinos Bargeld ausgeben, müssen sie sich nicht in jeder Runde multiplizieren, sondern müssen sie hinzufügen. Dies macht sie mehr empfindlich).

Jetzt können wir Ihrer Frage näher kommen, weil wir verstehen, was Sie erreichen wollen. Das Simulieren der Würfel funktioniert tatsächlich nicht so gut, wie Sie vielleicht denken, da die Simulation jedes Mal das Gleiche tut, es sei denn, Sie haben eine Zufallsquelle in die Sim eingebaut, die den Punkt besiegt.

Die Frage ist: Welcher zufälligen Quelle können Sie vertrauen? Hier müssen Sie Ihr Bedrohungsmodell verstehen. Was kann Ihr Angreifer tun? Kann Ihr Angreifer Ihre Tastenanschläge lesen? In diesem Fall sind Sie in Schwierigkeiten, weil Sie das Kennwort eingeben müssen. In der Praxis können wir also davon ausgehen, dass der Angreifer nicht genügend Kontrolle über Ihren Computer hat, um die Tastenanschläge lesen zu können.

Von dort aus können Sie weiterarbeiten. Ich vermute, dass Ihr Bedrohungsmodell davon ausgeht, dass Ihr Computer makellos ist. In diesem Fall können Sie sich auf bewährte Entropiequellen wie /dev/random Verlassen. In diesem Fall ist die beste Antwort, aus dieser Quelle zu schöpfen und sie direkt zu verwenden (keine Würfelsimulation erforderlich).

Wenn Sie sich mehr mit Sicherheit befassen, können Sie sich andere Aspekte ansehen. Einige Algorithmen haben Probleme mit Seitenkanalangriffen, bei denen ein Angreifer unter bestimmten Umständen in seinen Status blicken kann, sodass Sie Ihren Algorithmus möglicherweise gegen diese abhärten können. Sie können entscheiden, dass Sie den normalen Entropiequellen auf einem Computer nicht vertrauen (z. B. Zeit zwischen Tastenanschlägen und Netzwerkaktivität), und daher in eine zufällige Hardwarequelle investieren (die häufig auf Rauschen in einem Widerstandsnetzwerk basiert).

Aber egal, wohin Sie damit gehen, denken Sie daran, dass der Schlüssel unvorhersehbar sein muss und die Standardmethode, um sicherzustellen, dass Ihr Gegner Sie nicht vorhersagen kann, darin besteht, so zufällig zu sein, dass Sie sich selbst nicht vorhersagen können.

3
Cort Ammon

Ein Zufallszahlengenerator wird als "Pseudozufallsgenerator" betrachtet. Er ist nicht wirklich zufällig, da er mathematisch berechnet wird. Würfel werden als wirklich zufällig angesehen, obwohl man wohl argumentieren könnte, dass die Physik nicht anders ist ...

Indem Sie das Würfeln programmgesteuert simulieren, entfernen Sie die wahre Zufälligkeit, die für Diceware erforderlich ist. Ihre Verwechslung zwischen simulierten Würfeln und der Auswahl eines zufälligen Wortes ist also pseudozufällig.

1
rtaft