非对称加密算法-RSA算法

??加密算法分为对称加密算法和非对称加密算法,其中非对称加密算法作为计算机通信安全的基石,在保证数据安全方面起着重要的作用。而相对于对称加密算法的易理解性,非对称加密算法存在一定的难度。下面通过对RSA算法的剖析,让我们更好的理解非对称加密算法的原理。

一、对称加密算法和非对称加密算法

1、对称加密算法

??对称加密算法:加密和解密都使用同样规则(密钥)的算法。

??(1)、A选择某一种规则对信息进行加密;

??(2)、B使用同一规则(逆规则)对信息进行解密;

2、非对称加密算法

??非对称加密算法:加密和解密可以使用不同的规则,只要这两种规则之间存在某种对应关系即可。

??(1)、B根据算法生成两把密钥(公钥和私钥),其中私钥是保密的,公钥是公开的,供要与B通信的其它人使用;

??(2)、A从B处获取公钥,并用它来加密;

??(3)、B得到A加密后的信息,用私钥进行解密,完成通信;

二、RSA算法的数学基础

1、互质关系

??互质又称为互素,如果两个或两个以上的整数的最大公约数是 1,则称它们为互质。比如7和10,他们最大的公约数是1,所以他们互质。8和10最大的公约数是2,所以他们不是互质。并不是只有两个质数才能形成互质。
??根据互质关系,可以得出以下结论(后面欧拉函数会用到):

  • 两个不同的质数一定互质。例如,2与7、13与19。
  • 一个质数,另一个不为它的倍数,这两个数互质。例如,3与10、5与 26。
  • 1和任何一个自然数都互质。如1和9908。
  • 2的幂和任何一个奇数都互质。如32和75、256与315。
  • 相邻两个自然数互质。如15与16。
  • 相邻两个奇数互质。如49与51。

2、欧拉函数

??欧拉函数指的是对正整数n,求小于或等于n的正整数中与n互质的数的数目,记作φ(n)。比如1至10中,与10形成互质关系的有1,3,7,9,所以φ(10)=4。
??欧拉函数通用公式为(除n=1外,φ(1)=1):
\[
φ(n)=n(1-\frac{1}{p_1})(1-\frac{1}{p_2})......(1-\frac{1}{p_r})
\n={p_1}^{k_1}*{p_2}^{k_2}......{p_r}^{k_r},其中p_1、p_2......p_r为质数
\]
??比如φ(20)=8计算过程如下:
\[
φ(20)=φ(2^2\times5)=20(1-\frac{1}{2})(1-\frac{1}{5})=8
\]
??欧拉函数证明如下:

  • 当n=1时,φ(1) = 1

???因为1与任何数都构成互质关系,则 φ(1) = 1 。

  • 当n是质数,φ(n) =n-1

???因为质数与小于它的每一个数,都构成互质关系,则φ(n) =n-1。如φ(5)=5-1=4。

  • 当n是质数的某个次方,公式如下,其中p为质数,k为大于1的整数
    \[
    φ(p^k) =p^k(1-\frac{1}{p})
    \]
    因为质数的某个次方与除与质数的倍数外都形成互质关系,而质数的倍数1 * p、2 * p、3 * p、……、p^(k-1) * p,即有p^(k-1)个,则
    \[
    φ(p^k) =p^k-p^{k-1}=p^k(1-\frac{1}{p}),如φ(5^3)=5^3(1-\frac{1}{5})=100。
    \]
  • 当n可以分解成两个互质的整数之积,
    \[
    φ({p_1}\times{p_2})= φ(p_1)φ(p_2)
    \]
    该定理用到中国剩余定理即可证明,具体过程可参考其它文档。如φ(15)=φ(3 * 5)=φ(3) φ(5) =2 * 4 =8。
    根据以上推论,因为任意一个大于1的正整数,都可以写成一系列质数的积,可以推导出当n为大于1的整数时:
    \[
    n={p_1}^{k_1}{p_2}^{k_2}...{p_r}^{k_r}
    \]

    \[
    φ(n)=φ({p_1}^{k_1}{p_2}^{k_2}...{p_r}^{k_r})
    \]

    \[
    φ(n)=φ({p_1}^{k_1})φ({p_2}^{k_2})...φ({p_r}^{k_r})
    \]

    \[
    φ(n)={p_1}^{k_1}(1-\frac{1}{p_1}){p_2}^{k_2}(1-\frac{1}{p_2})...{p_r}^{k_r}(1-\frac{1}{p_r})
    \]

    \[
    φ(n)={p_1}^{k_1}{p_2}^{k_2}...{p_r}^{k_r}(1-\frac{1}{p_1})(1-\frac{1}{p_2})(1-\frac{1}{p_r})
    \]

    \[
    φ(n)=n(1-\frac{1}{p_1})(1-\frac{1}{p_2})...(1-\frac{1}{p_r})
    \]

    以上即为欧拉函数的通用计算公式。

