1.非对称加密
非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。
公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。
因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
工作原理
- A要向B发送信息,A和B都要产生一对用于加密和解密的公钥和私钥。
- A的私钥保密,A的公钥告诉B;B的私钥保密,B的公钥告诉A。
- A要给B发送信息时,A用B的公钥加密信息,因为A知道B的公钥。
- A将这个消息发给B(已经用B的公钥加密消息)。
- B收到这个消息后,B用自己的私钥解密A的消息。其他所有收到这个报文的人都无法解密,因为只有B才有B的私钥。
RSA算法
RSA加密算法是一种非对称加密算法
RSA是三位开发者姓氏开头字母拼在一起组成的。
2.对称加密
所谓对称,就是采用这种加密方法的双方使用方式同样的密钥进行加密和解密。
密钥是控制加密及解密过程的指令。
算法是一组规则,规定如何进行加密和解密。
优缺点
由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用。对称性加密也称为密钥加密。
加密的安全性不仅取决于加密算法本身,密钥管理的安全性更是重要。因为加密和解密都使用同一个密钥,如何把密钥安全地传递到解密者手上就成了必须要解决的问题。
工作原理
- 数据发送方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。
- 接收方收到密文后,若想解读原文,则需要使用加密密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。
- 在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密。
AES
高级加密标准(英语:Advanced Encryption Standard,缩写:AES)
这个标准用来替代原先的DES
DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法
AES属于对称加密方法
3.密码散列函数
密码散列函数(Cryptographic hash function),又译为加密散列函数,是散列函数(哈希函数)的一种。
它被认为是一种单向函数,也就是说极其难以由散列函数输出的结果,回推输入的数据是什么。
这种散列函数的输入数据,通常被称为消息(message),而它的输出结果,经常被称为消息摘要(message digest)或摘要(digest)。
特点
- 对于任何一个给定的消息,它都很容易就能运算出散列数值
- 难以由一个已知的散列数值,去推算出原始的消息
- 在不更动散列数值的前提下,修改消息内容是不可行的
- 对于两个不同的消息,它不能给与相同的散列数值
MD5
MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数
可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。
SHA家族
安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,是FIPS所认证的安全散列算法。
能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。
家族成员
- SHA家族的五个算法,分别是SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512
- SHA-1在许多安全协定中广为使用,包括TLS和SSL、PGP、SSH、S/MIME和IPsec
- SHA-1的安全性如今被密码学家严重质疑;后四者有时并称为SHA-2,至今尚未出现对SHA-2有效的攻击
4.证书机制
- 引入一个公正的第三方
- 当某一方想要发布公钥时,它将自身的身份信息及公钥提交给这个第三方
- 第三方对其身份进行证实,如果没有问题,则将其信息和公钥打包成为证书(Certificate)
- 而这个公正的第三方,就是常说的证书颁发机构(Certificate Authority)
- 当我们需要获取公钥时,只需要获得其证书,然后从中提取出公钥就可以了
解决问题:
通常情况下,获取外部平台的公钥时,除非对方手把手将公钥交给我们,否则公钥在网络中传递时,可能被篡改
5.数据安全传输条件
数据传输安全要满足的要求:
- 消息的发送方能够确定消息只有预期的接收方可以解密(不保证第三方无法获得,但保证第三方无法解密)。
- 消息的接收方可以确定消息是由谁发送的(消息的接收方可以确定消息的发送方)。
- 消息的接收方可以确定消息在途中没有被篡改过(必须确认消息的完整性)。
如何实现?
假设有两组四个密钥
A的公钥(PUB_A),A的私钥(PRI_A);B的公钥(PUB_B),B的私钥(PRI_B)
公钥一般用来加密,私钥用来签名
A发送消息
- 利用加密散列函数(SHA-2、MD5)对要发送的消息进行运算,单向生成消息摘要
- A用自己的私钥(PRI_A)对消息摘要进行签名
- A用B的公钥(PUB_B)对消息和签名后的消息摘要进行加密
B接受消息
- B用自己的私钥(PRI_B)解密A用B的公钥(PUB_B)加密的内容
- 解密后的内容分为两部分,一部分是消息,一部分是签名后的消息摘要
- B用A的公钥(PUB_A)解签A用A自己私钥(PRI_A)签的签名
- 对解密后的消息,进行加密散列函数运算,生成新的消息摘要,对比解签后的消息摘要,判断是否一致
非对称加密尽可能的保证了,消息在网络传输过程中,即使被截取,也无法被解密;
对消息摘要解签的过程,要用到发送方的公钥,这样也就确定了消息的发送方;
消息摘要的前后对比,保证了消息的完整性。
非对称加密是一种很耗时的操作,而对称加密效率虽然高,但不安全。
我们可以结合使用。
利用非对称加密,加密(签名)消息摘要和对称加密中的密钥;利用对称加密方式,加密消息数据
偷了一幅图:
这篇博客写的很详细,图偷他的:
加密、签名和SSL握手机制细节:https://www.cnblogs.com/f-ck-need-u/p/6089523.html
图中利用私钥,加密摘要信息生成数字签名,就是 签名 的过程。
参考
加密和签名的区别:https://blog.csdn.net/youshaoduo/article/details/78476578
签名、加密、证书的基本原理和理解:https://www.cnblogs.com/Caersi/p/6720789.html
加密、签名和SSL握手机制细节:https://www.cnblogs.com/f-ck-need-u/p/6089523.html
还有一篇,关于前后端代码层面的,可以看一下: