当前所在位置:首页 > 关于我们 > 资讯中心

RSA科普——大质数与指数选取

发布时间:2024-08-09

       1.大质数生成算法

       如何生成这两个大质数,这是个值得研究的问题。首先可以想到的是生成质数序列,从中随机选取2个大质数即可。一种改进的方法是: 除了 2 外的偶数肯定不是质数,而奇数可能是质数,可能不是,那就可以跳过2与3的倍数,即对于 6n,6n+1, 6n+2, 6n+3, 6n+4, 6n+5,我们只需要判断 6n+1 与 6n+5 是否是质数即可。而判断某个数m是否是质数,最基本的方法就是对 2 到 m-1 之间的数除 m,如果有一个数能够整除 m,则 m 就不是质数。判断 m 是否是质数还可以进一步改进,只需要对 2 到根号√m之间的数除 m 就可以。继续优化,其实只用 2 到√m之间的质数去除即可。上面生成大质数是很基础的方法,效率比较低,一般会采用更快的方式,比如随机生成一个 nbits 位的奇数 p,然后从 p 开始遍历之后的奇数,并通过Miller–Rabin 质数判定算法对遍历到的数字进行质数判定,如果是质数,即可返回(当然,该算法有一定的误判率,不过在判定次数设置够大的情况下,误判率基本可以忽略)。


       2.公钥指数的选取
       公钥指数是可以随意选取的,但是为了提高RSA的加密速度实际使用中公钥指数最长用的三个值是3、17、65537(=2^16+1,65537的二进制表示中只有两个1,所以需要17次乘法来实现指数运算)。PEM建议用3,PKCS#1建议用3或65537,X.509建议用65537。这样选取主要是为了提高加密或签名验证的性能,因为3、17或65537分别只需要2或17次模乘运算,而一个随机选择的e(假设n是1024-bit)则大约需要1000次模乘运算。这种方法刻意把公钥指数选的小一点,其对应私钥指数就会很大,这么做的目的是节约公钥运算的时间。因为正常使用中都是用公钥加密,所以需要节约大部分人的时间,而极少部分人也会选用私钥解密,那么就只能少数服从多数了。

在选用公钥指数时,人们普遍会认为3和17没有65537安全。然而这种想法并没有合理的依据。实际上采用这三个值中的任何一个都不存在安全问题。前提是使用正确的填充方案。


       3.RSA公私钥生成流程


       (1)选择两个不同的大素数p和q;
       (2)计算公共模数(n=pq)和欧拉数(eular=(p-1)(q-1));
       (3)选择公钥指数e;
       (4)计算inverse(d);

       (5)生成公钥、私钥。




上一篇:凌科芯安入驻抖音和微信视频号通知 下一篇:智能门锁应用芯片——LKT4202UGM