RSA正确性证明

RSA正确性所需要的数论知识

  1. 欧拉函数
    φ(n)表示:小于n的正整数中与n互质的数的数目。(互质表示公因数为1)
    若 p 是素数,则 φ§ = p - 1
    所以如果n能写作两个不同质数 p 与 q 的乘积,n=pq可以推出
    φ(n)=φ(p
    q)=φ§φ(q)=(p-1)(q-1)

  2. 欧拉公式
    如果a和n互素,即gcd(a,n)=1,则a^φ(n) ≡ 1 mod n

  3. 同余式

两个数A,B除以C余数相同,我们可以写成
23 ≡ 65(mod 7)
23 ≡ 2(mod 7)
65 ≡ 2(mod 7)

准确说:如果a=b+km的话,a ≡ b(mod m)

同余式的性质:
1)若a ≡ b(mod m)、c ≡ d(mod m),则a+c ≡ b+d(mod m)
2)若a ≡ b(mod m)、c ≡ d(mod m),则ac ≡ bd(mod m)

  1. 乘法逆元
    如果ab ≡ 1(mod m),则称a和b为关于m互为乘法逆元。
    已知a求b的方法:
    因为ab ≡ 1(mod m),所以不妨设ab+mk=1,其中a和m为已知数。
    可以利用扩展欧几里得算法,可以在多项式时间内,计算出来一个乘法逆元b。
    (事实上,b的解不唯一,这里只是求出了一个b。)

参数设置

1)p和q大素数,n=pq φ(n)=(p-1)(q-1)
选取e,1<e<φ(n),gcd(e,φ(n))=1
d
e ≡ 1(mod φ(n))
2)由于e和φ(n)互素,所以根据欧拉公式,一定存在乘法逆元(如a^(φ(n)-1))

公钥:{e,n}
私钥:{d,n}

RSA加密解密过程

将明文比特串分组,使得每个分组对应的十进制数 小于n ,即分组长度小于 log2n 。
加密: c ≡ me mod n
解密:m ≡ cd mod n

RSA正确性证明

m ≡ cd mod n = (me)d mod n
≡ med mod n ≡ mkφ(n)+1 mod n
(e*d ≡1 mod φ(n) ed = kφ(n)+1 )
所以只需要证明 m ≡ mkφ(n)+1 mod n

1)如果m和n互素,且知m<n,m mod n = m
根据欧拉公式
mφ(n) ≡ 1 mod n
根据同余式的性质,
mkφ(n) ≡ 1 mod n
m mod n = m
mkφ(n)+1 ≡ m mod n

2)如果m和n不互素,因为m<n,且n只有两个因子,p和q,所以m=ap或bq
不妨设m=ap,gcd(m,q)=1
即mφ(q) ≡ 1 mod q
mkφ(q) ≡ 1k mod q
(mkφ(q) )φ§ ≡ 1φ§ mod q
此处看不清的是欧拉(p),不知道为什么csdn会把他变成φ§
mkφ(n) ≡ 1 mod q
即mkφ(n) = sq +1
两边同×m
mkφ(n)+1 =s
q * ap+m
=san+m
mkφ(n)+1 mod n ≡ m (mod n)

所以无论m和n互素不互素,都可以得到mkφ(n)+1 mod n ≡ m (mod n)
即得证。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
RSA正确性证明RSA算法的正确性基于数论中的两个重要结论:欧拉定理和费马小定理。 欧拉定理:对于任何正整数a、n,如果a和n互质,那么a的欧拉函数φ(n)满足a^φ(n)≡1(mod n)。 费马小定理:对于任何素数p和任何整数a,a^(p-1) ≡ 1 (mod p)。 RSA算法的正确性可以通过以下步骤进行证明: 1. 选择两个大素数p和q,并计算它们的乘积n=p*q。 2. 计算n的欧拉函数φ(n)=(p-1)*(q-1)。 3. 找到一个整数e,使得e与φ(n)互质,即gcd(e,φ(n))=1。 4. 计算e的模反元素d,使得e*d ≡ 1 (mod φ(n))。 5. 公钥为(n,e),私钥为(n,d)。 加密过程:将明文m进行加密,得到密文c:c ≡ m^e (mod n)。 解密过程:将密文c进行解密,得到明文m:m ≡ c^d (mod n)。 正确性证明:根据费马小定理,c^d ≡ (m^e)^d ≡ m^(e*d) ≡ m^(k*φ(n)+1) ≡ m * m^(k*φ(n)) (mod n),其中k为任意整数。由于m和n互质,因此根据欧拉定理得到m^φ(n) ≡ 1 (mod n),所以m^(k*φ(n)) ≡ 1 (mod n)。因此,c^d ≡ m (mod n),即RSA算法是正确的。 RSA主要的攻击手段: 1. 小质数攻击:如果使用的素数p或q太小,攻击者可以通过分解n来获得私钥。因此,RSA算法要求使用足够大的素数。 2. 常模攻击:攻击者可以通过分析加密后密文的模数n来获得私钥信息。为了防止此类攻击,RSA算法需要对明文进行填充。 3. 选择明文攻击:如果加密过程中使用相同的明文加密多次,攻击者可以通过观察密文之间的差异来获得私钥。为了防止此类攻击,RSA算法需要使用随机填充和随机数。 4. 时间攻击:攻击者可以通过观察加密或解密过程中的时间来破解私钥。为了防止此类攻击,RSA算法需要使用恒定时间算法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值