RSA 这俩世纪最重要的算法之一

开发 开发工具 算法
RSA 是一种基于大数因式分解为保证的非对称加密算法,广泛应用在数字签名、数据加密等领域,是第一个同时能够数据签名以及数据加密的算法。

 Diffie–Hellman加密算法的劣势

[[225219]]

上一篇文章我们聊到 Diffie–Hellman key exchange 这个算法。(密钥交换有点不安全),虽然可以安全地交换密钥从而使用 AES,DES 等对称加密算法进行加密,但是却有一个天大的问题。就是他娘的,跟一个人通讯就要保存一个密钥,跟一百个人通讯就要保存一百个密钥,A 迟早会崩溃。

密钥崩溃中

RSA 算法的来历

所以科学家就思考,能不能减少密钥的个数呢??这时候大佬就想到了,街头上的邮筒。

邮筒是一个公开的地方,所有人都可以往里面投递信件(传递信息),但是只有拥有邮筒的邮筒管理员才能打开这个邮筒进行信件的揽收(信息获取)。

虽然这个例子举得不是很恰当啊。但是是大概是这么一个意思,就是能不能将一个公开的加密的密钥分发给其他人,其他人用这个密钥进行加密,而只有拥有私钥的人才能进行解密呢?

来来来 RSA 算法了解一下。

RSA

RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。

但是呢,其实 RSA 算法并不是1977年被发明的,早在1973年,英国国家通信总局的数学家 Clifford Cocks 就发现了类似的算法,他的研究一被发现,立马被列为绝密,直到1998年才得以公诸于世。

RSA应用

说 RSA 加密算法是上世纪和本世纪最重要的算法之一绝不为过,RSA 是一种基于大数因式分解为保证的非对称加密算法,广泛应用在数字签名、数据加密等领域,是***个同时能够数据签名以及数据加密的算法。所以其实公钥和私钥是一个相对的概念,大家不要纠结了,这个算法是双向的,用公钥加密的数据,只能用私钥解密。用私钥加密的数据,只能用公钥解密。这样一来一回呢,公钥加密就的数据传输的应用就变成了加密(加密在不安全信道中的数据传输),私钥加密的数据应用就变成了数据签名(检验某个数据是不是真的来自A)。

RSA的工作过程

好了,为了表达我是真的自己搞了一遍,证明过程了解一下。

算法分为五步。

1、选择 p、q两个比较大的质数

2、令n = p * q。取 φ(n)  (欧拉函数自行度娘),

3、取 e ∈ 1 < e < φ(n)  ,( n , e )为公钥对

4、令 ed mod φ(n)  = 1,取得d,( n , d ) 为私钥对。

5、销毁 p、q。密文 = 明文 ^ e mod n    ,   明文 = 密文 ^ d mod n

嗯,算法就是这么简单。但是其实可以很简单证明。

(明文 ^ e mod n)^d mod n = (明文 ^ d mod n)^e mod n

RSA如何保证安全?

如何破译?算法如何保证安全?

我们可以看到,经过上面的过程,出现了  p、q、n、φ(n)、e、d 这么多数字。那么如何破解d这个私钥呢??

step1:e*d mod φ(n) = 1。

如果知道了φ(n),而e又是公开的,那么d就被解密了。

step2:φ(n) =  φ(p * q)  =  φ(p) * φ(q) = (p-1)(q-1)

好如果知道了 pq,那么φ(n)也是可以计算出来的。

step3:如何知道p、q呢?n = p * q。

将公开数据 n 进行因式分解就可以得到 p、q了。但是现在大数因式分解都是一个世界大难题。所以RSA只要密钥不泄露,那么信息就是安全的。

RSA为什么可以被加解密?

下面证明一下为什么上边的算法可以进行加解密。假设明文为 m(message),密文为 c (crypted)。

  1. 加密过程 
  2.  
  3. c = m ^ e   mod  n 
  4.  
  5. 解密过程: 
  6.  
  7. m  
  8.  
  9. = c ^ d   mod n(代入c) 
  10.  
  11. = (m ^ e mod n)^ d   mod  n(进行模计算变换) 
  12.  
  13. = m ^ (e * d)   mod  n 
  14.  
  15. ∵ e * d mod φ(n) = 1 
  16.  
  17. ∴e * d = k * φ(n) + 1 (k为整数) 
  18.  
  19. ∴ 
  20.  
  21. m  
  22.  
  23. = m ^ (k * φ(n) + 1)   mod  n 
  24.  
  25. = m ^ (k * φ(n)) * m   mod n 
  26.  
  27. 若m与n互质,那么m ^ (k * φ(n))  mod n = 1  (欧拉公式) 

那么上式子 可得直接等于 m。原题得证。RSA 原始论文也只讨论了m与n互质的情况,但是阮一峰老师还证明了另外一种情况,就是 m与n 如果不互质呢??这种情况我上面也证明了,感兴趣的小伙可以了解一下。

【本文为51CTO专栏作者“大蕉”的原创稿件,转载请通过作者微信公众号“一名叫大蕉的程序员”获取授权】

戳这里,看该作者更多好文

责任编辑:武晓燕 来源: 51CTO专栏
相关推荐

2013-02-26 17:20:40

2013-06-03 09:36:24

21世纪代码写代码

2013-05-09 14:30:37

华为任正非企业网络安全

2021-01-12 14:37:09

开发科学写作

2021-08-09 14:32:13

戴尔

2013-08-28 15:12:13

应用图标应用商店优化苹果AppStore

2021-05-18 15:13:23

鸿蒙HarmonyOS应用

2010-03-16 11:03:00

计算机鼻祖物理学著作

2018-05-21 21:04:07

数据科学家算法统计模型

2023-12-31 13:05:19

pytorch深度学习框架

2023-11-06 18:06:00

Docker容器

2015-03-17 10:48:54

信息安全

2018-01-24 18:30:53

浏览器Firefox命令行

2015-10-08 16:23:17

2019-09-21 21:15:36

MapReduce大数据分布式

2013-02-19 10:12:59

2009-04-17 09:59:48

IT招聘求职技术

2017-11-01 14:23:14

DBAPostgreSQL 新亮点

2015-06-15 09:48:47

Google开源

2020-05-15 20:45:46

工业物联网IIOT物联网
点赞
收藏

51CTO技术栈公众号