对称加密
发送方发送数据前加密和接收方接收到数据解密获取原始数据,采用的都是同一个密钥。这种方式传输数据,非常容易被第三方攻击者破解。
非对称加密
首先了解一个概念,公钥加密,私钥解密,这里公钥和私钥都是属于接收方的,公钥和私钥是一对,公钥加密的数据,只能用对应的私钥解密。这样发送方发送数据时就可以用接收方的公钥对数据进行加密后再发送给接收方,接收方在本地使用自己的私钥解密,这样,即使在传输过程中,公钥被攻击者获取到,但攻击者没有私钥,所以无法解密,获取原始数据。
tips:(L表示加密,K表示解密,下标A、B分别表示发送方和接收方,m为原始数据,不同的m下标。表示原始数据的不同状态)。
如下图:
这种方式虽然避免了数据被攻击者破解,但是如果攻击者在截取到报文后,篡改了原始数据,即通过B(接收方)的公钥加密假数据,(这里公钥是公开的,即任何人都能获取到),再将报文发送给B,B这时虽然可以用自己的私钥将数据进行解密,但B无法确定这段数据是A发送的原始数据还是攻击者发送的假数据。
所以为了让B能够辨别数据的真实性,A在发送数据又加了一步,即对数据加上自己的签名,加签名的方式就是用A的私钥对数据再加密,将一次加密的数据和二次加密的数据(签名)一起发给B,B收到报文后,要先用A的公钥解密,再比对签名和一次加密的是否一致。这里如果B收到的是攻击者加密的假数据的话,当B用A的公钥去解密数据时,会发现解密后的数据和一次加密的数据不一致,所以B这时就能辨别自己接收到的数据是不是A发给自己的真实数据。
tips:(前面说公钥加密,私钥解密,是对接收方来说的,对发送方就可以通过私钥二次加密数据,产生签名,让接收方使用发送方的公钥解密签名)
如下图:
这里,发送方如果对整段数据进行签名加密,会对资源造成浪费,签名只用在判别数据是否有效,所以这里采用散列算法,获取数据摘要,对摘要进行加密。
如下图:
H(x)表示对x数据进行散列计算,当x、y不同的数据进行散列时,H(x)=H(y)在计算上是不可行的。
参考:
视频:私钥和密钥