@RunZhi
2020-09-17T16:44:39.000000Z
字数 1240
阅读 994
密码学
计算机安全学作业
在实现公钥密码学协议的过程中,常常需要用到一个素数阶的群。本文讲述如何高效快速生成一个素数阶群。(不需要穷巨遍历寻找生成元)
以Elgamal加密为例子:要保证ELGamal加密的可证明安全性,必须要求其在素数阶群上运行。因此在实现ELGamal协议的时候,需要生成一个素数阶的群。
生成素数阶群的时候,我们常常需要用到,其中为素数。注意,的阶并不是,而是。我们可以从某些特殊的中提取出素数阶的子群。先看以下定理:
定理1:拉格朗日定理
设为两个群,若是的子群,则可被整除。
上面的定理给了我们一个提示:由于(必然是个偶数),那么中的子群的阶必然会是的某个因子。我们可以使有一定的结构使得它有个素数子群,以下定理阐述了这种“结构”:
定理2:
设,其中为素数.为某个整数(使满足前面的条件)那么:
是一个的子群并且它的阶为.引理
是一个素数,则有生成元.定理2证明 :
显然是一个的子群。设为的生成元,显然(定义)
构造无穷序列(显然该序列所构成的集合就是)假设的order是,则的阶为.(why?因为上面的无穷序列构成的集合即,再由order的定义,可知该序列的周期为,即只有q个不同的元素)。同时,这也说明是的生成元.
现证明的order确实是。先设为的order。
已知,由阶的最小性,有。
由于是素数,等于或。显然,因为如果,那么就是的order,即,与题设矛盾。
以上定理阐述了,如果我们令为满足的素数。那么上述的群是一个阶群。
如何找出这个子群的生成元呢?只要取一个,然后计算。只要,那么必然是的生成元(因为是素数阶群)。
总结步骤: 如何生成一个素数阶群?
1. 给定输入参数,生成两个n比特的素数。要求满足.(对应定理2的)
2. 取且
3. 计算.
4. 如果等于,返回步骤2;否则输出
小思考题:
0: 如何从该群中随机抽取一个元素?
1: 该群的乘法如何做?给定,和的乘法运算应该是,还是?为什么?
2: 论证:当是奇数时,取2即可。