Kryptografisch sicherer Pseudozufallszahlengenerator

Ein sichern Sie kryptografisch pseudozufälligen Zahlengenerator (CSPRNG) ist ein pseudozufälliger Zahlengenerator (PRNG) mit Eigenschaften, die ihn passend für den Gebrauch in der Geheimschrift machen.

Viele Aspekte der Geheimschrift verlangen Zufallszahlen zum Beispiel:

  • Schlüsselgeneration
  • Nonces
  • Ehemalige Polster
  • Salze in bestimmten Unterschrift-Schemas, einschließlich ECDSA, RSASSA-PSS.

Die "Qualität" der für diese Anwendungen erforderlichen Zufälligkeit ändert sich.

Zum Beispiel braucht das Schaffen eines nonce in einigen Protokollen nur Einzigartigkeit.

Andererseits verlangt die Generation eines Hauptschlüssels eine höhere Qualität wie mehr Wärmegewicht. Und im Fall von ehemaligen Polstern hält die mit der Information theoretische Garantie der vollkommenen Geheimhaltung nur, ob das Schlüsselmaterial bei einer wahren zufälligen Quelle mit dem hohen Wärmegewicht erhalten wird.

Ideal verwendet die Generation von Zufallszahlen in CSPRNGs Wärmegewicht, das bei einer hohen Qualitätsquelle erhalten ist, die ein Hardware-Zufallszahlengenerator oder vielleicht unvorhersehbare Systemprozesse sein könnte - obwohl unerwartete Korrelationen in solchen mehreren scheinbar unabhängigen Prozessen gefunden worden sind. Von einer Information theoretischer Gesichtspunkt, der Betrag der Zufälligkeit, ist das Wärmegewicht, das erzeugt werden kann, dem durch das System zur Verfügung gestellten Wärmegewicht gleich. Aber manchmal, in praktischen Situationen, sind mehr Zufallszahlen erforderlich als es gibt verfügbares Wärmegewicht. Auch die Prozesse, um Zufälligkeit aus einem laufenden System herauszuziehen, sind in der wirklichen Praxis langsam. In solchen Beispielen kann ein CSPRNG manchmal verwendet werden. Ein CSPRNG kann das verfügbare Wärmegewicht über mehr Bit "strecken".

Voraussetzungen

Die Voraussetzungen eines gewöhnlichen PRNG sind auch durch einen kryptografisch sicheren PRNG zufrieden, aber die Rückseite ist nicht wahr. CSPRNG Voraussetzungen fallen in zwei Gruppen: Erstens, dass sie statistische Zufälligkeitstests bestehen; und zweitens, den sie gut unter dem ernsten Angriff halten, selbst wenn ein Teil ihrer Initiale oder Staat führend, verfügbar für einen Angreifer wird.

  • Jeder CSPRNG sollte den Test des folgenden Bit befriedigen. D. h. in Anbetracht der ersten Bit einer Zufallsfolge gibt es keinen polynomisch-maligen Algorithmus, der (+1) voraussagen kann, hat th mit der Wahrscheinlichkeit des Erfolgs besser gebissen als 50 %. Andrew Yao hat 1982 bewiesen, dass ein Generator, den Test des folgenden Bit bestehend, alle anderen polynomisch-maligen statistischen Tests für die Zufälligkeit bestehen wird.
  • Jeder CSPRNG sollte "Zustandkompromiss-Erweiterungen" widerstehen. Falls Teil oder ganzer sein Staat offenbart (oder richtig erraten worden sind), sollte es unmöglich sein, den Strom von Zufallszahlen vor der Enthüllung wieder aufzubauen. Zusätzlich, wenn es einen Wärmegewicht-Eingang gibt, während es läuft, sollte es unausführbar sein, Kenntnisse des Staates des Eingangs zu verwenden, um zukünftige Bedingungen des CSPRNG-Staates vorauszusagen.

