2013-08-15 2 views
1

openssl/bn.h에서 BN_generate_prime을 사용하여 소수를 생성하는 데 사용 된 답변을 찾을 수 없었습니다. 또한,이 함수가 사용하는 PRNG를 어떻게 써도 될까요?BN_generate_prime에 대한 PRNG를 시드하는 방법

별도의 질문이지만 내 코드와 관련이있다. RSA 키 쌍을 생성하는 프로그램을 작성 중이다. 상위 비트가 BIGNUM에 설정되어 있는지 어떻게 확인하겠습니까? 내가 512 비트 프라임을 생성한다고 가정 해 봅시다. BN_is_bit_set (소수, 512)를 사용합니까?

감사

답변

6

BN_generate_prime가 사용되지 않는 기능입니다, here을 말한다. 또한 crypto/bn_depr.c에 정의되어 있습니다. 당신은 소수를 생성하기 위해 그것을 사용해서는 안됩니다. 대신 BN_generate_prime_ex를 사용해야합니다. 여기 BN_generate_prime_ex의 샘플 사용입니다 :

BIGNUM *r; 
static const char rnd_seed[] = "string to make the random number generator think it has entropy"; 

r = BN_new(); 
RAND_seed(rnd_seed, sizeof rnd_seed); /* or BN_generate_prime_ex may fail */ 

BN_generate_prime_ex(r, 512, 0, NULL, NULL, NULL); 

BN_free(r); 

그런 다음 당신은 512 비트 의사 난수 소수를해야합니다. 위의 예와 같이 PRNG를 RAND_seed로 시드 할 수 있습니다.

두 번째 질문의 경우 BN_num_bits을 시도하십시오.