RSA学习总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RSA学习总结相关的知识,希望对你有一定的参考价值。

一、RSA与公钥加密系统的起源与影响。

为了更好地突出公钥加密系统相对私钥加密系统的优势,让我们从这两个问题开始:

这个世界上如果没有公钥加密系统会怎么样呢?全用私钥加密系统会出现什么问题呢?

首先,私钥密码系统中的密码,加密解密之间是存在共享性的,也就是说,会加密就能做到会解密,会解密也就能做到会加密。

如果私钥密码系统用来做数字签名,会发生什么呢?你只要告诉了别人验证你的数字签名的正确性方法(解密),就同时告诉了他们伪造这个数字签名的方法(加密)。瞬间爆炸Orz。

其次,私钥加密系统需要有一次绝对保密的初始化过程。双方需要保密地交流一次约定加密方式。

在以往,这个过程都通过线下保证了保密。比如特工在出发前就跟总部约定好加密方式。

互联网时代这就出现问题了。如果你开了一个网站,需要跟每个用户进行保密交流。你很难跟每个用户都线下碰次头约定一下加密问题。可是如果交流全在网络上进行的话,双方约定加密方式的那几条信息本身用啥来加密呢。。。这就很尴尬了(?ω?)

1977年,罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)(膜一发图灵奖Orz)将大数因式分解的不对称性与对密码系统不对称性的需求联系起来,创造了第一个公钥加密系统,RSA算法。迄今为止,2048位的RSA秘钥仍是非常安全的,在全世界被广泛使用。

(这种关联的能力或许就是创造力的核心源泉之一吧,我想,RSA如同蒙拉丽莎的微笑,“独钓寒江雪”的意境,都是人类巅峰创造力的结晶)

 

二、RSA的分析。

先直接奉上RSA加密流程

找两个不相同的素数p,q.设n=pq

取d,e使de=1+k(p-1)(q-1)成立

对于原文M(一个01串),加密方式为C=M^e mod n,C即为密文

解密方式为 N=C^d mod n

最后有 N ≡ M mod n

实际操作时n公开,e,d公开一个, q,p保密

正确性证明

N=C^d=M^ed=M^(1+k(p-1)(q-1))=M*M^k(p-1)(q-1)

因为p,q都是素数,由费马小定理:M^(p-1)≡1 (mod p) ,M^(q-1)≡1 (mod p)

得C≡M(mod p)

费马小定理是欧拉定理的特例,考虑到后面的需要,在这里直接证明欧拉定理及欧拉函数的一些性质:

 

另外由于d,e是对称的,d可以用来解密e发来的消息也可以用来加密只给e看的消息。

即加密方式C也可以为C=M^d mod n,解密方式为 N=C^e mod n

 技术分享

三、密钥的生成

怎么找到一个足够大的素数呢?

我自己的第一反应是筛法。。可是马上意识到如果能从遍历找q,p就能遍历破p,q。其次如果要遍历找高达2048位的素数即使计算机运算速度亿亿次每秒,也足够算到地老天荒。(粗略估算了下结果是个高达几百位的数字,单位年)

从而遍历的办法是肯定不行的。但联想欧拉函数在n充分大的时候趋近于n/lnn(即n非常大的时候小于n的素数个数大约为n/lnn,该命题已被证明但我不会证),我们可以知道2048位的数中素数的密度并不算很小,几千分之一的样子。

如果有一个算法可以判断出一个数是不是素数,再猜个几千次,我们就能得到想要的2048位的素数了。

于是引出另一个神奇的算法:Miller-Rabin算法(又出现了一个图灵奖的名字Orz)

Miller-Rabin算法的思想起源于对费马小定理的逆定理的研究

啊好困了我要睡觉了。。。明天再补

 

以上是关于RSA学习总结的主要内容,如果未能解决你的问题,请参考以下文章

iOS逆向 -- 应用重签名学习 (实战总结)

《数据结构与面向对象程序设计》第5周学习总结

(*长期更新)软考网络工程师学习笔记一—RSA算法详解

加密方法---总结

信息安全技术RSA算法的研究及不同优化策略的比较

信息安全技术RSA算法的研究及不同优化策略的比较