3、欧拉定理

??欧拉定理也称费马-欧拉定理,指的是:如果两个正整数a和n互质,则n的欧拉函数 φ(n) 可以让下面的等式成立。
\[
a^{φ(n)}=1(mod\ n)
\]
??即a的φ(n)次方被n除的余数为1,或者说a的φ(n)次方减1,能被n整除。如7和5互质
\[
7^{φ(5)}-1=7^4-1=2401-1=2400,可以被5整除
\]

4、模反元素

??如果两个正整数a和n互质,那么一定可以找到整数b,使得 ab-1 被n整除,或者说ab被n除的余数是1。这时,b就叫做a的模反元素。证明如下:
\[
a^{φ(n)}=a\times a^{φ(n-1)} = 1(mod\ n),其中a^{φ(n-1)}就是a的模反元素
\]

三、RSA算法过程

1、生成密钥对(公钥和私钥)

  • 随机找两个质数a和b(a和b越大越安全),并计算他们的乘积n

    比如 a = 5 ,b = 11。计算他们的乘积 n = 5 * 11 = 55 ,转化为二进为 110111,该加密算法即为 6 位。本例子中是为了计算方便,所以取的数比较小,实际算法是 1024 位 或 2048 位,位数越长,算法越难被破解。

  • 计算n的欧拉函数m = φ(n)

    根据公式m = φ(55) = φ(5)φ(11) = (5-1)(11-1) = 40

  • 随机选择一个整数e,条件是1<e<m,且e与m互质

    我们随机选择e=17

  • 计算e对于φ(n)(即m)的模反元素d

    即找一个整数 d,使得 (e * d ) % m = 1。 等价于 e * d - 1 = y * m ( y 为整数) 找到 d ,实质就是对下面二元一次方程求解。 e * x - m * y = 1 。其中 e = 17,m = 40,17x - 40y = 1 这个方程可以用"扩展欧几里得算法"求解。具体求解过程略,算出一组整数解(x,y )= (33,14),即 d=33。 到此密钥对生成完毕。不同的e生成不同的d,因此可以生成多个密钥对。

??本例中公钥为(n,e) = (55 , 17),私钥为(n,d) = (55 ,33) ,仅(n,e) =(55 , 17)是公开的,其余数字均不公开。可以想像如果只有 n 和 e,如何推导出 d,目前只能靠暴力破解,位数越长,暴力破解的时间越长。

2、加密生成密文

??对明文z采用公钥(n,e)进行加密,其中明文必须转换为数字,且必须比n小。加密的公式如下:
\[
z^e=c(mod\ n)
\]
??其中z为明文,n和e为公钥,c为加密后的密文,所以c可以转换为:
\[
c=z^e \% n
\]
??假如明文为15,公钥(n,e) = (55 , 17),则加密后的密文c为:
\[
c=15^{17}\%55=5
\]

3、解密生成明文

??对密文c采用公钥(n,d)进行解密,解密的公示如下:
\[
c^d=z(mod\ n)
\]
??其中c为密文,n和d为私钥,z为解密后的明文,所以z可以转换为:
\[
z=c^d\%n
\]
??根据上述条件,密文c为5,私钥(n,d) = (55 ,33) ,则解密后的明文z为:
\[
z=5^{33}\%55=15
\]

四、RSA算法有效性证明

1、有效性问题

??根据上述RSA算法示例,要验证RSA算法的有效性,即验证根据加密公式:
\[
z^e=c(mod\ n)
\]
??可以推导出,解密公式是有效的:
\[
c^d=z(mod\ n)
\]

2、证明过程

??根据加密规则,可以推导出:
\[
c= z^e - kn
\]
??将上述式子代入解密公式,即求证以下式子成立:
\[
(z^e-kn)^d = z(mod\ n)
\]

