RSA算法

备注: 本文转载自阮一峰老师的博客,仅为自己补充知识点使用,如有侵权请联系本人,我会尽快删除;

背景

RSA来源于三位数学家名字的首字母缩写,是1978年提出的一种常见的非对称加密算法;RSA算法原理依赖于大数分解,其复杂度依赖于密钥的长度;RSA算法的破解成本比较高,需要依赖于穷举攻击;但是随着量子计算等科技的发展,破解RSA的难度在被逐渐降低;当然,对于一般应用只要使用相对较长的密钥,安全性相对还是很高的。

数学基础
  1. 欧拉函数
    (1) φ ( n ) = 1 , i f n = 1 ; φ(n)=1,if n=1; φ(n)=1ifn=1
    (2) φ ( n ) = n − 1 , i f n 为 质 数 ; φ(n)=n-1,if n为质数; φ(n)=n1ifn
    (3)φ(n) = φ(pk) = pk - pk-1, if n可以表示为pk
    (4) φ ( n ) = φ ( p 1 p 2 ) = φ ( p 1 ) φ ( p 2 ) , i f n 可 以 分 解 为 两 个 互 质 数 之 积 ; φ(n) = φ(p1p2) = φ(p1)φ(p2) ,if n可以分解为两个互质数之积; φ(n)=φ(p1p2)=φ(p1)φ(p2)ifn
    (5)φ(n) = φ(p1k1p2k2…prkr) = (p1k1 - p1k1-1)(p2k2 - p2k2-1)…(prkr - prkr-1) = p1k1p2k2…p1k1p2k2(1-p1k1)(1-p2k2)…(1-prkr) = n(1-p1k1)(1-p2k2)…(1-prkr),任意一个大于1的正整数都可以表示为一系列质数的乘积;

  2. 欧拉定理
    a φ ( n ) ≡ 1 ( m o d n ) a^{φ(n)} ≡ 1 (mod n) aφ(n)1(modn),若a和n互质;

  3. 费马小定理
    a p − 1 ≡ 1 ( m o d p ) a^{p-1 } ≡ 1 (mod p) ap11(modp),若a和p互质;是欧拉定理的特例;

  4. 模反元素
    a b ≡ 1 ( m o d n ) , 若 a 与 n 互 质 , 可 以 找 到 一 个 b 满 足 以 上 条 件 ab ≡ 1 (mod n) ,若a与n互质,可以找到一个b满足以上条件 ab1(modn)anb
    根据欧拉定理 a φ ( n ) = a ∗ a φ ( n − 1 ) ≡ 1 ( m o d n ) a^{φ(n) } = a * a^{φ(n-1) }≡ 1 (mod n) aφ(n)=aaφ(n1)1(modn),故a^{φ(n-1) }一定是其中的一个模反元素;

密钥生成
  1. 随机选择两个不相等的质数p和q,假设p=61, q=53;
  2. 计算p和q的乘积n, n对应的二进制数的位数即密钥的长度;n=61*53 = 3233, 对应二进制为110010100001,密钥长度为12;
  3. 计算n的欧拉函数Φ(n),根据欧拉函数第二条和第三条法则可以得到:
    φ ( n ) = φ ( p ∗ q ) = φ ( n ) ∗ φ ( n ) = ( p − 1 ) ( q − 1 ) = 3120 φ(n) = φ(p*q) = φ(n)* φ(n) = (p-1)(q-1) = 3120 φ(n)=φ(pq)=φ(n)φ(n)=(p1)(q1)=3120
  4. 随机选择一个与Φ(n)互质的整数e,且e满足条件1<e<φ(n);假设选择e=17;
  5. 计算e对φ(n)的模反元素d;
    根据模反元素的计算方法,可以得到
    e d ≡ 1 ( m o d φ ( n ) ) = &gt; e d − 1 = k φ ( n ) = &gt; d = ( k Φ ( n ) + 1 ) / e ed ≡ 1 (mod φ(n)) =&gt; ed - 1 = kφ(n) =&gt; d = (kΦ(n) + 1) / e ed1(modφ(n))=>ed1=kφ(n)=>d=(kΦ(n)+1)/e
    取k=15,得到其中一个解d=2753;
  6. 将n和e封装为公钥(3233,17),n和d封装成私钥(3233, 2753);
算法可靠性

RSA密钥生成步骤涉及到六个参数p、q、n、φ(n) 、e、d,公钥n和e是公布的,私钥n和d是保密的;因此如果d泄露,那么私钥完全泄露;否则算法的安全性与对n进行大数分解的难度相关;

加密和解密
  1. 使用公钥(n, e)加密
    假设待加密信息为m,使用公钥(n, e)对m进行加密;其中,m必须是小于n的整数(字符串取对应的ASCII和Unicode);加密后信息c满足以下条件:
    m e ≡ c ( m o d n ) m^{e} ≡ c (mod n) mec(modn)
    假定公钥是(3233, 17),加密信息m=65,可以得到加密后信息为c=2790

  2. 使用私钥(n, d)进行解密,得到原始信息m;
    c d ≡ m ( m o d n ) c^{d} ≡ m (mod n) cdm(modn)
    私钥为(3233, 2753),已加密信息为c=2790 ,可以得到原始信息m=65;

参考文献:
  1. http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html
  2. http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html
  3. https://baike.baidu.com/item/舒尔算法/2469347?fromtitle=秀尔算法&fromid=5049385
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值