Heim  >  Artikel  >  Backend-Entwicklung  >  CSPRNG-Funktion in PHP

CSPRNG-Funktion in PHP

墨辰丷
墨辰丷Original
2018-06-05 13:54:531789Durchsuche

In diesem Artikel wird hauptsächlich die CSPRNG-Funktion in PHP vorgestellt. Ich hoffe, dass er für alle hilfreich ist.

1. Was ist CSPRNG?

Ein kryptografisch sicherer Pseudozufallszahlengenerator (Cryptographically Secure Pseudorandom Number Generator, abgekürzt CSPRNG) ist eine Pseudozufallszahl Zufallszahlengenerator (PRNG), der für kryptografische Algorithmen geeignete Pseudozufallszahlen generiert.

CSPRNG kann hauptsächlich verwendet werden für:

  • Schlüsselgenerierung (z. B. Generieren komplexer Schlüssel)

  • Zufällige Passwörter für neue Benutzer generieren

  • Verschlüsselungssystem

Holen Sie sich einen Schlüsselaspekt Der Schlüssel zu hoher Sicherheit liegt in der Zufälligkeit hoher Qualität

2. CSPRNG in PHP7

PHP 7 führt zwei neue Funktionen ein, die zur Implementierung von CSPRNG verwendet werden können: random_bytes und random_int .

Die Funktion random_bytes gibt eine Zeichenfolge zurück und akzeptiert einen int-Eingabeparameter, der die Anzahl der Bytes des zurückgegebenen Ergebnisses darstellt.

Beispiel:


$bytes = random_bytes('10');
var_dump(bin2hex($bytes));
//possible ouput: string(20) "7dfab0af960d359388e6"


random_int-Funktion gibt eine int-Zahl innerhalb des angegebenen Bereichs zurück.

Beispiel:


var_dump(random_int(1, 100));
//possible output: 27


3. Hintergrundlaufumgebung

Die Zufälligkeit der oben genannten Funktionen variiert je nach Umgebung:

  • Unter Windows wird immer CryptGenRandom() verwendet.

  • Auf anderen Plattformen wird arc4random_buf() verwendet, sofern verfügbar (etabliert auf BSD-Serien oder Systemen mit libbsd)

  • Wenn keiner der oben genannten Punkte zutrifft, wird ein Linux-Systemaufruf getrandom(2) verwendet.

  • Wenn nicht, wird /dev/urandom als letztes verfügbares Tool verwendet

  • Wenn keiner der oben genannten Schritte funktioniert, gibt das System einen Fehler aus

Ein einfacher Test

Ein gutes Zufallszahlengenerierungssystem gewährleistet eine angemessene Generierungsqualität. Um diese Qualität zu überprüfen, werden in der Regel eine Reihe statistischer Tests durchgeführt. Ohne sich mit komplexen Statistikthemen zu befassen, kann der Vergleich eines bekannten Verhaltens mit den Ergebnissen eines Zahlengenerators bei der Qualitätsbewertung hilfreich sein.

Ein einfacher Test ist das Würfelspiel. Angenommen, die Wahrscheinlichkeit, einen Würfel einmal zu würfeln, um ein Ergebnis von 6 zu erhalten, beträgt 1/6. Wenn ich dann 100 Mal gleichzeitig 3 Würfel würfele, sieht das Ergebnis ungefähr wie folgt aus:

0 6 = 57,9 Mal
1 6 = 34,7 Mal
2 6s = 6,9 Mal
3 6s = 0,5 Mal
Das Folgende ist der Code, um 1.000.000 Mal Würfeln zu implementieren:


$times = 1000000;
$result = [];
for ($i=0; $i<$times; $i++){
  $dieRoll = array(6 => 0); //initializes just the six counting to zero
  $dieRoll[roll()] += 1; //first die
  $dieRoll[roll()] += 1; //second die
  $dieRoll[roll()] += 1; //third die
  $result[$dieRoll[6]] += 1; //counts the sixes
}
function roll(){
  return random_int(1,6);
}
var_dump($result);


Die Verwendung von PHP7s random_int und der einfachen Rand-Funktion kann zu den folgenden Ergebnissen führen

Wenn Sie zuerst rand und random_int sehen Mehr Für einen guten Vergleich können wir eine Formel anwenden und die Ergebnisse in einem Diagramm darstellen. Die Formel lautet: (PHP-Ergebnis – erwartetes Ergebnis)/erwartetes Ergebnis hoch 0,5.

Das Ergebnisdiagramm sieht wie folgt aus:

(Werte nahe 0 sind besser)

Obwohl die Ergebnisse von 3 6er sind nicht gut abschneiden, und dieser Test ist für praktische Anwendungen zu einfach. Wir können immer noch sehen, dass random_int besser abschneidet als rand.

Darüber hinaus ist das Sicherheitsniveau unserer Anwendung auf die Unvorhersehbarkeit und das wiederholbare Verhalten von zurückzuführen Zufallszahlengenerator.

Zusammenfassung : Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, dass er für das Studium aller hilfreich sein wird.

Verwandte Empfehlungen:

Beispielanalyse des Ausführungszyklus von PHP-Prinzipien

Detaillierte Erläuterung der PHP-Quellcode-Verzeichnisstruktur und Funktionsbeschreibung

Detaillierte Schritt-für-Schritt-Anleitung für die modulare Installation von PHP


Das obige ist der detaillierte Inhalt vonCSPRNG-Funktion in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn