2013-02-18 19 views
5

Ich möchte RSA_generate_key() auf HP-UX 11.11 verwenden. Aber hp-ux 11.11 bietet nicht/dev/random oder/dev/urandom, also muss ich openssl prngd verwenden.RSA_generate_key() mit prngd anstelle von/dev/random oder/dev/urandom

Bitte lassen Sie mich wissen, wie Sie es standardmäßig in C-Code verwenden. Ich habe openssl installiert und prngd ist verfügbar.

$ ls /opt/openssl/prngd/prngd 
/opt/openssl/prngd/prngd 

Lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.

Antwort

2

prngd simuliert "/ dev/random" und "/ dev/urandom" über eine Netzwerkverbindung. Es unterstützt entweder einen Unix-Stream-basierten Domain-Socket ("/ var/run/egd-pool") oder (wenn konfiguriert) oder IP mit den TCP-Ports 708 oder 4840 (Standardwerte --- können geändert werden).

Also, um das Unix-Domain-Socket in Verwendung, würde es in etwa so aussehen:

#include <string.h> 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <sys/un.h> 

int devrandom(void) 
{ 
    union 
    { 
    struct sockaddr sa; 
    struct sockaddr_un path; 
    } location; 
    int sock;    

    memset(&location,0,sizeof(location)); 
    location.path.sun_family = AF_UNIX; 
    strcpy(location.path.sun_path,"/var/run/egd-pool"); 

    sock = socket(AF_UNIX,SOCK_STREAM,0); 
    if (sock < 0) 
    return -1; 

    if (connect(sock,&location.sa,sizeof(struct sockaddr_un)) < 0) 
    return -1; 

    return sock; 
} 

Dies wird einen Dateideskriptor zurückkehren Sie lesen passieren können(), um die Zufallsdaten (Note zu erhalten: Dieses Code ist nicht getestet). Eine TCP/IP-basierte Verbindung ist etwas komplizierter, da der Socket an eine lokale Adresse gebunden und eine Verbindung zur Remote-Adresse hergestellt werden muss. Im Internet gibt es jedoch zahlreiche Beispiele für diese Art von Code.

3

Beachten Sie, dass prngd die gleiche Schnittstelle wie EGD verwendet, überprüfen Sie die Anweisungen gefunden here. Ein Zitat von Interesse ist:

Auf Systemen ohne/dev/* random Geräte Entropie aus dem Kernel

Alternativ kann die EGD-Schnittstelle kompatibel Daemon Bereitstellung PRNGD verwendet werden.

OpenSSL fragt EGD automatisch ab, wenn Entropie über RAND_bytes() angefordert wird oder der Status zum ersten Mal über RAND_status() geprüft wird, wenn sich der Socket unter/var/run/egd-pool,/dev/egd- befindet Pool oder/etc/egd-pool.

Also, wenn Sie prngd laufen, laufen sie als prngd /dev/egd-pool oder eine der anderen Alternativen