2021-11-11密码学

对称密码体系中发送者和接收者使用同一个密钥加密和解密(对称、可逆);非对称密码体系中发送者使用接收者的公钥进行加密,接收者使用自己的私钥进行解密(非对称)。

五种对称加密算法总结:

1、DES

已破解,不再安全,基本没有企业在用了;是对称加密算法的基石,具有学习价值;
密钥长度56(JDK)、56/64(BC)

2、DESede(三重DES)
早于AES出现来替代DES;计算密钥时间太长、加密效率不高,所以也基本上不用;
密钥长度112/168(JDK)、128/192(BC)

3、AES

最常用的对称加密算法,密钥建立时间短、灵敏性好、内存需求低;实际使用中,使用工作模式为CTR(最好用BC去实现),此工作模式需要引入IV参数(16位的字节数组);
密钥长度128/192/256,其中192与256需要配置无政策限制权限文件(JDK6);
填充模式最常用的两种PKCS5Padding和PKCS7Padding,其中后者只有BC独有。

4、IDEA

常用的电子邮件加密算法,工作模式只有ECB;密钥长度128位

5、PBE

综合了消息摘要算法和对称加密算法,最常见的是PBEWithMD5AndDES。工作模式只有CBC(已丧失安全性,不推荐使用),所以PBE目前也不推荐使用了

三种非对称加密算法总结:

1.DH

非对称算法的基石,仅能用于密钥分配,不能用于加解密数据,一般加密数据用AES,密钥长度:512~1024中的64的整数倍,双方各有自己的密钥对。

2.RSA

最经典的非对称加密算法,也可认为是使用最多的非对称加密算法,能用于密钥分配,也能用于加解密数据(“私钥加密,公钥解密”和“公钥加密,私钥解密”);密钥长度:512~65536(64的整数倍),可用于数字签名\\只有发送发有一个密钥对,或者更安全的做法是:双方均生成自己的密钥对,但是后边使用密钥对进行加解密时与DH有区别。

*密文=明文^E mod N (因此只需知道E和N 任何人都可以完成加密运算,E和N就是RSA算法的公钥)

*明文=密文^D mod N(D和N充当RSA算法的私钥)

N是公开的,所以用于加密和解密的只有E和D,为了生成密钥对:需要求得N、L(仅在生成密钥对的过程中使用的数)、E、D

1)求N
使用伪随机数生成器生成两个很大的质数p、q,质数:在大于1的自然数中,除了1和它本身不会有其他因数)N=p*q
2)求L
L只出现在生成密钥对的过程中,不会出现于加解密中
L=lcm(p-1,q-1)L是p-1和q-1的最小公倍数
3)求E
1 4)求D
D是由E得到
1

3.ELGamal

数字签名DSA的基础,具体实现方式只有BC有,与RSA的实现方式类似,只有“公钥加密,私钥加密”方式(公钥加密实际上安全性不高),密文会成倍扩张,该算法是利用modN下求离散对数的难度。

非对称密码体系

·发送者只需知道加密密钥

·接收者只需知道解密密钥

·解密密钥不可被窃听者获取

·加密密钥被窃听者获取也没问题

公钥密码存在的问题

1.公钥密码虽然解决了密钥配送的问题。但是我们还要判断所得到的公钥是否是正确的合法的,这个问题被称之为公钥认证问题
2.公钥密码处理速度慢,只有对称加密的几百分之一。

RSA的有关求解

基本概念

2021-11-11密码学_第1张图片

 一、什么是“素数”?

素数是这样的整数,它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积。

二、什么是“互质数”(或“互素数”)?

公约数只有1的两个数叫做互质数

(1)两个质数一定是互质数。eg:2&7、13&19

(2)一个质数如果不能整除另一个合数,这两个数为互质数。eg:3&10、5&26

(3)1不是质数也不是合数,它和任何一个自然数在一起都是互质数。eg:1和9999

(4)相邻的两个自然数是互质数。eg:15&16

(5)相邻的两个奇数是互质数。eg:49&51

(6)大数是质数的两个数是互质数。eg:97&88

(7)小数是质数,大数不是小数的倍数的两个数是互质数。eg:7&16

(8)两个数都是合数(两数差由较大),小数所有的质因数,都不是大数的约数,这两个数是互质数。eg:357&715、357=3*7*17,而3、7和17都不是715的约数,这两个数为互质数。

三、什么是模指数运算?
   模运算是整数运算,有一个整数m,以n为模做模运算,即m mod n。让m去被n整除,只取所得的余数作为结果,就叫做模运算。例如,10 mod 3=1;26 mod 6=2;28 mod 2 =0等等。
  模指数运算就是先做指数运算,取其结果再做模运算。如(5^3) mod 7 = (125 mod 7) = 6。

四、如何应用RSA算法加解密?

1.随机选择两个不同的素数p,q;

2.将p,q相乘,记作n=pXq;

3.计算n的欧拉函数φ ( n ),欧拉函数证明,当p,q为不相同的素数时,φ ( n ) = ( p − 1 ) ( q − 1 );

4.随机选择一个整数e,满足两个条件:φ ( n )与e互质,且1

5.计算e对于φ ( n )的模反元素d,也就是说找到一个d满足ed=1modφ ( n )。这个式子等价于ed-1=kφ ( n ),实际上就是对于方程ed-kφ ( n )=1求解(d,k)的整数解。这个方程可以用扩展欧几里得算法求解。

6.最终把(e,n)封装成公钥,(d,n)封装成私钥。

你可能感兴趣的:(安全)