2013-10-29 1 views
0

난 openssl 난수 생성기 API를 사용하여 난수 생성기를 쓰고 있었다. 난수 생성기에 시드를 제공하고 있습니다. 씨앗은 openSSL의 RAND_seed() API를 사용하여 openssl에 제공되고 시드를 부여한 후 Rand_bytes() api를 호출하여 임의의 번호를 가져옵니다.제공되는 시드가 동일해도 openssl이 다른 난수를 제공하는 이유는 무엇입니까?

하지만 시드가 동일하면 Rand_bytes가 동일한 난수를 제공해야하지만, 제 경우에는 동일한 난수를 얻지 못합니다. 이 행동의 이유는 무엇입니까? 해결 방안은 무엇인가 ? 코드가

#define _64BIT_SIZE 8 

int GenerateRandom_64(unsigned char * apcRandom_64) 
{ 
    unsigned char cRandBytes_64[_64BIT_SIZE] = {0}, 
        cSeed_64[_64BIT_SIZE]  = 
            {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07}; 
    RAND_seed(cSeed_64, _64BIT_SIZE); /* seed is cSeed_64 */ 
    if(!RAND_bytes(apcRandom_64, _64BIT_SIZE)) 
     printf("nOt seeded the random bit generator properly\n"); 
    return 0; 
} 
+0

보안상의 이유로 ... –

답변

0

RAND_seed() 아래 주어진 것은 엔트로피 인수가 시드 버퍼의 바이트 수와 동일한 값을 취 RAND_add() 전화와 동일하다. RAND_add()은 시드 데이터를 엔트로피 풀에 혼합합니다. /dev/urandom이있는 시스템에서 엔트로피 풀은 사전 시드됩니다.

따라서 /dev/urandom을 제공하지 않는 컴퓨터에서 실행하지 않는 한 RAND_bytes()은 예측할 수없는 시퀀스를 생성합니다.

자세한 내용은 RAND_add() 매뉴얼 페이지를 참조하십시오.

관련 문제