哈希被用于提供数据完整性,那么实际是怎么发生的呢?
数据完整性的目的:检测数据传输过程中有没有被修改
- 信息发送者利用哈希算法(md5,SH1,etc)创建该信息的摘要(Digest)
- 之后,将信息和摘要一同发送给对方
- 信息接收方从接收的信息里独立地计算出摘要
- 接收方会比对接收过来的摘要和自己计算出来的摘要
- 如果2个摘要完全相同,那么该信息在传输过程中没有被修改
但这过程中仍然会存在问题,
- 中间人仍然能够截获我们的信息,然后修改这个信息,并重新哈希出新的摘要
- 这时,接收信息方比对的摘要是修改过的摘要和修改后的信息计算出的摘要(因为并不知道信息是被修改过后的)
因此,简单地发送信息摘要并不足够,
- 现在,双方创建了相互的密钥(Secret Key)
- 信息发送方结合“信息+密钥”的方式创建了摘要
- 接收方通过计算“信息+密钥”的哈希来进行验证
- 信息在传输过程中没有被修改(Integrity),就算中间人截获了信息,但没有密钥,没法创建(和接收方从信息中计算出的摘要相同的)摘要
- 发送方有着完全相同的密钥,摘要是和“信息+密钥”绑定的,只有拥有相同密钥的人才能计算出相同的摘要。这就证明了发送方的真实性(Authentication),因为只有他有这个密钥。
- Message Authentication Code(MAC)
- MAC是我们计算摘要时,联合“信息+密钥”所产生的概念
- 为批量数据在线传输提供数据完整性(Integrity)和真实性(Authentication)
- 信息和密钥必须要使用相同的方式进行结合(双方要有共识)
- 哈希“Key + Message”和哈希“Message + Key”是不同的
- MAC的行业执行标准 ---- HMAC(Hash Based Message Authentication Code)(RFC2104)
上文就是SSL如何提供数据完整性(Data Integrity)
哈希算法:输入信息,输出摘要。例如MD5,SHA1,etc...
MAC:输入“信息+密钥”,输出摘要。例如HMAC(Hash Based Message Authentication Code)
参考文献
1、网站:Practical Networking.net:Practical TLS