零基础Go语言开发培训班有吗?go语言课程讲解:非对称加密算法

 5.1.1 非对称加密简介

非对称加密又叫做公开密钥加密(Public key cryptography)或公钥加密。指加密和解密使用不同密钥的加密算法。公钥加密需要两个密钥,一个是公开密钥,另一个是私有密钥;一个用作加密的时候,另一个则用作解密。

RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。其他常见的公钥加密算法有:ElGamal、背包算法、RabinRSA的特例)、椭圆曲线加密算法(Elliptic Curve Cryptography, ECC)。

非对称加密的缺点是加解密速度要远远慢于对称加密,在某些极端情况下,甚至能比对称加密慢上1000倍。非对称加密与对称加密的对比如表所示。

对称加密与非对称加密的区别

算法类型

特点

优势

缺陷

代表算法

对称加密

加解密密钥相同或可推算

计算效率高,加密强度高

需提前共享密钥;易泄露

DES3DESAESIDEA

非对称加密

加解密密钥不相关

无需提前共享密钥

计算效率低,中间人攻击可能性低

RSAElGamal、椭圆曲线系列算法ECC

5.1.2 对称加密算法实现数字签名

非对称加密不同于加密和解密都使用同一个密钥的对称加密,虽然两个密钥在数学上相关,但如果知道了其中一个,并不能凭此计算出另外一个。加密消息的密钥是不能解密消息的。因此两个密钥中,其中一个可以公开,称为公钥,可以向外布;不公开的密钥为私钥,必须由用户自行严格秘密保管,绝不通过任何途径向任何人提供。

非对称加密算法分为两种:公钥加密、私钥解密和私钥加密、公钥解密。前者是普通的非对称算法的加密和解密,而后者被称为数字签名。目前主流的数字签名算法是椭圆曲线数字签名算法(ECDSA)。具体内容在下一节讲解。

总之,非对称加密算法中,公钥的作用是加密消息验证签名,私钥的作用是用来解密信息和进行数字签名。

5.1.3 RSA原理

RSA算法基于一个十分简单的数论事实将两个大素数相乘十分容易想要对其乘积进行因式分解极其困难,因此可以将乘积公开作为加密密钥。密钥对的生成步骤如下。

(1) 随机选择两个不相等的质数pq(比特币中P长度为512位二进制数值,Q长度为1024位)

(2) 计算pq的乘积N

(3) 计算p-1q-1的乘积φ(N)

(4) 随机选个整数eem要互质,且0<e<φ(N)

(5) 计算e的模反元素d

(6) 公钥是(N,e),私钥是(N,d)

加解密步骤如下。

(1) 假设一个明文数m0<=m<N

(2) 对明文m加密成密文c,算法如下所示。

  a. c=m^e  mod  N

(3) 对密文c解密成明文m,算法如下所示。

a. m=c^d  mod  N

举例说明如下所示。

p=11 q=3

N=pq = 33

φ(N) =(p-1)(1-1)=20

选择20的互质数e=3

计算满足ed=1 mod 20d,也就是模反元素d=7

公钥为(33,3),私钥为(33,7)

假设明文m=8 , (0<8<33

密文c=m^e  mod  N = 8 ^ 3 mod 33 = 512 mod 33 = 17 mod 33 , 得出c=17

明文m=c^d  mod  N = 17 ^ 7 mod 33 = 8 mod 33 , 得出m=8

猜你喜欢

转载自www.cnblogs.com/qfjun/p/10672319.html