2013-02-18 3 views
5

HP-UX 11.11에서 RSA_generate_key()을 사용하고 싶습니다. 그러나 hp-ux 11.11은/dev/random 또는/dev/urandom을 제공하지 않으므로 openssl prngd를 사용해야합니다./dev/random 또는/dev/urandom 대신 prngd를 사용하는 RSA_generate_key()

C 코드에서 기본값으로 사용하는 방법을 알려주세요. openssl을 설치하고 prngd를 사용할 수 있습니다.

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

자세한 정보가 필요한 경우 알려주십시오.

답변

2

prngd는 네트워크 연결을 통해 "/ dev/random"및 "/ dev/urandom"을 시뮬레이트합니다. 유닉스 스트림 기반 도메인 소켓 ("/ var/run/egd-pool") 또는 TCP 포트 708 또는 4840 (기본값은 변경 가능)을 사용하는 IP를 지원합니다. (주 임의의 데이터를 얻기 위해이 파일 기술자를 돌려 읽으 전달할 수있는 것이다

#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; 
} 

() :

그래서, 유닉스 도메인 소켓을 사용하여, 그것과 같을 것이 코드가 테스트되지 않음). TCP/IP 기반 연결은 소켓을 로컬 주소에 바인딩하고 원격 주소에 연결해야한다는 점에서 조금 더 복잡하지만이 유형의 코드에 대해서는 인터넷에 많은 예제가 있습니다.

3

prngd가 EGD와 동일한 인터페이스를 사용한다는 점에 유의하십시오. 지침은 here입니다. 관심의 인용은 다음과 같습니다

dev에 /가없는 시스템에

/* 또는 커널

에서 엔트로피를 제공하는 임의의 장치는 EGD 인터페이스 호환 데몬 prngd를 사용할 수 있습니다.

OpenSSL은 RAND_bytes()를 통해 엔트로피가 요청 될 때 자동으로 EGD를 쿼리합니다. 소켓이/var/run/egd-pool,/dev/egd-pool에 위치하면 RAND_status() 풀 또는/etc/egd 풀. 당신이 prngd를 실행할 때

그래서, prngd /dev/egd-pool 또는 다른 대안 중 하나를 실행