加密、签名、证书基本概念
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/caersi/p/6720789.html
加密、签名和ssl握手机制细节:
还有一篇,关于前后端代码层面的,可以看一下:
上一篇: 年赚1000万社交电商创业者的特点