2011-02-17 3 views
0

Je voudrais générer une paire de clés publique et privée, effciently (rapide) en perl, et être capable de saisir des données aléatoires pour moi-même. Avec l'entrée de données aléatoires, je veux bien sûr dire que la fonction nécessite disons X bits aléatoires pour générer une paire de clés publique/privée de Y bits, et je devrais pouvoir fournir ces bits X à la fonction.Générer RSA keypair en perl efficacement avec PRNG personnalisé

Alors idially, la fonction devrait ressembler à:

($private, $public) = genRSAkeypair($randomdata, 1024); 

et $ alors privé contient:

----BEGIN RSA PRIVATE KEY----- 
.... 
----END .... 

et public $ contient

----BEGIN RSA PUBLIC and so on... 

RandomData de $ est alors juste un chaîne de bits aléatoires de n'importe quel générateur aléatoire. Si $ randomdata est cohérent entre instance1 et instance2, instance1 et instance2 doivent renvoyer les mêmes clés publique et privée. Si vous voulez savoir à quoi cela sert, c'est que je prévois de créer un système de génération de clé RSA basé sur un mot de passe, sans avoir besoin de stocker des clés. Ainsi, la clé est générée directement à partir du mot de passe, en utilisant SHA512 enchaîné d'une manière spécifique pour créer des données aléatoires statiques.

Bien sûr, la même clé publique et privée doit être retournée chaque fois que le même mot de passe est entré dans le système, sinon le système serait inutile.

Des idées?

+0

Je doute que ce serait sûr. Sauf si vous utilisez un mot de passe _huge_ (comme un paragraphe de texte), vous n'aurez pas assez d'entropie pour utiliser l'espace de clés complet. Je suppose qu'il est peu probable que quelqu'un qui sait ce qu'ils font serait intéressé à attaquer votre système de chiffrement, mais si quelqu'un le faisait, je parie qu'ils pourraient le casser. – cjm

+0

Tant que le CSPRNG qui génère les données aléatoires basées sur le mot de passe, a l'effet d'avalance et est cryptiquement fort, vous devez connaître le mot de passe pour pouvoir générer les clés publiques/privées correctes. Si le mot de passe est assez bon, la seule option serait de renforcer le mot de passe. Dans ce cas, une chaîne de hachage SHA512 est utilisée comme donnée aléatoire, et la seule façon d'obtenir le hachage correct serait de renforcer le mot de passe. –

Répondre

0

Je voudrais essayer Crypt :: OpenSSL :: RSA, il semble lier directement à libssl

+0

Ne fonctionne pas. Testé dehors: http://www.sebn.us.to/old/RSAgen.cgi Le code complet: http://www.sebn.us.to/old/RSAgen.txt Même si je spécifie un hasard seed, OpenSSL semble "ajouter" des données aléatoires à cette graine. Je voudrais que la même paire de clés publique/privée soit générée chaque fois que le même mot de passe est entré. –

Questions connexes