上学期密码学的课程,陈老师讲了一个很有趣的问题,在这里记录一下。
题目可以描述为:
证明RSA加密明文m取值范围Zn∗,在mod n运算下:
前置知识
RSA原理
首先,RSA的加密解密原理描述如下:
- 密钥生成:
- 选取两个大素数p和q,计算n=pq。
- 选择公钥指数 e,使得 1<e<φ(n),gcd(e,φ(n))=1,其中φ(n)为n的欧拉函数:φ(n)=(p−1)(q−1)
- 计算e的逆元d为私钥:d≡e−1(modφ(n))
- 公钥为(n,e),私钥为d
- 加密:
给定明文m ,满足m∈{m:1≤m<n,gcd(m,n)=1},使用公钥(e,n)进行加密,
C=memodn
- 解密:
接收密文C后,使用公钥和私钥(d,n)进行解密:
m=Cdmodn
解密原理证明:
Cd=(me)d=med mod n
其中, ed≡1modφ(n),所以有ed=kφ(n)+1
因为m,n互素时,根据欧拉定理有:
mφ(n)≡1(modn)
所以
Cd=med=mkφ(n)+1=m⋅1=mmodn
证明mn互素的条件可忽略
消息m取值范围为小于n且与n互素的整数,
表示为Zn∗={m:1≤m<n,gcd(m,n)=1}
但小于n的m与n不互素的概率很低,所以可以忽略,
证明:
小于n且与n互素的数为φ(n),所以m与n互素的概率为:
nφ(n)=pq(p−1)(q−1)
几乎为1。
注意,这里的Zn∗就是我们下面要讨论的集合。
正题
下面来解释,为什么m取值的群Zn∗在modn运算下:
(1)证明集合是群,就是验证四个条件,这个比较容易,简单描述:
- 封闭性,∀a,b∈Zn∗,有gcd(a,n)=gcd(b,n)=1,则gcd(ab,n)=1,所以元素ab在群中,运算封闭
- 单位元,是1
- 结合律,与普通模乘证明相同
- 存在逆元,∀a∈Zn∗,∃b∈Zn∗,s.t.ab=1modn
- 显然满足交换律,所以也是阿贝尔群
(2)要证明群不是循环群,首先要明白循环群的定义,循环群存在一个生成元g,群中所有元素都可以由g乘方生成。
再说明两个定义:
- 群的阶,群中元素的个数,记为ord(G)
- 元素的阶,元素a使得ak=e(单位元)的k就是元素的阶,记为ord(a)
任何群都满足:
∀a∈G,ord(a)≤ord(G)
当存在元素g,使得ord(g)=ord(G)时,群为循环群,g为生成元。
所以,证明这个问题,就是要找群的阶与群元素的阶的关系。
因为Zn∗是与n互素元素构成的群,所以ord(G)=φ(n)=(p−1)(q−1),
任意元素m∈Zn∗:
因为m与n,互素,n=pq
所以m与p,q互素,根据欧拉定理,有
mφ(p)=mp−1≡1(modp)
mφ(q)=mq−1≡1(modq)
到这一步,我们的思路是将等号左边放缩为相同的数,从而可以使用中国剩余定理,得到一个可以表示m的阶的等式。
记p−1与q−1的最小公倍数lcm(p−1,q−1)=k,由于p和q为大素数,奇数,所以p−1与q−1为偶数,必然有小于(p−1)(q−1)的最小公倍数,即k<(p−1)(q−1),这里的小于号是严格小于,所以
将上面两式模数放大,等式右边依然是1:
mk≡1(modp)
mk≡1(modq)
根据中国剩余定理,可以得到
mk≡1(modn)
即ord(m)≤k<(p−1)(q−1)=ord(G),
所以,当p,q是大整数时,Zn∗一定不是循环群。