Hash函数

概念:输入任意长度的数据块,产生固定长度的Hash值

目的:保证数据完整性,只要修改消息内容的任一位(bit),产生的Hash值会有天壤地别的变化

Hash函数不是某个特定函数,它指一类函数

最简单的Hash函数:mod(),比如任意数据 mod 2 得到固定长度的0或1

满足的条件

Hash函数要满足以下两个条件:

  • 单向性:计算一个给定消息串的hash值是容易的, 但是根据hash值找到对应的消息是困难的
  • 抗碰撞性:两个不同的消息,但具有相同的hash值是困难的

Hash值应用

如:消息验证、数字签名等

消息验证

保证收到的数据确实和发送时的一样,没有经过修改、播放、删除或重放

步骤

  • 发送者在发送消息时,需要计算出消息对应的Hash值,并一起发送过去

  • 接收者收到消息后,先对消息进行Hash计算,并对收到的Hash进行比较,判断是否相同。如果不匹配则可能受到了篡改

注意:

  • 上面存在的前提是:这个Hash本身没被篡改
  • 就像中间人攻击,如果【中间人】Marrlory将消息篡改的同时,将篡改后的消息产生新Hash也修改并发送给【接收方】Bob,【接收方】Bob则无法发现这有问题
  • 所以,对Hash本身也需要加密保护(如Alice拿Bob的公钥对hash进行加密,Bob再用自己私钥对hash解密,但这样还是可能被中间人攻击)

Hash与对称加密结合

通信双方使用共同的密钥来加解密,并且,将密钥与消息一起作为输入,产生Hash值作为消息认证码Message authentication code】,

并将这个Mac与密文一齐发送

即使中间人拿到了密文,并对密文解密还篡改了,再将篡改后的密文产生新Hash,将新密文新Hash发送【因为中间人不知道密钥,所以产生的hash肯定有问题】

接收方收到新密文后,因为只有双方知道共同的密钥,接收方重新计算密钥与新消息Hash,发现与收到的新Hash不匹配,说明发生了中间人攻击的篡改

注意:

  • 这个前提是双方共同的密钥没有泄露

数字签名

与上面的消息认证码相似,在公钥使用的那篇文章提到过

  • 如果只要认证,不要保密性。
    • 只要发送方对消息或文件产生Hash码,并随着密文一起发送。接收方只要对消息计算Hash并与接收的Hash匹配即可
  • 如果既要认证,也要保密性。【使用对称加密与数字结合
    • 发送方对消息或文件产生Hash码
    • image-20220615215623867
    • 发送方用自己的私钥Hash码加密得到Signature【最好用接收方的公钥进行加密
    • image-20220615215735864
    • 发送方再用对称加密中的密钥,将Hash码和消息一起加密再发送。
    • 接收方对接收的消息使用对称加密密钥解密
    • 再用发送方的公钥Signature进行解密得到Hash
    • image-20220615215816872
    • 对消息计算Hash并与接收的Hash进行匹配即可
    • image-20220615215823508
  • 如果既要认证,也要保密性。【使用对称加密与数字结合
    • 因为非对称加密往往进行密钥管理,传输消息时不用非对称加密,如果要用也不是不行

数字证书

这里是应用在数字签名之上,用来保护数字签名不被中间人攻击替换,数字签名只能确保数据完整性,消息内容本身的加密仍然可以用对称加密或非对称加密

最典型的应用HTTPS,这个S就是指TLS,TLS将对称加密数字证书结合,在服务器与客户端连接阶段,用数字证书交换用来对称加密的密钥,TCP建立后续都用这个对称加密的密钥来加密消息,数字证书就没用了

服务器向CA申请数字证书时,服务器要把自己的公钥也提交给CA,CA向服务器发送CA证书CA公钥,CA已经将服务器自己的公钥加密到CA证书里面

客户端用CA公钥CA证书提取出服务器的公钥,再作其它传输操作【这样做的目标是,确定服务器的公钥的确是来自服务器的】

服务器上添加证书的CA公钥与CA证书

SSL/TLS协议运行机制的概述:https://www.ruanyifeng.com/blog/2014/02/ssl_tls.html

image-20220615220009983

image-20220615220014856

image-20220615220137156


MD5

最常用的Hash函数,输出128-bit哈希值

MD5(“The quick brown fox jumps over the lazy dog”) = 9e107d9d372bb6826bd81d3542a419d6

多一个点,对应的Hash就会不同

MD5(“The quick brown fox jumps over the lazy dog.”) = e4d909c290d0fb1ca068ffaddf22cbd0

MD5缺点:撞库,通过穷举的方式,对创建的明文密文进行查询

这个网站可以MD5反查:https://www.cmd5.com/

SHA

Secure Hash Algorithm

SHA其实是一个算法家族,由美国国家安全局(NSA)开发,有SHA1、SHA2、SHA3三类,目前SHA1已经被破解,使用比较广泛的是SHA2类。

安全散列算法,即是将一段接收到的message通过哈希算法将其转换成固定位数的哈希值(也称消息摘要)。

SHA256就是将message通过哈希算法计算得到一个256位的哈希值。