:: Beispiel: Wenn der CSPRNG unter der Rücksicht Produktion durch Rechenbit von π in der Folge erzeugt, von einem unbekannten Punkt in der Binärentwicklung anfangend, kann es den Test des folgenden Bit gut befriedigen und ist so statistisch zufällig, weil π scheint, eine Zufallsfolge zu sein. (Das würde versichert, wenn π eine normale Zahl zum Beispiel ist.) Jedoch ist dieser Algorithmus nicht kryptografisch sicher; ein Angreifer, der bestimmt, welches Bit des Pis (d. h. der Staat des Algorithmus) zurzeit im Gebrauch ist, wird im Stande sein, alle vorhergehenden Bit ebenso zu berechnen.

Die meisten PRNGs sind für den Gebrauch als CSPRNGs nicht passend und werden auf beiden Zählungen scheitern. Erstens, während die meisten PRNGs Produktionen zufällig zu geordneten statistischen Tests scheinen, widerstehen sie bestimmter Rücktechnik nicht. Statistische Spezialtests können besonders abgestimmt auf solch einen PRNG gefunden werden, der die Zufallszahlen zeigt, um nicht aufrichtig zufällig zu sein. Zweitens, für den grössten Teil von PRNGs, als ihr Staat offenbart worden ist, können alle vorigen Zufallszahlen retrodicted sein, einem Angreifer erlaubend, alle vorigen Nachrichten, sowie zukünftige zu lesen.

CSPRNGs werden ausführlich entworfen, um diesem Typ von cryptanalysis zu widerstehen.

Ein Hintergrund

Santha und Vazirani haben bewiesen, dass Mehrer-Bit-Ströme mit der schwachen Zufälligkeit verbunden werden können, um eine höhere Qualität quasizufälliger Bit-Strom zu erzeugen.

Noch früher hat John von Neumann bewiesen, dass ein einfacher Algorithmus einen beträchtlichen Betrag der Neigung in jedem Bit-Strom entfernen kann, der auf jeden Bit-Strom vor dem Verwenden jeder Schwankung des Santha-Vazirani Designs angewandt werden sollte. Das Feld ist genannte Wärmegewicht-Förderung und ist das Thema der aktiven Forschung (z.B, N Nisan, S Safra, R Shaltiel, Ein Ta-Shma, C Umans, D Zuckerman).

Designs

In der Diskussion unten werden CSPRNG Designs in drei Klassen geteilt: 1) diejenigen, die auf kryptografischen Primitiven wie Ziffern und kryptografischem Kuddelmuddel, 2) diejenigen gestützt sind, die auf mathematischen Problemen gestützt sind, die vorgehabt sind, und 3) Designs des speziellen Zwecks hart zu sein. Die letzten führen häufig zusätzliches Wärmegewicht ein, wenn verfügbar und genau genommen nicht "reine" pseudozufällige Zahlengeneratoren sind, weil ihre Produktion durch ihren anfänglichen Staat nicht völlig bestimmt wird. Diese Hinzufügung kann Angriffe verhindern, selbst wenn der anfängliche Staat in Verlegenheit gebracht wird.

Designs auf kryptografischen Primitiven gestützt

  • Eine sichere Block-Ziffer kann in einen CSPRNG durch das Laufen davon in der Gegenweise umgewandelt werden. Das wird durch die Auswahl eines zufälligen Schlüssels und encrypting eine Null, dann encrypting 1, dann encrypting 2 usw. getan. Der Schalter kann auch an einer beliebigen Zahl außer der Null angefangen werden. Offensichtlich wird die Periode 2 für eine N-Bit-Block-Ziffer sein; ebenso offensichtlich müssen die Anfangswerte (d. h., Schlüssel und "plaintext") nicht bekannt einem Angreifer, jedoch gut werden dieser CSPRNG Aufbau könnte sein. Sonst wird die ganze Sicherheit verloren.
  • Ein kryptografisch sicheres Kuddelmuddel eines Schalters könnte auch als ein guter CSPRNG in einigen Fällen handeln. In diesem Fall ist es auch notwendig, dass der Anfangswert dieses Schalters zufällig und heimlich ist. Jedoch hat es wenig Studie dieser Algorithmen für den Gebrauch auf diese Weise gegeben, und mindestens einige Autoren warnen vor diesem Gebrauch.
  • Die meisten Strom-Ziffern arbeiten durch das Erzeugen eines pseudozufälligen Stroms von Bit, die (fast immer XORed) mit dem plaintext verbunden werden; das Laufen der Ziffer auf einem Schalter wird einen neuen pseudozufälligen Strom vielleicht mit einer längeren Periode zurückgeben. Die Ziffer ist nur sicher, wenn der ursprüngliche Strom ein guter CSPRNG ist (das ist nicht immer der Fall: Sieh RC4 Ziffer). Wieder muss der anfängliche Staat heimlich behalten werden.

