RSA加密

算法:

  1. 选择两个素数p,q
  2. 计算n=p×q
  3. 计算λ(n) = lcm(λ(p),λ(q)) = lcm(p-1,q-1)
  4. 选择e满足:1<e<λ(n) 且  gcd(e, λ(n)) = 1,即e和λ(n)互质
  5. 计算d满足:d×e≡1(mod λ(n))

公钥:n 和 e

私钥:d

加密:

Alice想要向Bob发送信息M

  1. 获取Bob的公钥n和e
  2. 将信息M分割转化为若干整数
  3. 对每一个整数m,计算密文c满足:c≡m^{e} (mod n)
  4. 将密文发送给Bob

解密:

  1. 用自己的私钥d对每一段密文c计算明文m满足:m≡c^{d} (mod n)
  2. 拼接明文获取信息

示例:

计算密钥公钥:

  1. 取p=61,q=53
  2. n=61×53=3233
  3. λ(3233)=lcm(λ(61),λ(53))=lcm(60,52)=780
  4. 取e=17
  5. 计算d=413
  6. 密钥d:413,公钥(n,e)=(3233,17)

加密:

  1. 明文取m=65
  2. 计算c满足:c≡m^{e} (mod n) 得c=2790

解密:

  1. 有密文c=2790
  2. 计算m满足:m≡c^{d} (mod n) m=65

原理:

证明基于费马小定理:对任意的整数a和不能整除a的素数p有,a^{p-1} ≡ 1 (mod p)

解密时:m≡c^{d}(m^{e})^{d} (mod n) 

只需证明:{\displaystyle (m^{e})^{d}\equiv m{\pmod {pq}}}

只需证明:{\displaystyle (m^{e})^{d}\equiv m{\pmod {q}}}{\displaystyle (m^{e})^{d}\equiv m{\pmod {p}}}同时成立

对于所有的整数m,由于p和q是不同的素数,e和d是满足ed ≡ 1 (mod λ(pq))的正整数,λ(pq) = lcm(p − 1, q − 1)可以被p-1和q-1整除,有

{\displaystyle ed-1=h(p-1)=k(q-1)}

其中h和k是非负整数

{\displaystyle m^{ed}=m^{ed-1}m=m^{h(p-1)}m=(m^{p-1})^{h}m\equiv 1^{h}m\equiv m{\pmod {p}}}

利用费马小定理将m^{p-1} (mod p) = 1.

同理

{\displaystyle m^{ed}=m^{ed-1}m=m^{k(q-1)}m=(m^{q-1})^{k}m\equiv 1^{k}m\equiv m{\pmod {q}}}

得证

破解:

破解者将有公钥(n,e)和密文c

因为d×e≡1 (mod n)将得到多个d,而不确定到底是哪一个

目前最有效的方式是对整数n进行分解,分解为两个素因子p和q,再进行标准的流程进行解密

目前没有找到在常规计算机上多项式时间的分解算法,但是也没有证明这样的算法是不存在的

翻译自:

https://en.wikipedia.org/wiki/RSA_(cryptosystem)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值