RSA攻击之Rabin密码体制

Rabin密码体制

最近在做Jarvis OJ 上的hard RSA,谈到Rabin密码,就顺便研究了一番。

目录

  1. Rabin简介

  2. 二次剩余定理

  3. 欧拉准则

  4. Rabin的加密与解密

1.简介

在这里插入图片描述
Michael.O.Rabin是Rabin密码体制的创始人。

1931年出生于以色列,父亲是犹太人,自幼喜欢数学,二战时被迫从军,后来返回大学继续修学。毕业后因出色的成绩在各个大学当助教,后来在希伯来大学(犹太民族的第一所大学)当教授。

1959年和Dana Scott联合发表了一篇论文“有限自动机及其决策问题”,因为这篇论文他在1976年被授予图灵奖。后来他开始研究NP问题。

1975年与Gary Miller 一起发明了著名的Miller-Rabin素性测试算法。

1979年发明了Rabin密码体制,这是当时第一个其安全性被证明等价于整数分解的困难性的非对称密码。

1987年Rabin和Richard Karp发明了Rabin-Karp字串查找算法。Rabin后来的研究都集中于计算机安全方面,可以说他为计算机安全做出了极大的贡献。


2.二次剩余定理

简要定义:p是素数,a不是p的倍数且与一个平方数模p同余,则称a是模p的二次剩余,记作a∈QR。

例:22 ≡ 4 mod 13 ,a=4,p=13,称a是模13的二次剩余。不只有22,还有32,42

同理,我们把不等于0也不是模p的二次剩余的数称为非二次剩余。记作a∈NR.

雅可比符号/勒让德符号:前提是p为奇素数

( a p ) = { 1 , a ∈ Q R − 1 , a ∈ N R \left( \dfrac {a}{p}\right) =\begin{cases}1,a\in QR\\ -1,a\in NR\end{cases} (pa)={1,aQR1,aNR
小拓展:有个计算公式 ( a p ) ⋅ ( b p ) = ( a b p ) \left( \dfrac {a}{p}\right) \cdot \left( \dfrac {b}{p}\right) =\left( \dfrac {ab}{p}\right) (pa)(pb)=(pab)


3.欧拉准则

直接给出公式:设p为奇素数
a p − 1 2 ≡ ( a p ) m o d p a^{\dfrac {p-1}{2}}\equiv \left( \dfrac {a}{p}\right) modp a2p1(pa)modp
(上面是a的(p-1)/2次方)
证明该论断的方法和证明该准则的方法较像(都是通过费马小定理),因此下面只给出证明该准则的方法:

第一步:当a∈QR

存在b使得 b2≡a mod p
根据费马小定理可知:bp-1≡1 mod p
可得:
a p − 1 2 ≡ ( b 2 ) p − 1 2 ≡ b p − 1 ≡ 1 m o d p a^{\dfrac {p-1}{2}}\equiv \left( b^{2}\right) ^{\dfrac {p-1}{2}}\equiv b^{p-1}\equiv 1 modp a2p1(b2)2p1bp11modp
第二步:当a∈NR
同样使用费马小定理,知:ap-1≡1 mod p
分解后可得:ap-1-1=kp
即:
在这里插入图片描述
因为a∈NR,因此p一定不会整除于a(p-1)/2-1,所以

化简得:

Q.E.D.


4.Rabin的加密与解密

与RSA类似但这个函数不是单射,一个密文能解出4个明文。

取两个大素数p与q,使得p≡q≡3(mod 4)(保证为奇素数)
加密:c=m2(mod n)
解密:步骤相当复杂,以下为推理过程:
(偷懒可直接看最后的代码)
m2≡c mod n
相当于求解m2≡c mod p,m2≡c mod p
对于m2≡c mod p来说,c是模p 的二次剩余,

c p − 1 2 ≡ 1 m o d p c^{\frac{p-1}{2}}\equiv 1 mod p c2p11modp
代入得:

m 2 ≡ c ( m o d p ) ≡ c p − 1 2 ∗ c ( m o d p ) ≡ c p + 1 2 m o d p m^{2}\equiv c (modp)\equiv c^{\frac{p-1}{2}}*c(modp)\equiv c^{\frac{p+1}{2}} mod p m2c(modp)c2p1c(modp)c2p+1modp

开方得:

m 1 ≡ c p + 1 4 m o d p m1\equiv c^{\frac{p+1}{4}} mod p m1c4p+1modp(1)


m 2 ≡ ( p − c p + 1 4 ) m o d p m2\equiv (p-c^{\frac{p+1}{4}}) mod p m2(pc4p+1)modp(2)
此时m1,m2异号

对于m2≡c mod p同理可得:

m 3 ≡ c p + 1 4 m o d q m3\equiv c^{\frac{p+1}{4}} mod q m3c4p+1modq(3)

m 4 ≡ ( q − c p + 1 4 ) m o d q m4\equiv (q-c^{\frac{p+1}{4}}) mod q m4(qc4p+1)modq(4)
然后用四次中国剩余定理:
(1)与(3)
(1)与(4)
(2)与(3)
(2)与(4)
分别得到m1,m2,m3,m4
明文为四个里的其中一个。

下面是Jarvis OJ里hard RSA的python解密代码:

import gmpy2
n =0xc2636ae5c3d8e43ffb97ab09028f1aac6c0bf6cd3d70ebca281bffe97fbe30dd
p=319576316814478949870590164193048041239
q=275127860351348928173285174381581152299
d =0x1806799bd44ce649122b78b43060c786f8b77fb1593e0842da063ba0d8728bf1
e =2
c = int(open('flag.enc','rb').read().encode('hex'),16)

c1=pow(c,(p+1)/4,p)
c2=pow(c,(q+1)/4,q)
cp1=p-c1
cp2=q-c2
t1=gmpy2.invert(p,q)#p的模q逆元
t2=gmpy2.invert(q,p)#q的模p逆元

m1=(q*c1*t2+p*c2*t1)%n
m2=(q*c1*t2+p*cp2*t1)%n # or m2=n-m1
m3=(q*cp1*t2+p*c2*t1)%n
m4=(q*cp1*t2+p*cp2*t1)%n # or m4=n-m3

for i in(m1,m2,m3,m4):
    m = '%x' % i
    if len(m)%2==1:
        m='0'+m #padding
    print(m.decode('hex'))   
  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值