randomBytes vs pseudoRandomBytes
In welchen Situationen ist es akzeptabel, die (aus Sicht der Sicherheit) zu verwenden Knoten crypto.pseudoRandomBytes
anstelle des kryptographisch starke crypto.randomBytes
?
ich gehe davon aus (falsche), aber die docs haben nicht wirklich viel darüber zu sagen, wie weniger stark ist.pseudoRandomBytes
eine bessere Leistung auf Kosten des seins vorhersehbarer
Speziell Frage ich mich, ob ich ' m ok mit pseudoRandomBytes
zu generieren, die eine CSRF-token.
- Ich weiß nicht, wie random es wirklich ist, aber ist die Leistung von
crypto.randomBytes
ein Problem in den ersten Platz? - Wenn Sie einen Stapel von CSRF-Token und -
crypto.randomBytes
zu teuer ist, könnte man vielleicht eine einzelnecrypto.randomBytes
Betrieb und ncrypto.pseudoRandomBytes
Operationen. Dann XOR jede der letzteren mit den ersteren und diese zu nutzen. Ich bin kein crypto-Experte, und ich kann nicht bürgen für die Sicherheit einer solchen Methode. Es ist wahrscheinlich besser, als mit allenpseudoRandom
aber schlimmer als mit allencrypto.random
. - Wir alle wissen, die Datenbank ist fast immer ein Engpass. Unter der Annahme, dass
pseudoRandomBytes
sicher ist, bezweifle ich, Sie würden auch sehen, den Unterschied in der Leistung. Das ist nicht die richtige Richtung für die Optimierung. Zeitverschwendung imho. Verwenden Sie einfachrandomBytes
. - Ich habe Probleme mit crypto.randomBytes in VM-Umgebungen, wo es nicht viel Entropie zur Verfügung, es hängt viel mehr als db
- Naja, das problem nicht existiert, bis es vorhanden ist (und es ist sehr unwahrscheinlich). Auch ist es viel einfacher und schneller zu kaufen, ein hardware-Zufallszahlen-generator, zum Beispiel Ivy-Bridge-CPU. Wir Leben in der XXI Jahrhunderts, nachdem alle.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als es stellt sich heraus, mit der default OpenSSL (das ist gebündelt mit Knoten, aber wenn Sie gebaut haben, Ihre eigenen, ist es möglich,konfigurieren Sie die verschiedenen Motoren), der Algorithmus zum generieren von zufälligen Daten ist bei beiden genau die gleiche
randomBytes
(RAND_bytes
) undpseudoRandomBytes
(RAND_pseudo_bytes
).Der einzige Unterschied zwischen den beiden Anrufe, hängt von der version von Knoten, die Sie verwenden:
randomBytes
gibt einen Fehler zurück, wenn der Entropie-pool wurde noch nicht ausgesät mit genug Daten.pseudoRandomBytes
immer wieder bytes, auch wenn der Entropie-pool wurde nicht richtig gesetzt.randomBytes
nicht zurück, bis die Entropie-pool hat genug Daten. Dies dauert nur ein paar Millisekunden (es sei denn, das system hat gerade gestartet).Sobald die die Entropie-pool wurde entkernt, mit genug Daten hat, wird es nie "ausgehen," es gibt also absolut keinen wirksamen Unterschied zwischen
randomBytes
undpseudoRandomBytes
einmal den Entropie-pool voll ist.Weil die exakt gleiche Algorithmus wird verwendet, um generieren, randrom Daten, es gibt keinen Unterschied in der Leistung zwischen den beiden Gesprächen (one-time-Entropie-pool seeding trotz).
randomBytes
blockiert, bis genügend Entropie. Dies sollte im Normalfall nie länger als ein paar Millisekunden."crypto.randomBytes
ohne Rückruf wird nicht geblockt, selbst wenn alle Entropie-Quellen sind erschöpft." Antwort aktualisiert.Nur eine Klarstellung, beide haben die gleiche Leistung:
Wenn es so etwas wie den standard-PRNG-Implementierungen in anderen Sprachen, ist es wohl entweder nicht gesetzt standardmäßig oder ist es der Setzliste durch einen einfachen Wert, wie ein Zeitstempel. Unabhängig davon, das Saatgut ist möglicherweise sehr leicht guessable.
RAND_bytes
, also ich bin mir ziemlich sicher, dass Sie sicher sind./dev/urandom
.RAND_bytes
sicher, aber was machtRAND_pseudo_bytes
potenziell unsicher? Da sollten Sie den Aufruf der gleichen byte-Generatoren, würde ich postulieren, dass es der Samen könnten von schlechterer Qualität sein.RAND_bytes
wird ein Fehler zurückgegeben, wenn der Entropie-pool nicht genügend Daten (in der Erwägung, dassRAND_pseudo_bytes
zurück bytes, die basierend auf der niedrigen Entropie Samen). Es ist nicht so, dass das Saatgut ist sehr schwach (also nur ein timestamp), es ist, dass es nicht groß genug sein, um garantiert sicher.ENGINE
'sbytes
undpseudobytes
Taten. Gute Arbeit.