Zahl theoretische Designs

  • Der Algorithmus von Blum Blum Shub hat einen Sicherheitsbeweis, der auf der Schwierigkeit des Quadratischen residuosity Problems gestützt ist. Da die einzige bekannte Weise, dieses Problem zu beheben, zum Faktor das Modul ist, wird es allgemein betrachtet, dass die Schwierigkeit der ganzen Zahl factorization einen bedingten Sicherheitsbeweis für den Algorithmus von Blum Blum Shub zur Verfügung stellt. Jedoch ist der Algorithmus sehr ineffizient und deshalb unpraktisch, wenn wirklich äußerste Sicherheit nicht erforderlich ist.
  • Der Algorithmus von Blum-Micali hat einen vorbehaltlosen Sicherheitsbeweis, der auf der Schwierigkeit des getrennten Logarithmus-Problems gestützt ist, aber ist auch sehr ineffizient.

Sonderanfertigungen

Es gibt mehrere praktische PRNGs, die entworfen worden sind, um einschließlich kryptografisch sicher

zu sein
  • der Schafgarbe-Algorithmus, der versucht, die entropic Qualität seiner Eingänge zu bewerten. Schafgarbe wird in FreeBSD, OpenBSD und Mac OS X (auch als/dev/random) verwendet
  • der Algorithmus von Fortuna, der Nachfolger der Schafgarbe, die nicht versucht, die entropic Qualität seiner Eingänge zu bewerten.
  • die Funktion in der Kryptografischen Anwendung des Microsofts zur Verfügung gestellter CryptGenRandom, Schnittstelle Programmierend
  • ISAAC, der auf einer Variante der RC4 Ziffer gestützt ist
  • ANSI X9.17 Standard (Finanzeinrichtungsschlüsselmanagement (Großhandel)), der als ein FIPS Standard ebenso angenommen worden ist. Es nimmt als Eingang einen TDEA (Auswahl 2 eingebend), Schlüsselbündel k und (der Anfangswert) ein zufälliger 64-Bit-Samen s. Jedes Mal ist eine Zufallszahl es erforderlich:
  • Erhält das aktuelle Datum/Zeit D zur maximalen möglichen Entschlossenheit.
  • Schätzt einen vorläufigen Wert t = TDEA (D)
  • Schätzt den zufälligen Wert x = TDEA (s  t), wo  bitwise exklusiv anzeigt oder.
  • Aktualisiert den Samen s = TDEA (x  t)

:Obviously, die Technik wird zu jeder Block-Ziffer leicht verallgemeinert; AES ist (Young und Yung, op cit, Sekte 3.5.1) angedeutet worden.

Standards

Mehrere CSPRNGs sind standardisiert worden. Zum Beispiel,

  • FIPS 186-2
  • NIST SP 800-90A: Hash_DRBG, HMAC_DRBG, CTR_DRBG und Doppel-DRBG der europäischen Gemeinschaft.
  • ANSI X9.17-1985 Anhang C
  • ANSI X9.31-1998 Anhang A.2.4
  • ANSI X9.62-1998 Anhang A.4, obsoleted durch ANSI X9.62-2005, Anhang D (HMAC_DRBG)

Eine gute Verweisung wird durch NIST aufrechterhalten.

Es gibt auch Standards für die statistische Prüfung von neuen CSPRNG Designs:

Links


Der Berg Baekdu / Maurice de Saxe
Impressum & Datenschutz