素数生成中的随机数据

时间:2015-10-12 05:40:13

标签: cryptography rsa primes number-theory modular-arithmetic

在密钥生成过程中,GnuPG显示:

 We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.

现在我想知道:这个随机数据在素数生成中的用法是什么?我对Erathosthénis的筛子很熟悉,但不能想到将这些数据应用到筛子中。我也知道Rabin-Miller强大的测试可以使用随机数据作为mod n,但不确定是否是这种情况。

1 个答案:

答案 0 :(得分:1)

2048位RSA中的公共模数,例如是两个1024/1025位随机素数的乘积,其二进制分解的最大和最低有效位设置为1。其余的是随机的,整数测试的是素数:

// to generate a 16-bit prime
// the MSB must be one, if the prime is to be 16-bit
// and the LSB must be one, because all primes (p > 2) are odd
a = rand();     // between 0 and MAX_INT
a &= 0x7ffe;    // Leave 14 middle bits as is
a |= 0x8001;    // Force MSB and LSB to one
while (!is_prime(a)) a += 2;

因此我们从一个随机整数开始,然后将候选者增加2,直到找到一个。对is_prime的呼叫次数通常在log2(N)(IIRC)的范围内。通过计算+ = N(a)可以略微改善这一点,其中N使用SoE来跳过几个小素数的倍数。

取两个随机数可用于产生31-32位RSA模数。

在实践中,素数测试是用Rabin-Miller或其他强测试进行的,因为SoE会有很大的内存需求,并且需要一个难以理解的步骤来跳过sqrt范围内的所有素数(2 ^ 1024)〜= 2 ^ 512。