\[
z^{ed} = z(mod\ n)
\]

  • 当z与n互质时

    根据欧拉定理
    \[
    z^{φ(n)} = 1(mod\ n)
    \]
    则可以推出
    \[
    z\times {(z^{φ(n)})}^p=z(mod\ n)
    \]

    \[
    z^{1+pφ(n)}=z(mod\ n)
    \]

    由于
    \[
    ed = 1(mod\ φ(n))
    \]

    \[
    ed = 1+pφ(n)
    \]

    所以可以推导出
    \[
    z^{ed} = z(mod\ n)
    \]

  • 当z与n不为互质时

    因为n=a*b,其中a和b都为质数。因为z和n不为互质,则z和n必定有一个公约数,由于n为两个质数a和b的乘积,则z一定为a或b的倍数,记作ka或者kb。

    假定z=ka(a=kb同理)。由于b为质数,如果k为b的倍数,即k=hb,则z=hab,其中h为正整数,则推导出z大于n,但是根据条件被加密的明文必须小于n,所以可以推导出k不是b的倍数,由于b为质数,所以可以推断出k和b互质,同理,推导出ka与b互质,即z与b互质。

    根据欧拉定理,可知下列式子成立:
    \[
    z^{φ(b)}≡1(mod\ b)
    \]
    可推导出:
    \[
    z^{φ(b)}=(ka)^{φ(b)}=(ka)^{b-1}≡1(mod\ b)
    \]
    对于一个数求余结果为1,那么它的n次方,求余也为1。根据这个定理,可推导出:
    \[
    {[(ka)^{b-1}]}^{h(a-1)}≡1(mod\ b)
    \]

    \[
    {[(ka)^{b-1}]}^{h(a-1)}\times ka≡ka(mod\ b)
    \]

    \[
    {(ka)}^{ed}≡ka(mod\ b)
    \]

    \[
    {(ka)}^{ed}=ka+ob
    \]

    由于两名等式成立,且a与b互质,可以推导出o一定为a的倍数,即0=ja,可推导出:
    \[
    {(ka)}^{ed}=ka+ob=ka+jab
    \]
    因为z=ka,n=ab,所以可以退出:
    \[
    z^{ed}≡z(mon\ n)
    \]

五、RSA算法的安全性

??RSA算法的安全性,是基于目前的条件下,在空间和时间上,无法对它进行有效破解。

??根据上述推导,RSA算法用到a、b、n、m、e、d六个数字。其中公钥(n,e)是公开的,其余的4个数字是保密的。其中密钥d是算法的核心。

  • e*d ≡ 1 (mod m)。其中e是公开的,那就需要知道m,才能算出d。
  • 根据公式φ(n)=(a-1)(b-1)=m,要计算出m,必须知道a和b。
  • n=ab。只有将n因数分解,才能算出a和b。

??目前对于大数的因数分解,除了暴力破解,没有更好的途径。以现有的计算资源和能力,目前能被破解的最长RSA密钥就是768位,所以只要保证RSA密钥是1024位及以上,即可保证算法的安全性。

六、总结

1、RSA算法流程

2、RSA算法安全性

??目前对于大数的因数分解,除了暴力破解,没有更好的途径。以现有的计算资源和能力,目前能被破解的最长RSA密钥就是768位,所以只要保证RSA密钥是1024位及以上,即可保证算法的安全性。

3、RSA算法应用

??在RSA算法中,公钥(n,e) 只能加密小于n的整数。对于大于n的整数,可以采用两种方法。一是把长信息分割成若干段短消息,每段分别加密;另一种是先选择一种对称性加密算法加密信息,再用RSA公钥加密对称性加密算法的密钥。

??另外,由于RSA算法性能问题,通常加解密都比较慢,所以通常和对称性加密算法一起配合使用。

原文地址:https://www.cnblogs.com/xtiger/p/10972373.html

时间: 2024-10-20 02:45:33

非对称加密算法-RSA算法的相关文章

Java加密技术(四)非对称加密算法RSA

RSA  这种算法1978年就出现了,它是第一个既能用于数据加密也能用于数字签名的算法.它易于理解和操作,也很流行.算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman. 这种加密算法的特点主要是密钥的变化,上文我们看到DES只有一个密钥.相当于只有一把钥匙,如果这把钥匙丢了,数据也就不安全了.RSA同时有两把钥匙,公钥与私钥.同时支持数字签名.数字签名的意义在于,对传输过来的数据进行校验.确保数据在传输工程中不被修改. 流程分析: 甲方构建

