对称算法
“加密”和“解密”使用【相同的】密钥。(对称算法)
常见的对称加密算法有AES(Advanced Encryption Standard)、DES(秘钥加密的块算法)。
对称加密优点
- 算法公开、计算量小、加密速度快、加密效率高, 适合对大量数据进行加密的场景。
对称加密缺点
- 因为对称加密算法,加密和解密时使用的是同一个密钥,所以对称加密的安全性就不仅仅取决于加密算法本身的强度,更取决于密钥是否被安全的传输或保管。
非对称算法
“加密”和“解密”使用【不同的】密钥。(非对称算法)
非对称加密算法需要两个密钥: 公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥) 。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法
常用非对称加密算法如RSA 和 ECC。
非对称加密优点
非对称加密主要用于密钥交换(也叫密钥协商)。浏览器和服务器每次新建会话时都使用非对称密钥交换算法协商出对称密钥,使用这些对称密钥完成应用数据的加解密和验证,整个会话过程中的密钥只在内存中生成和保存(公钥是公开的,私钥是自己保存的),而且每个会话的对称密钥都不相同(除非会话复用),中间者无法窃取。
非对称加密缺点
非对称密钥交换很安全,但同时也是HTTPS性能和速度严重降低的“罪魁祸首”。
例RSA公钥加密体制包含如下3个算法:KeyGen(密钥生成算法),Encrypt(加密算法),Decrypt(解密算法)
签名算法
签名算法是指用于计算数字签名的算法。数字签名,就是只有信息的发送者才能产生别人无法伪造的一段数字串,这段数字串同时也是对信息发送者的一个有效证明。计算数字签名通常是个单向的过程(类似于摘要算法的不可逆性)。目前应用最为广泛的三种签名算法是:RSA签名、Rabin签名、DSS签名。
签名算法存在如下特点
- 不可否认性 这个就不用解释了吧(只有你的私钥才能计算出正确的数字签名,你还想否认?)
- 防止数据被篡改
- 签名算法通常包含一个摘要算法和一个非对称加密算法
数字签名的计算过程一般是先把所有的请求参数拼接为一个字符串,然后通过摘要算法计算出摘要信息,最后再通过我们的私钥对该字符串的摘要信息进行加密从而生成该请求对应的数字签名。(简称:加签)
服务端收到请求后,先通过我们的公钥对我们的签名进行解密得出请求参数的摘要信息。然后再通过同样的方法把我们的请求参数拼接为一个字符串然后进行摘要。最后通过对比摘要信息来判断该请求是否被篡改。(简称:验签)
至于第三个特性,在这里提问一个问题:签名算法为什么不直接用非对称加密计算签名,而是要先进行摘要然后再通过摘要信息计算签名呢?直接使用非对称加密计算签名不也可以保证签名的不可否认性与防止数据被篡改的特性吗?
其实这里涉及到非对称加密的一个弊端,那就是加密数据的长度不能大于密钥的长度。所以需要利用摘要算法变长输入、定长输出的这一特性,将加密的数据变为一个固定长度的摘要信息。
RSA签名验证
RSA签名包含如下3个算法:KeyGen(密钥生成算法),Sign(签名算法),Verify(验证算法)
证书机制
与数字签名相关的一个概念就是证书机制了,证书是用来做什么呢?在上面的各种模式中,我们一直使用了这样一个假设,就是接收方或者发送方所持有的、对方的公钥总是正确的(确实是对方公布的)。而实际上除非对方手把手将公钥交给我们,否则如果不采取措施,双方在网络中传递公钥时,一样有可能被篡改。那么怎样解决这个问题呢?这时就需要证书机制了:可以引入一个公正的第三方,当某一方想要发布公钥时,它将自身的身份信息及公钥提交给这个第三方,第三方对其身份进行证实,如果没有问题,则将其信息和公钥打包成为证书(Certificate)。而这个公正的第三方,就是常说的证书颁发机构(Certificate Authority)。当我们需要获取公钥时,只需要获得其证书,然后从中提取出公钥就可以了。
本文暂时没有评论,来添加一个吧(●'◡'●)