2016-06-26 10 views
4

Die Dokumentation von Crypt :: OpenSSL :: RSA scheint vage zu sein, wie Zufälligkeit erreicht wird. Zum Beispiel ist es zwingend notwendig, einmalRSA und Perl - wie Zufälligkeit wird erreicht?

Crypt::OpenSSL::RSA->import_random_seed(); 

vor jeden Aufruf

Crypt::OpenSSL::RSA->generate_key 

oder vielleicht zu nennen, ist import_random_seed calling genug, um auch mit mehreren Anrufen im Anschluss an generate_key?

Und was ist mit Crypt::OpenSSL::Random::random_seed($good_entropy)? Es wird gesagt, dass es nicht notwendig ist, wenn es /dev/random gibt, aber was ist, wenn es Windows ist?

Ich bin auf der Suche nach Rat von Menschen, die Erfahrung damit haben.

+0

Eine Sache, auf die Sie achten sollten, sollte import_random_seed wahrscheinlich in jedem Unterprozess oder Thread aufgerufen werden, wenn Ihr Code fork oder threads verwendet und Sie sich in einer Umgebung befinden, in der die Zufallsgenerierung einen csprng verwendet. Andernfalls könnte der vom Schlüsselgenerator verwendete csprng denselben Seed verwenden. – DavidO

Antwort

1

Es gibt einige Informationen in one of the test files, die mit Crypt :: OpenSSL :: RSA kommen.

Auf Plattformen ohne/dev/random müssen wir manuell säen. In realen Leben, würde das folgende stinken, aber zu Testzwecken, es genügt, mit jedem alten Ding zu säen, auch wenn es nicht tatsächlich zufällig ist. Wir emulieren zumindest das Seeding von Crypt :: OpenSSL :: Random, , was wir im "wirklichen Leben" tun müssten, da die von der OpenSSL-Zufallsdatenbank verwendeten privaten Daten offenbar nicht über Perl XS reichen Module.

Also müssten Sie dieses Zeug verwenden und mehr zufällige Zufälligkeit auf Windows-Geräten hinzufügen.

+0

Beachten Sie, dass ich noch nie von diesem Modul gehört habe. Ich habe mir die Dokumentation angesehen. – simbabque

+0

Also im Grunde auf Windows ist es vorgeschlagen, random_seed mit etwas zufällig zu nennen. Auf * nix wird das offenbar nicht benötigt. Aber es ist immer noch unklar bezüglich import_random_seed - Muss es vor jedem Generieren oder nur einmal aufgerufen werden? – Pilot

+0

@Pilot kann ich leider nicht beantworten. Ich schlage vor, dass Sie sich die openSSL-Bibliotheksdokumentation ansehen. Das ist das, was dieses Modul benutzt, und es ist auch das, das 2014 den [Heartbleed] (https://en.wikipedia.org/wiki/Heartbleed) Bug hatte. – simbabque