前言
在之前的文章《深入浅出密码学(上)》中,笔者为大家简要介绍了密码学中的加密跟单向散列函数的概念与应用。在这里先简单回顾下,由于网络通信过程中存在信息被窃听的风险,因此需要通过加密来防止窃听以保护信息安全。此外,在网络通信中数据还存在被篡改的风险,因此我们还需要有一种机制能够识别数据是否被篡改,而单向散列函数正是能够识别数据一致性或完整性的一种机制。然而单向散列函数不能解决的一个问题是不能确认消息一定是发送者的本意,也就是说无法识别“伪装”,为什么这样说呢?且听我细细道来。
一、单向散列函数的局限性
为了说明单项散列函数的局限性,我们还是引入一个场景。小明从某个网站W上下载了一个开源软件,由于该软件是开源的,所以没必要使用加密算法进行加密以防止窃听,但是小明需要确定下载的开源软件是否是完整的,所以需要使用单向散列函数进行验证。因此小明从该网站同时将开源软件与该开源软件的散列值下载到本地再进行比对,发现下载的软件计算出来的散列值与网站上的散列值是一致的,因此可以断定该软件是完整的。但是这并不代表该软件确实是来自网站W,而不是来自其他地方,即单纯使用单向散列函数存在“伪装”的风险。为了说明这一点&#x