之前讲了身份认证和数据加解密,身份认证可以保证数据源没有问题,数据加解密可以保证数据被窃听者获取也能防止窃听者知道数据的内容,要做到数据的安全传输,还需要确定收到的数据没有经过窃听者的篡改,这就涉及到数据的完整性校验。
哈希
哈希是一种不可逆的映射,可以将数据经过哈希算法计算得到一个哈希值,而无法再将该哈希值反映射得到原始的数据。一般来说,不同的数据得到的哈希值是不同的,但也有极少的可能会出现碰撞,这极小的概率在这里不予考虑。
在网络数据完整性校验中使用的哈希算法通常包括:MD5, SHA。
数据完整性校验
数据完整性校验一般使用哈希算法和密钥对数据进行哈希得到数据的一个哈希值,然后将该哈希值和数据一块发送给对方,对方收到数据之后,对数据使用相同的哈希算法和密钥进行哈希得到哈希值,如果得到的哈希值和对方发过来的相同,那么就说明数据没有经过篡改。
有人可能会想,常用的哈希算法就几类,假设窃听者截获了数据,修改了数据区的某些字节,然后再用哈希算法进行再一次哈希得到新的哈希值,放入数据包中哈希值的位置传给接收者,接收者收到之后,对数据进行哈希,得到的哈希值就是窃听者发过来的那个哈希值。从而窃听者实现了虽然没有获取信息,但是破坏了信息的目的。这就是为什么需要在哈希的时候使用密钥:通信双方进行身份认证之后,交换密钥,包括对称性加密的密钥,哈希算法的密钥,还有其他.... 在哈希的时候用上哈希密钥,而窃听者没有哈希的密钥,因此他最后伪造的哈希值是无法通过检验的。