[关闭]
@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即可。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注