RSA加密

简介:

RSA背景

在1976年以前,传统的加解密过程是:

1、A采用某种手段对数据进行加密。

2、数据传输到B的手中。

3、B逆向的实施A加密采用的步骤。

4、数据被还原。

这就是所谓的对称加密。

解密和加密的互为彼此的逆过程。加密的人必定知道解密的手段。解密的人也必定知道加密的手段。

这种加解密手段的最大特点就是对称(易于操作),但这也正是它的最大缺点。因为加密方,必须将加密规则告知解密方。

这就造成两个问题:

1、加解密规则定期就要更新,如何将加解密规则顺利的告诉对方。

2、如何安全的保存加解密规则。因为只要有一方将加解密规则泄露。那么这种加密手段就可以说被破解了。

基于此,在1976年由两位美国计算机科学家提出了一种全新的思路("Diffie-Hellman密钥交换算法"),即采用公钥-私钥对的形式进行加解密。

1、解密方生成一对密钥:公钥-私钥对。两者不存在互相推导出彼此的可能。

2、公钥随普通网络到达加密方,私钥则始终保留在解密者手中。

3、加密方使用公钥将文件转为密文

4、将密文传输给解密方。

5、解密方使用私钥将密文转为明文,完成解密。

由于公钥和私钥在逻辑上无法互相推算出彼此。这样只要私钥不被泄露,那么密文就不会解密。基于此对称加密的第一个问题的风险被解决,第二个问题的风险被缩小了一半。

受这种思路的启发,在次年,也就是1977年,由三位数学家(Rivest、Shamir 和 Adleman )联合发表了RSA算法,算法名称的来源是三位科学家的首字母的和。在随后的几十年,RSA加密算法,在密码领域中大放异彩,成为非对称加密的代表加密算法。并且随着密钥长度的不断增加,以当下的计算机运算水平,是不可能在有限的时间下,暴力破解出密钥,而攻破该算法的。

RSA加密算法的实现逻辑

在RSA算法中,需要存在五个重要的数字元素:

  p、q:这是随机选取的两个不相等质数

  n:n=p*q,也就是p和q的乘积

  φ(n):φ(n) = (p-1)(q-1) ,也就是p-1和q-1的乘积

  e:随机选取一个和φ(n)互质的正整数。并且保证 e < φ(n)

d:根据ed ≡ 1 (mod φ(n)),计算出对于φ(n)的模反元素d

ed ≡ 1 (mod φ(n)) 的含义是,ed整除φ(n)之后,余数为1。

也就是ed=k*φ(n)+1

可以看作

ed=φ(n)x+1最终利用辗转相除法(看了一下网上的推导逻辑,觉得纯数学领域了,纯记住意义不大),可以计算出一组满足的解(d,x)。

这样(n,e)是公钥,(n,d)是私钥。

由于e,d的推导是依赖的φ(n)的,而φ(n)的值来自于p、q。p、q尽管是随机取得的,但是可以由n因式分解而成。因此n的因式分解速度就成为整个解密的瓶颈。n的因式分解换言之,类似于判断n是否是质数,目前除去不断的暴力尝试,并没有好的办法。目前已知的最大分解数目的量级是10^232,占768bit位,所以一旦n突破了768位,就可以说很难破解了。(但是据说量子计算机非常适合于计算因式分解,可惜现在还是雏形)

知道了,公钥和私钥的生成后。来看下公钥私钥是如何使用的:

1、将原始信息转化为数字:无论是ascii码值,还是Unicode码,或者是其他base64转码等等,生成数字序列之后。依次循环按照下文进行加密:

公钥(n,e)、原文m

m^e ≡ c (mod n)

换言之c等于m^e除以n的余数

也就是计算出密文c

2、将密文发送给解密者,解密者依次按照下文进行还原

c^d ≡ m (mod n)公式

换言之m等于c^d除以n的余数

反向求出m即为明文

证明过程这里就忽略了,有兴趣的可以看下阮一峰写的RSA加密博客。里边的算式推理比较严谨。

此外有一点需要说明的是,在公钥加密的过程中,需要m小于n,如果在加密的过程中,发现有元素比公钥的n还要大,则需要将原文进行切割成更小的元素,然后再进行加密。

其它

另外最近流行面非常广的病毒“永恒之蓝”,始于欧洲,通过网络传播了半个世界的勒索病毒,其核心的思路就是将RSA公钥传播到本机,接着用RSA公钥加密本地文件。使本地文件不可被正常使用,进而勒索机主。待勒索成功后,只要将私钥文件再发送到本机对文件进行解密即可。思路简单,但是非常有效,难以破解,每台机器的私钥文件也几乎不会相同。

本文转自帅气的头头博客51CTO博客,原文链接http://blog.51cto.com/12902932/1926487如需转载请自行联系原作者

sshpp
相关文章
如何生成RSA,RSA2密钥
密钥生成或如何使用(创建应用):[url]https://openclub.alipay.com/read.php?tid=1606&fid=72[/url] 1.密钥生成工具下载:[url]https://docs.
1454 1
|
3月前
|
算法 Java 数据安全/隐私保护
RSA 加解密 1024 位 & 2048 位
RSA 加解密 1024 位 & 2048 位
55 0
|
4月前
|
存储 算法 安全
C++ CryptoPP使用RSA加解密
Crypto++ (CryptoPP) 是一个用于密码学和加密的 C++ 库。它是一个开源项目,提供了大量的密码学算法和功能,包括对称加密、非对称加密、哈希函数、消息认证码 (MAC)、数字签名等。Crypto++ 的目标是提供高性能和可靠的密码学工具,以满足软件开发中对安全性的需求。RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,由三位密码学家Ron Rivest、Adi Shamir和Leonard Adleman于1977年共同提出。RSA算法被广泛应用于信息安全领域,特别是在数字签名和密钥交换等场景中。
96 0
C++ CryptoPP使用RSA加解密
|
存储 编解码 算法
RSA加密/解密
RSA加密算法是一种可逆的非对称加密算法,即RSA加密时候用的密钥(公钥)和RSA解密时用的密钥(私钥)不是同一把。基本原理是将两个很大的质数相乘很容易得到乘积,但是该乘积分解质因数却很困难。RSA算法被广泛的用于加密解密和RSA签名/验证等领域。
485 0
|
数据安全/隐私保护
|
算法 Linux 数据安全/隐私保护
RSA加密算法
RSA加密算法
161 0
RSA加密算法
|
数据安全/隐私保护
RSA对称加密
RSA对称加密
如何生成RSA2密钥
密钥文件说明:    1、rsa_private_key.pem:原始私钥(又称pkcs1私钥),适用于非Java开发语言;  2、rsa_private_key_pkcs8.pem:pkcs8私钥,适用于Java开发语言;  3、rsa_public_key.pem:商户公钥,需上传至应用中加签方式的应用公钥位置。
1938 0
RSA,RSA2密钥和MD5说明
说明:   现在关于RSA,RSA2,DSA,MD5,AES加密原理这里就不说了,网上已经有很完善的资料可以供我们了解。   下面说说在集成支付宝接口常用的RSA2(强烈推荐使用!!!),RSA,MD5(不推荐使用) 签名方式使用优先级   RSA2>RSA>MD5 支付宝接口签名支持表     注:老板wap支付密钥相关产品已经下架大家无需关注 常见问题:   1.
1863 0
|
JSON 移动开发 Java
RSA 非对称加密【转】
演示代码:https://pan.baidu.com/s/10rfSUUDEEHvCDEYH0oEVCw   Base64工具类,可以让rsa编码的乱码变成一串字符序列 1 package com.
1361 0