2016-09-05 7 views
0

나는 libgcrypt 버전 1.6.1을 초보자로 사용하고 있으며, 지금은 rsa 알고리즘에 대한 공용/개인 키 쌍을 생성하려고합니다.libccrypt에서 gcry_pk_genkey 기능이 매우 느립니다.

나는 아래에서 사용하는 코드를 나열합니다. 내가 덫에 걸린 것은 gcry_pk_genkey 함수이다.이 함수는 1.5 시간이 걸리지 만 결코 돌아올 수 없다.

void gcrypt_init() 
{ 
if (!gcry_check_version (GCRYPT_VERSION)) 
{ 
    xerr("gcrypt: library version mismatch"); 
} 

gcry_error_t err = 0; 

err &= gcry_control (GCRYCTL_SUSPEND_SECMEM_WARN); 

err &= gcry_control (GCRYCTL_INIT_SECMEM, 16384, 0); 

err &= gcry_control (GCRYCTL_RESUME_SECMEM_WARN); 
err &= gcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0); 

if (err) { 
    xerr("gcrypt: failed initialization"); 
} 
} 


#include "gcry.hh" 
#include <cstdio> 
#include <cstdlib> 
#include <cstring> 

int main(int argc, char** argv) 
{ 
if (argc != 2) { 
    fprintf(stderr, "Usage: %s <rsa-keypair.sp>\n", argv[0]); 
    xerr1("Invalid arguments."); 
} 

gcrypt_init(); 

gcry_error_t err = 0; 
gcry_sexp_t rsa_parms; 
gcry_sexp_t rsa_keypair; 

err &= gcry_sexp_build(&rsa_parms, NULL, "(genkey (rsa (nbits 4:2048)))"); 
if (err) { 
    xerr1("gcrypt: failed to create rsa params"); 
} 

err &= gcry_pk_genkey(&rsa_keypair, rsa_parms); <------- This function call 
if (err) { 
    xerr1("gcrypt: failed to create rsa key pair"); 
} 

char* fname = argv[1]; 
err = gcrypt_sexp_to_file(fname, rsa_keypair, 1 << 16); 

    printf("i am here3\n"); 
gcry_sexp_release(rsa_keypair); 
gcry_sexp_release(rsa_parms); 

return err; 
} 

이 기능은 can take a few minutes. Your computer needs to gather random entropy.입니다. 그러나 반환/throw 예외없이 거의 2 시간이 걸릴 것으로 나는 거의 믿을 수 없습니다.

virtualbox VM 인스턴스 내부에 32 비트 Ubuntu 14.04를 사용하고 있습니다. 내가 여기서 뭐 잘못하고 있니?

답변

2

/dev/random의 속도를 테스트 해 주시겠습니까? 그게 무섭게 느리다면 (아마 다른 프로세스가 너무 많은 엔트로피를 필요로하기 때문에) 엔트로피가 수집 될 때까지 /dev/random이 차단 될 것입니다. 이는 헤드리스 머신에서도 문제가 될 수 있습니다. 필자는 랩탑에서 우분투의 난수 생성 속도에 대한 문제를 가지고있었습니다.

좀 덜 안전한 난수 생성 프로그램을 사용하기 위해 transient-key (s 표현식의 플래그로)을 지정할 수도 있습니다. 이는 아마 엔트로피가 적어 차단이 적음을 의미합니다.

숫자가 소수인지 확인하는 데 드는 시간은 입니다. 그리고 소수 (또는 2 개)를 찾을 시간이 아직 알려지지 않았지만 난수 생성을 차단하는 것 이외의 다른 것이 거대한 생성 시간을 유발할 수는 없습니다.

+0

안녕하세요 Maarten, 정말 고마워요. "다소 덜 안전한 난수 생성기"에 대해 자세히 설명해 주시겠습니까? 어떻게 설정해야합니까? 고맙습니다! – computereasy

+0

[매뉴얼에 있습니다] (https://gnupg.org/documentation/manuals/gcrypt/gcrypt.pdf), 문자열의 플래그로 사용됩니다. 나 자신을 시도하지 않았습니다. 그것이 느린'/ dev/random'에 대해서 당신이 무엇을 할 수 있는지보고 싶을 지 모르지만, 다른 프로세스들도 문제를 경험할 수 있습니다. –

+0

당신 말이 맞아 ... 나는'cat/dev/random'을 시도해 보았고, 몇 개의 출력물을 생성했다가 붙어 버렸다. – computereasy