Frage:
Sind Menschen ein starkes oder schwaches RNG?
Naftuli Kay
2015-01-16 01:05:41 UTC
view on stackexchange narkive permalink

Thomas Pornin hat in der Vergangenheit mehrfach erklärt (ich werde sie nicht beschaffen, er kann mit mir streiten, wenn er will), dass Menschen schlecht sind RNGs.

Obwohl ich der Meinung bin, dass menschliches RNG für die Passwortgenerierung im Kopf normalerweise miserabel ist, wollte ich fragen, ob menschlich unterstütztes RNG durch einen Computer genauso schlecht ist. KeePass hat eine Funktion, mit der Sie das RNG durch Bewegen der Maus für eine Weile festlegen können. Obwohl KeePass / dev / urandom verwendet, ist es mehr oder weniger sicher genug, aber ich habe in der Vergangenheit das RNG mit der Maus verwendet.

Ich habe immer gedacht, dass RNG mit Hilfe menschlicher Eingaben besser ist als nur Standard-PRNG, wie es von einem Betriebssystem bereitgestellt wird. Wie könnte jemand genau vorhersagen, wie ich meine Maus bewegen würde, mit welcher Geschwindigkeit, wie oft ich pausiere usw.?

Das Betriebssystem berücksichtigt nicht nur Mausbewegungen, sondern auch Prozess-IDs, Thread-IDs und Hardware-Zählungen von der CPU. CryptGenRandom verwendet auch Leistungsstatiken auf niedriger Ebene, um sein PRNG zu setzen. Menschen neigen dazu, sich zu wiederholen und ihre Muster zu mögen. Ich würde jeden Tag den Statistiken der Maschine über einen Menschen vertrauen.
Menschen sind ein starker Zufallsgenerator, aber nur in Youtube-Kommentaren.
YouTube-Kommentare sind ein _HRNG_, ein schrecklicher Zufallszahlengenerator.
Ehrlich gesagt scheint es trivial zu sein, Youtube-Kommentare mit einem einfachen Markov-Modell zu replizieren. Sie sind kaum zufällig; Es gibt sehr starke Muster mit niedriger Entropie - deshalb denken die Leute, dass sie langweilig sind.
Auch in Bezug auf den letzten Satz Ihres Beitrags: Sie können eine Reihe von Personen bitten, ihre Maus zu bewegen, während sie die Daten aufzeichnen, und sie dann statistisch analysieren. Sie werden nicht * genau * vorhersagen können, wie Sie Ihre Maus bewegen werden, aber sie werden * viele * Möglichkeiten finden, wie Sie * nicht * werden (zum Beispiel schneller als menschlich möglich). Dies würde effektiv bedeuten, dass die wahre Entropie viel geringer ist als erwartet.
Ich erinnere mich an [dies] (http://assets.amuniversal.com/321a39e06d6401301d80001dd8b71c47) Dilbert Comic ...
Beachten Sie, dass Quellen mit niedriger Entropie als TRNG * in Ordnung sind, vorausgesetzt, Sie kennen eine Untergrenze für Entropie * und kondensieren ordnungsgemäß. YouTube ist möglicherweise eine völlig vernünftige Zufallsquelle, wenn Sie beispielsweise 0,5 Bit pro Kommentar schätzen. Und Sie haben Daten nie wiederverwendet. Und wenn niemand außer Ihnen die Kommentare beobachten oder beeinflussen könnte. Dieser letzte Punkt beseitigt den Anreiz und die Fähigkeit der Leute, Beiträge zu veröffentlichen. Das Problem mit YouTube-Kommentaren in der Praxis ist nicht der Grad der Zufälligkeit, sondern die Tatsache, dass Ihr Angreifer die von Ihnen verwendeten Kommentare anzeigen und veröffentlichen kann.
Sieben antworten:
Thomas Pornin
2015-01-16 03:06:47 UTC
view on stackexchange narkive permalink

Menschliche Gehirne sind schlechte RNG. Menschen sind schlecht darin, zufällige Werte in der Privatsphäre ihres Kopfes zu generieren. Sie können einfach nicht zufällig denken. obwohl sie sich davon überzeugen können.

Physikalische Prozesse sind andererseits ziemlich gute Entropiequellen. Nehmen Sie Ihre Mausbewegungen. Einige Dutzend Mal pro Sekunde misst die Maus, wie weit sie sich seit dem letzten Häkchen bewegt hat, und sendet diese Informationen an den Server. Wenn Ihre Hand zittert, geschieht dies in der Regel etwas regelmäßig, aber die Biologie ist so, dass jede Elementarbewegung einem gewissen Jitter ausgesetzt ist, der wesentlich größer ist als die Präzision der Maus. Selbst mit viel Training ist es für eine menschliche Hand sehr schwierig, genau dieselbe Bewegung wiederholt auszuführen (andernfalls würde es viel mehr Menschen wie Yehudi Menuhin geben). Die Quintessenz ist also, dass Mausbewegungsmaße eine gewisse Entropie enthalten. (Denken Sie daran, dass "Entropie" hier definiert ist als "das, was der Angreifer nicht weiß"; die Maus weiß sicherlich, wie viel sie sich bewegt hat, da diese Maus tatsächlich die Werte sendet, auf denen die RNG aufgebaut sind.)

Die andere Hälfte der Antwort ist Aggregation . Ein mausbasiertes RNG verwendet Hunderte oder sogar Tausende von Maßnahmen, akkumuliert sie alle und kondensiert sie zu einem geeigneten Samen, der die gesamte Entropie konzentriert. Dies ist einfach genug: Geben Sie einfach alle Werte einer kryptografischen Hash-Funktion zu, z. SHA-256, und Sie erhalten einen 256-Bit-Startwert mit der gesamten Quellentropie, wo immer er sich in den gemessenen Mausbewegungen versteckt hat. Hash-Funktionen sind dafür gut; Sie reduzieren die Größe, behalten aber die Entropie bei (bis zur Ausgabegröße der Hash-Funktion, aber 256 Bit sind für alle Zwecke mehr als ausreichend).

Ein Angreifer kann vermuten, dass der Benutzer Kreise macht, aber es wird schwierig sein, alle einzelnen Bewegungen richtig zu machen, zumal ihm die Psychologie nicht hilft: Der menschliche Benutzer selbst hat keine Ahnung, wie seine Handbewegungen werden Zahlen. Da es sich um Hunderte von Zahlen handelt, steigt die Anzahl möglicher Kombinationen (d. H. "Entropie") exponentiell an. Vergleichen Sie dies mit einem menschlichen Benutzer, der über ein neues Passwort nachdenkt: Der Benutzer wählt Buchstaben aus, die einem inneren "witzigen" Gedankengang folgen, den der Angreifer mehr oder weniger brutal erraten kann (z. B. wenn die Buchstaben alle Anfangsbuchstaben einiger Wörter in sind Bei einem Satz aus einem Buch kann der Angreifer automatisch alle Sätze aus allen Büchern versuchen, die er in elektronischem Format finden kann. und, was noch wichtiger ist, der menschliche Benutzer wird nicht die Mühe haben, mehr als ein Dutzend oder so "scheinbar zufällige" Zeichen zu produzieren.

In Passwörtern macht Länge keine Stärke - aber mangelnde Länge kann sehr effektiv bei der Verhinderung von Stärke sein.

Mit Ausnahme der besten Mäuse werden jedoch wahrscheinlich kleinere Bewegungen übersehen - die Haftreibung zwischen der Maus und der Oberfläche, auf der sie sich befindet, dämpft die Bewegung. Wenn dies jedoch durch absichtliche Bewegungen überwunden wird, ist der Jitter nützlich. Ich würde erwarten, dass KeePass die tatsächliche Bewegung überprüft und eine Funktion verwendet, die nicht von der Bruttobewegung abhängt (z. B. Hashing jeder Position - oder vielmehr jeder Bewegung). .
Nur als umgangssprachliches Beispiel bemerkte ich schon früh im College, dass mein Gehirn immer zu den Zahlen 3 und 7 tendierte, wenn ich versuchte, an eine Zufallszahl zu denken. 1, 5 und 10 wurden fast nie ausgewählt. Als ich mir dessen * bewusst * wurde, wurden die Nummern 3 und 7 fast nie gewählt. Wir sind nur Primaten, die Muster finden.
Gibt es Studien, die dies tatsächlich belegen, oder basiert dies auf Ihren eigenen Erfahrungen? Ich selbst könnte eine ziemlich zufällige Kombination bilden, wenn ich möchte ..
Ja, es gibt Studien, die dies belegen.Und während Sie möglicherweise in der Lage sind, eine Kombination zu erstellen, die nicht brutal erzwungen werden kann, können Sie keine zufällige Kombination erstellen.Füttere es an dieharder, und es würde dich anschreien, dass es signifikante Vorurteile entdeckt hat.Siehe: http://people.ischool.berkeley.edu/~nick/aaronson-oracle/index.html.In 60-80% der Fälle wird richtig geraten.Es gibt ein ähnliches JS-basiertes Programm, das die nächste Binärdatei vorhersagt, die Sie in etwa 90% der Fälle "zufällig" auswählen werden.Und es ist ein sehr, sehr einfacher Algorithmus.Stellen Sie sich vor, wie viel effizienter ein anspruchsvoller wäre.
Devon Holcombe
2015-01-16 02:00:38 UTC
view on stackexchange narkive permalink

Menschen sind sehr schlechte Zufallsgeneratoren, insbesondere auf Anfrage.

Die meisten Benutzer werden eines der wenigen Dinge tun, da menschliches Verhalten ziemlich vorhersehbar ist. Am Beispiel der Maus bewegen Benutzer sie wahrscheinlich hin und her oder auf und ab, bis je nach Programm genügend "Zufälligkeit" erzeugt wird. Vielleicht bewegen sie es im Kreis. Es ist unwahrscheinlich, dass sie die Maus wirklich zufällig bewegen. Wenn sich jemand darum kümmert, kann er eine Gruppe von Benutzern analysieren, wahrscheinliche Verhaltensweisen extrapolieren und nützliche Informationen aus diesen Studien extrahieren, um Muster zu ermitteln, mit denen ein solches System angegriffen werden kann.

Es ist wirklich schwierig, wirklich zufällige Daten zu erhalten.

Aus dem Secure Programming Cookbook für C und C ++: Leider folgen die meisten Mausbewegungen einfachen Trajektorien mit sehr geringer Entropie. Die größte Entropie tritt auf, wenn der Zeiger die allgemeine Umgebung seines Ziels erreicht und langsamer wird, um ein Ziel zu erfassen. Es gibt auch oft ein gutes Stück Entropie beim Start. Die Zwischenbewegung ist normalerweise ziemlich vorhersehbar. Wenn lokale Angriffe nicht in Ihrem Bedrohungsmodell enthalten sind und der Angreifer nur ungefähr erraten kann, zu welchen Teilen Ihres Bildschirms die Maus in einem bestimmten Zeitrahmen gegangen ist, basierend auf der Beobachtung des Programmverhaltens, ist möglicherweise eine gewisse Entropie in jeder Maus vorhanden Ereignis, da der Angreifer nicht in der Lage ist, das Pixel zu erraten, auf dem sich der Cursor zu einem bestimmten Zeitpunkt befindet.

"Es ist wirklich schwer, wirklich zufällige Daten zu erhalten" - Nicht mit einem Geigerzähler, und ja, es gibt Möglichkeiten, wie Sie dies zu Hause mit einem Arduino tun können. Linux PRNG ist "gut genug".
Auch dies spricht meine Bedenken immer noch nicht an. Wenn wir wissen, dass Benutzer A Kreise mag, können wir trotzdem vorhersagen, mit welcher Geschwindigkeit er Kreise zeichnet? Wir sind uns nicht sicher, wie lange es dauern wird, und ist die "Unschärfe" der Daten nicht gut genug?
Was Thomas Pornin gesagt hat, ist wahr. Ich würde dort einen Kommentar abgeben, habe aber nicht genug Wiederholungen, daher muss ich einen Kommentar zu meiner eigenen Antwort hinterlassen. Im speziellen Fall der Maus ist dies wahrscheinlich für die meisten Zwecke gut genug. Im Allgemeinen müssen Sie jedoch auf Ihre Entropiequelle achten, wenn Sie Menschen einbeziehen.
"Wenn es jemanden interessiert" - warum interessiert es Ihrer Meinung nach niemanden, diese Methode zur Entropieerzeugung zu brechen? Natürlich tun sie das. Entweder haben Sie das Forschungspapier nicht gefunden, oder Ihre Antwort ist falsch.
Was ist mit random.org? Ich glaube auch nicht, dass der von Ihnen vorgeschlagene Angriff machbar oder realistisch ist.
Wenn ich mir also nur einen zufälligen Strom von Zahlen ausdenke, ist es wahrscheinlich schlecht? z.B. 7 5 1 1 6 2 8 7 5 9 4 7 8 8 4 3 2 7 8 0 0 5 6 5 5 4 3 5 2 ...
@Michael Wenn Sie an 10000 Zufallszahlen denken, gibt es wahrscheinlich ein Muster oder eine Verzerrung, sodass die Entropie kleiner als log2 ist (10).
@Michael: direkt vor meinem Kopf, Sie benötigen nur 20 Proben, um alle 10 Ziffern einzuschließen. Ich denke, die Wahrscheinlichkeit dafür liegt unter 25%. Natürlich ist dies kein endgültiger Beweis dafür, dass Ihre Sequenz weniger als die maximale Entropie aufweist: 0,25 ist kein guter p-Wert, und ich habe einen Test ausgewählt. Aber Menschen machen normalerweise bestimmte Fehler, wenn sie versuchen, eine zufällige Sequenz zu erfinden, und eine davon ist, unter den Optionen zu "fair" zu sein.
Meine Antwort wurde aktualisiert und enthält nun ein Zitat aus einer zuverlässigeren Quelle, das hoffentlich dazu beiträgt, die Wunschwaschheit meiner Antwort zu erklären. Entropie ist eine komplexe Sache.
Bertl
2015-01-16 07:22:27 UTC
view on stackexchange narkive permalink

Versuchen Sie mit dem folgenden kleinen Python-Skript, eine Folge von 42 Nullen oder Einsen zu erzeugen, indem Sie die Maus in einem 'wiederholbaren' Muster bewegen.

  import Tkinterroot = Tkinter.Tk () lx , ly = (0, 0) während True: x, y = root.winfo_pointerxy () if ((x-lx) ** 2+ (y-ly) ** 2) > 42: print (x ^ y ^ lx ^ ly) & 1 lx, ly = (x, y)  

Wenn Sie Python 3.x haben, können Sie stattdessen auch Folgendes verwenden:

  importiere tkintertkinter.NoDefaultRoot () root = tkinter.Tk () x = y = 0, während True: x2, y2 = root.winfo_pointerxy () if (x - x2) ** 2 + (y - y2) ** 2 > 42 : print ((x ^ y ^ x2 ^ y2) & 1) x, y = x2, y2  
Superbest
2015-01-16 06:45:07 UTC
view on stackexchange narkive permalink

Die Qualität eines RNG ist eine Frage der Korrelation mit den Eingaben oder einem anderen Satz nicht geheimer Parameter. Wenn die Ausgabe eines RNG mit etwas korreliert, das Sie kennen, wird die Entropie drastisch reduziert, indem Sie große Teile des möglichen Ausgaberaums abschneiden können. Vielleicht kann jetzt realistisch erwartet werden, dass ein bestimmtes RNG nur eine von 1.000 Zahlen als ausgibt im Gegensatz zu den beworbenen 1.000.000, was Brute-Force viel praktischer macht.

Das RNG, das konstruiert wird, indem ein Mensch gebeten wird, an zufällige Wörter oder Phrasen zu denken, ist in der Tat schlecht. Der Grund sind viele starke Korrelate:

  • Korrelation zur Kultur, sodass Sie ein englisches Wörterbuch für nordamerikanische Ziele verwenden oder sich auf 1900-2000 für PINs konzentrieren können (auch, warum Passwörter in anderen Sprachen anständig sind Strategie "Sicherheit durch Dunkelheit")
  • Korrelation mit anderen, sodass Sie Wörterbücher mit den häufigsten Top-X-Passwörtern erstellen können.
  • Korrelation mit dem historischen Verhalten Ihres Selbst, sodass Sie frühere bekannte Passwörter ausnutzen können oder suchen Sie in sozialen Medien nach Hinweisen wie Geburtsdatum oder Heimatstadt.

Beachten Sie, dass viele "sichere" PRNGs auch auf einer sehr vorhersehbaren Eingabe basieren, nämlich der Systemzeit.

Der Schlüssel ist zu erkennen, dass der Mensch nicht unbedingt das einzige Element des RNG ist. Es wirkt nur als Samen. Es gibt keinen Grund, warum Sie den Startwert nur so ausgeben dürfen, wie er ist, sodass Sie verschiedene Funktionen anwenden können, um die Korrelation zu verwässern (ein einfaches, aber schwaches Beispiel ist das Hinzufügen einer sehr großen Zahl, multiplizieren mit einer sehr großen Zahl und Nehmen Sie dann das Modulo).

Die Mausbewegungen werden nur als Startwert für Keepass 'RNG verwendet. Wenn die von ihnen verwendete Funktion in der Lage ist, unkorrelierte Eingaben zurückzugeben, besteht kein Grund zu der Annahme, dass sie nicht sicher sind. (Zugegeben, ich konnte Ihnen nicht sagen, warum genau sie nicht einfach die Maus überspringen und die Systemzeit als Ausgangsbasis verwenden oder welche Funktion sie genau verwenden und wie sicher das ist)

Spekulationen darüber, warum Maus anstelle von Systemzeit verwendet wird: Wenn Sie viele Zufallszahlen benötigen, müssen Sie eine bestimmte Zeit warten, da die typische Systemzeit eine Auflösung von Nanosekunden oder Millisekunden hat. Eine Maus erzeugt wahrscheinlich in einer vergleichbaren Zeitspanne viel mehr Zahlen, und sie werden wahrscheinlich lauter und nicht nacheinander sein.
"Verwenden Sie die Systemzeit als Keim", das wäre nicht sehr weise! PRNG erzeugen deterministische Sequenzen! Bei gleichem Startwert ist die Ausgabe immer gleich! Wenn Sie nur die Systemzeit verwenden, ist das sehr leicht zu erraten! Die Android-Dokumentation (https://developer.android.com/reference/java/security/SecureRandom.html) für SecureRandom schlägt beispielsweise vor: Die Verwendung des Seed-Konstruktors oder der Aufruf von setSeed (Byte []) kann [...] a zurückgeben vorhersehbare Folge von Zahlen, die für die sichere Verwendung nicht geeignet sind. [...] wird nicht empfohlen, setSeed überhaupt zu verwenden.
catsquid
2015-01-16 02:24:10 UTC
view on stackexchange narkive permalink

Ich denke, Menschen sind in Ordnung, aber es hängt davon ab, wie Sie sie bitten, die Zahl zu generieren. Müssen sie es auch replizieren können? Für kleinere Zahlen sind Menschen leicht zu beeinflussen und hoch vorhersehbar. Es gibt auch das Problem, dass Menschen oft mit ähnlichen Mustern beginnen, bevor sie tatsächlich etwas erzeugen, das der Zufälligkeit ähnelt. Nehmen Sie das folgende Beispiel

952167493 ... am Anfang begann ich mit einer vertrauten Zahl: Vielleicht eine Telefonnummer, die im Kopf der Person liegt, oder eine Straßennummer, dann könnten Menschen versuchen, zufällig zu sein, und die Wahrscheinlichkeit, dass zwei Nummern einer regulären Zählreihenfolge folgen, ist gering. Danach könnten sie herumhüpfen und versuchen, das Zahlenspektrum auszufüllen.

Bei genügend Stichproben würden viele Menschen ähnlichen Mustern folgen, und Sie würden große Zahlen erhalten, die überhaupt nicht sehr zufällig sind. Möglicherweise finden Sie sogar eine ganze Reihe von Zahlen, die nicht angezeigt werden, nur weil sie sich für einen Menschen beim Erstellen nicht zufällig anfühlen, wie 123123123123123 oder 44455523534333666

Ich würde a nicht vertrauen Mensch, um eine Zufallszahl zu erstellen, es sei denn, er hätte einige Anweisungen, die die Wahrscheinlichkeit menschlicher Vorurteile in Bezug auf Zahlen / Muster verringern würden, selbst dann ist es eine schlechte Idee

"Ich denke, Menschen sind in Ordnung", nein, sie sind hässlich.
Wenn ich eine Katze wäre, würde ich anders über Menschen denken.
alexmann1234
2015-01-16 15:42:19 UTC
view on stackexchange narkive permalink

Hier gibt es bereits einige sehr gute Antworten, daher möchte ich nur einige anekdotische Beweise liefern. Es scheint bereits klar zu sein, dass Menschen in bewegungsbasierten RNGs aufgrund der ungenauen Reproduktion von Bewegungen eine starke Entropiequelle darstellen können.

Wenn Menschen aufgefordert werden, eine Zufallszahl auszuwählen, zeigen sich jedoch starke Trends . Ich erinnere mich an einen Mathekurs im achten Jahr, in dem wir 100 "Zufallszahlen" generiert haben, indem wir Menschen gefragt haben, denen wir begegnet sind, und die Ergebnisse zeigten, wie vorhersehbar Menschen sein können. Ich kann mich nicht an die genauen Ergebnisse erinnern, aber die Zahl 7 kam zum Beispiel dreimal häufiger als die nächstbeliebteste Antwort. Niemand gab eine Antwort mit mehr als zwei Ziffern und alle Antworten waren ganze Zahlen. Ich bin sicher, wenn dies in größerem Maßstab durchgeführt würde, würde ein ähnlicher Trend erzeugt werden.

Josef says Reinstate Monica
2015-01-16 16:26:35 UTC
view on stackexchange narkive permalink

Ich bin der Meinung, dass Menschen auf Anfrage nur sehr schlecht Zufälligkeiten erzeugen können. Es gibt Möglichkeiten, Zufälligkeiten aus menschlichen Interaktionen zu "extrahieren". Die Mausbewegung ist ein gutes Beispiel. Die Zufälligkeit ergibt sich nicht aus den Absichten des Benutzers (die meisten Leute zeichnen Linien oder Kreise), sondern aus dem Fehler in der Bewegung. Menschen können mit einer Maus einfach keine genau wiederholbaren Figuren zeichnen.

Auf der Suche nach Antworten habe ich zwei 'interessante' Artikel gefunden:

  • Menschen können bewusst Zufallszahlenfolgen erzeugen: ein möglicher Test für künstliche Intelligenz. [ 1]
  • Menschen können nicht bewusst Zufallszahlenfolgen erzeugen: Polemikstudie [ 2]

Leider sind beide nur im Handel erhältlich und wenn Sie kein Student oder Forscher an einer Universität sind, müssten Sie bezahlen. (Tun Sie es nicht für diese Artikel!) Ich denke, die Titel sind lustig genug.

Ich habe auch ernstere und interessantere Artikel gefunden, die Sie lesen können:

  • Spiele zum Extrahieren von Zufälligkeit [ 3]
  • Bewertung von Zufälligkeit und Komplexität in menschlichen Bewegungsbahnen durch Analyse symbolischer Sequenzen [ 4] (nicht vollständig zum Thema, aber sehr interessant)
  • Diese Antwort im Cognitive Sciences Stack Exchange listet einige

auf. All dies legt nahe (außer dem ersten Artikel, aber ich nimm das nicht sehr ernst), dass Menschen schlecht sind, wenn sie gebeten werden, bewusst Zufälligkeit zu erzeugen, aber wenn du es richtig machst, kannst du gute Zufälligkeit aus menschlichen Bewegungen extrahieren!



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...