JAVA 非对称加密算法RSA

非对称加密算法 RSA过程 : 以甲乙双方为例 1.初始化密钥 构建密钥对,生成公钥.私钥保存到keymap中 KeyPairGenerator ---> KeyPair --> RSAPublicKey.RSAPrivateKey 2.甲方使用私钥加密, 加密后在用私钥对加密数据进行数据签名,然后发送给乙方 RSACoder.encryptByPrivateKey(data, privateKey); RSACoder.sign(encodedData, privateKey); 3.乙方则

非对称加密算法RSA使用注意事项

原文:非对称加密算法RSA使用注意事项 第一个问题,也是最重要的一个——RSA无法对超过117字节的数据进行加密!切记!其实也勿需要求对更大数据的加密,虽然网上已经有相关解决方案,比如BigInteger项目.但这点确实需要注意,如果对大于117字节的数据加密就会抛异常出来,说法还有点莫名其妙.考虑下RSA的主要用途就可以理解了,一般我们使用RSA的主要用途是进行数字签名,另外就是对“对称加密”算法的KEY和IV向量进行加密: 第二个问题,假设要对一个文本文件(比如xml文件)中的某些数据进行加

Java非对称加密算法--RSA加密算法

Java非对称加密算法--RSA加密算法          RSA加密算法是一种非对称加密算法.在公开密钥加密和电子商业中RSA被广泛使用.RSA是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.当时他们三人都在麻省理工学院工作.RSA就是他们三人姓氏开头字母拼在一起组成的. 1973年,在英国政府通讯总部工作的数学家克利福德·柯克斯(Clifford Cocks)在一个内部文件中提出了一个相

openssl 非对称加密算法RSA命令详解

1.非对称加密算法概述 非对称加密算法也称公开密钥算法,其解决了对称加密算法密钥分配的问题,非对称加密算法基本特点如下: 1.加密密钥和解密密钥不同 2.密钥对中的一个密钥可以公开 3.根据公开密钥很难推算出私人密钥 根据非对称加密算法的特点,可用户数字签名.密钥交换.数据加密.但是由于非对称加密算法较对称加密算法加密速度慢很多,故最常用的用途是数字签名和密钥交换. 目前常用的非对称加密算法有RSA, DH和DSA三种,但并非都可以用于密钥交换和数字签名.而是RSA可用于数字签名和密钥交换,DH

第十二章 非对称加密算法-RSA

注意:本节内容主要参考自<Java加密与解密的艺术(第2版)>第8章“高等加密算法--非对称加密算法” 12.1.RSA(最经典的非对称加密算法) 特点: 使用一套密钥即可完成加解密(与DH不同) 与DH不同的第二点是,RSA自己可以完成加解密,而DH需要依赖于对称加密算法 “私钥加密,公钥解密”或“公钥加密,私钥解密” 公钥长度远小于私钥长度(对下边的代码进行测试,自己比较结果) 加解密流程: 1)发送方(假设为甲方)构建密钥对,自己保留私钥,将公钥发送给接收方(假设为乙方) 2)甲方使用密

信息加密之非对称加密算法RSA

前面为大家已经总结了,基于密钥交换的DH算法,现在就为大家再介绍一种基于因子分解的RSA算法,这种加密算法有两种实现形式:1.公钥加密,私钥解密:2.私钥加密,公钥解密.下面就为大家分析一下实现代码,相对于DH算法,RSA显得有些简单.初始化密钥: KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); keyPairGenerator.initialize(512); KeyPair keyPa

非对称加密算法RSA

RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.1987年首次公布,当时他们三人都在麻省理工学院工作.RSA就是他们三人姓氏开头字母拼在一起组成的. RSA算法晚于DH算法,这五个字母全都是人名首字母.DH算法是第一个非对称密码体系. RSA算法运算速度慢,不适宜加密大量数据.一种解决方案是,将RSA跟对称加密方式混合使用,将数据使用对称加密方式加密,对称加密的密钥使用RS

非对称加密——RSA算法工具类

关于RSA算法的介绍网上一大堆,一句话就是牛B. package com.demo; import org.springframework.util.StringUtils; import javax.crypto.Cipher; import java.security.*; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; import java.secur