logo科技微讯

单向散列函数(哈希算法)的应用场景

作者:科技微讯
日期:2023-07-20
📝 笔记

以下内容是我阅读《图解密码技术》这本书做的简单笔记。

单向散列函数,也叫消息摘要函数、哈希函数,常用于以下应用场景。

检测文件是否被篡改

这很常见,网上下载软件,有些开发者会放出这个软件的哈希值,你下载下来之后自己再计算一次哈希值,和开发者给的哈希值比较,如果相同就说明软件没有被篡改过,如果不同,说明软件可能被改过,例如植入了病毒。

基于口令的加密

Password Bascd Encryption,简称 PBE,其实就是使用用户的密码来加密明文,但不是直接使用密码的明文,而是使用密码的哈希值,有一些专门针对 PBE 的加密算法,请看我的这个笔记

消息认证码

确认消息来自被认证的一方而不是来自坏人,以及确认消息是否被篡改,但不能防止否认。

微信公众号开发文档中提到的“验证消息的确来自微信服务器”就属于这种,发送者(微信服务器)和接收者(开发者服务器)之间共享一个密钥(token),发送方用 token 和他要发送的消息一起生成认证码,并把认证码和消息内容一起发送给接收方,接收方用这个 token 和他接收到的消息一起生成一个认证码,接收方通过判断生成的认证码和发送方发过来的认证码是否相同,进而判断消息是否被篡改,是否有人伪装发送。

消息认证码之所以无法防止否认,是因为 token 是发送者和接收者都知道的,这意味着我们无法确认消息是发送方发送的,还是接收方发送的。如果发送方否认是他发送的,我们也反驳不了他。

银行之间的 SWIFT 交易、IPsec、SSL/TLS 都是通过消息认证码进行认证和完整性效验的。

数字签名

数字签名也叫消息签名,可以用来确认消息是谁写的,可以识别篡改和伪装,还可以防止否认。

数字签名就是通过非对称加密反过来用实现的,常用的算法就是 RSA,在线试试。但通常我们不是用 RSA 直接签名消息本身,因为消息可能很长,这会导致签名也很长,所以经常是先获得消息的哈希值,然后对这个哈希值签名,这样签名就不会很长。

在这个应用场景下,签名的目的不是隐藏内容(事实上消息是以明文的形式发送出去的,虽然也可以加密),而是证明这个信息来自于某个人。

微信小程序就是使用数字签名的方式保护 API 安全,这里还涉及一个叫公钥证书的概念。在数字签名中,使用 RSA 算法生成的公钥去验证签名,但如何保证公钥的合法性是一个问题,公钥证书就是为了解决这个问题出现的。

证书文件记录了公钥信息、认证机构的信息,以及这个认证机构为了证明这个公钥合法性的数字签名,只要看到公钥证书,我们就可以知道认证机构认定了该公钥的合法性。


相关文章:

donation赞赏
thumbsup0
thumbsdown0
暂无评论