慢随机素数生成

时间:2015-02-02 01:08:06

标签: c++ cryptography

我正在研究一种完全同态加密方案,需要生成非常大的素数(即200位或更多),目前我们的方法是我们程序中最大的瓶颈。我们正在使用Shoup的NTL库,我们引用的项目使用了相同的库,并且运行时间更快。

下面的函数用于选择随机素数Q0,使得lowLimit< Q0<限制。函数RandomPrime来自NTL,它需要一个特定数量的位,你的返回素数需要以二进制表示,所以我使用了另一个库函数PickRandom,它返回一个随机整数,然后我用这个整数来确定素数的位数。

这是迄今为止我们最大的运行时间瓶颈。是否有人熟悉NTL或任何其他更有效的素数生成方法?

ZZ chooseQ0(const ZZ &lowLimit, const long &lambda, const ZZ &productOfPrimes){
ZZ prime, limit, Two, i, Q0, temp, s, last, temp2;
Two = 2;
long bits;
long err = 10;

limit = power(Two, pow(lambda, 5))/productOfPrimes;
cout << "Q0 limit: " << limit << endl;

srand(time(NULL));
s = rand()%100;
SetSeed(s);
RePick:
temp = PickRandom(limit);
if(temp <= lowLimit){
    cout << "Repicked Q0-1" << endl;
    goto RePick;
}

cout << "Q0 Random Number: " << temp << endl;
redo:

bits = NumBits(temp);
RandomPrime(temp2, bits, err);
if(temp2 <= lowLimit || temp2 > limit){
    cout << "Repicked Q0-2" << endl;
    goto RePick;
}
cout<< "Q0: " << temp2<< endl;
return temp2;
}

0 个答案:

没有答案