나는 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를 사용하고 있습니다. 내가 여기서 뭐 잘못하고 있니?
안녕하세요 Maarten, 정말 고마워요. "다소 덜 안전한 난수 생성기"에 대해 자세히 설명해 주시겠습니까? 어떻게 설정해야합니까? 고맙습니다! – computereasy
[매뉴얼에 있습니다] (https://gnupg.org/documentation/manuals/gcrypt/gcrypt.pdf), 문자열의 플래그로 사용됩니다. 나 자신을 시도하지 않았습니다. 그것이 느린'/ dev/random'에 대해서 당신이 무엇을 할 수 있는지보고 싶을 지 모르지만, 다른 프로세스들도 문제를 경험할 수 있습니다. –
당신 말이 맞아 ... 나는'cat/dev/random'을 시도해 보았고, 몇 개의 출력물을 생성했다가 붙어 버렸다. – computereasy