中国信息协会量子信息分会欢迎您

  • 电话:18510655601
  • |
中国信息协会量子信息分会
科普荟萃
科普荟萃
我的位置: 首页 > 科普荟萃
【现代密码学】科普专栏九:记录一切的幕后助手——摘要算法
发布时间:2020-08-06 16:25
  |  
阅读量:
  |  
作者:
小编

13.jpg

记录一切的幕后助手——摘要算法

撰文 | 康老师


上面几期聊过对称、公钥密码之后,本期进入到密码工具箱介绍的最后一期,我们来聊聊摘要算法。摘要算法输入为任意长度数据,输出为固定长度(这个长度一般较短,在几十字节以内)的摘要值。
而之所以把摘要算法放到最后面说,是因为摘要算法功能上比较单一——只提供完整性安全服务;使用上又很“轻量级”——不像对称密码或公钥密码那样要求数据对齐规整或密码处理流程严格有序。虽然摘要算法从发明以来就属于密码学范畴,但很少使用“摘要密码”这种说法(大部分摘要算法的使用都不涉及密钥),反而是经常被称为摘要函数。别看它容易用,可一点也不简单,没有摘要算法来保障数据完整性,恐怕任何对数据的处理技术都只会越处理导致累积错误越多,完全没有办法使用。新的区块链系统信任体系,就建立在摘要算法的基础之上。
聊到这,也可以列举几个密码范畴对应日常生活的常用易懂类比:对称密码经常被类比为钥匙和锁,“一把钥匙开一把锁”;如上期所述,非对称密码的特色功能是实现数字世界的“签名”;而摘要呢,摘要虽不能给数据上锁,但它能够完美的为数据生成它独有的“数据指纹”,只要有指纹,数据不管“走到哪”,都可以通过验证这个指纹为它验明正身啦。
摘要算法总体特点

摘要算法的总体分类

摘要算法的功能虽然单一,但指代它的各种名称可不少,英文你会见到Hash、MAC(消息认证码)、HMAC(基于哈希函数的消息认证码),中文中摘要算法又会称为杂凑、散列,或干脆就取音译叫哈希算法,摘要算法的输出结果——摘要值又会被称为杂凑值、散列值、哈希值、MAC值、HMAC值。这么多种提法,其中有什么区别呢?从应用角度,可以把摘要算法分为两类:不使用密钥的是常用杂凑算法,如SHA1、MD5等;使用对称密钥,也就是将对称密钥作为算法的另一个输入的,称为消息认证(也就是MAC或HMAC)类算法。从这个角度,就容易按照自身应用情景选择不同的杂凑算法,MAC类算法生成的杂凑值自然称为MAC值,在验证MAC值时需要生成与验证双方共同持有的一个对称密钥的参与,自然限制了该类算法的应用场景一般用于接收方与发送方间对消息的认证。

摘要算法是压缩单向抗碰撞映射

压缩映射的含义是摘要算法将任意长度的消息压缩为较短的固定长度的消息摘要。也就是,摘要值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。

单向性指的是无法通过摘要值反算出消息的性质。根据消息计算摘要值可以很容易,反之则不行。

摘要算法输出的摘要值对每个输入都应该是独一无二的,这种难以发现碰撞的性质称为抗碰撞性(collision resistance)。摘要算法必须确保要找到和该条消息具有相同摘要值的另外一条消息是非常困难的。

摘要算法应用特点

 用摘要算法保障数据完整性方便易行

摘要算法看似简单,而其应用广度和使用频次却可以说是密码“十八般兵器”中最多的。原因主要可以用以下三方面概括:

第一、保障数据完整性的安全需求具有泛在性。

可以说ICT行业的中心任务——记录、存储、处理和传输数据,所有需要保障数据完整性的环节,都要用到摘要算法。从单纯记录时间(时间戳技术)、到各种类型的网络传输报文、到各类电子形式的金融交易记录、到云上存储的海量数据,所有这些数据的可信记录与传输,都需要摘要算法的参与。因此,说它是帮助我们“忠实”记录一切的幕后帮手,可谓实至名归。

第二、各类密码应用系统都需要摘要算法作为一项基础功能

在各类密码应用系统中,无一例外的都需要将任意长度的消息压缩到较短的、固定长度的、唯一性的消息摘要。对称加密系统中,将消息与摘要值连接一起用收发双方A、B共享的密钥加密后发送,就可以保证消息的确来自A并且未被篡改。公钥签名系统中,由于签名运算速度慢,发送方完全没有必要对消息本身签名而采用的都是对消息摘要值签名的办法。基于特征或基于口令的身份认证系统,也都采用将用户特征或输入的口令进行摘要运算,与预先存储的摘要值进行比对的方法实现。就算是随机数生成器,也有一种做法是利用摘要算法生成伪随机数,保证了不同的输入数据产生一个规定长度的不同随机数供密码系统使用。

第三、摘要算法的部署应用具有最大的普适性。

摘要算法一般都是公开性不需保密的,也不涉及特定参数,可以纯软件形态高速运行(当然在对摘要计算有高速要求时如POW型区块链的挖矿竞争情况下也会设计成硬件化运行);摘要算法中除MAC类算法以外,都不涉及密钥的使用,可以单独使用,不需要专门的密码管理系统“随行保障”;摘要算法输出的摘要值不仅对每个输入都是独一无二的,而且很短,很容易进行比较等处理。

摘要算法应用上的易于扩展有利于绑定网络空间不同实体

摘要算法简单到有点“大道至简”的意味,举一点为例,对一段数据的部分或全部重复做摘要计算,并不影响摘要值的安全性,其它密码就很难做到。随着ICT行业的不断创新,网络空间的不断扩展,各类应用系统、安全系统都能利用摘要算法的易于扩展特性,巧妙的连接绑定很多本来无关的实体和数据。例如,保护系统完整性为主的可信计算(trusted computing)技术与基于分布式账本保护数据安全和达成共识的区块链技术,都是建立在摘要算法的扩展应用基础之上的。

可信计算技术使用摘要扩展建立信任链

上文说了摘要算法主要用于保障数据完整性,但通过扩展的设计,摘要算法也同样能够用于保障系统完整性。可信计算技术中基于PCR(平台配置寄存器)的完整性度量就是利用摘要算法的扩展实现了这个过程。PCR是一个能安全存储单个摘要值的硬件寄存器,完整性度量是获取计算平台各部件完整性的特性序列的过程,那通过一个摘要值长度如何获取各个部件完整性特征呢?PCR的操作方式与一般的寄存器不同,从初始的固定状态开始,每一次的写入都按照如下公式进行:                     

1.jpg

即将新写入值与寄存器中的原始值连接起来进行一次摘要计算,其运行结果作为PCR中的新值。通过这种方式,我们只需要数个PCR寄存器(不同的寄存器接收不同类型的度量结果),每个寄存器会以固定次序接收多个度量结果的写入——称为可信扩展,就可以生成和存储特定度量序列的结果,也就是生成了描述平台各组件完整性特征的信任链。 

区块链通过摘要扩展建立全局账本和可信标识

区块链技术在构造每个区块的过程中,通过如下图所示的基于摘要扩展(为每个交易做摘要,再不停的以二叉树形连接摘要值再做摘要)的Merkle树生成方式,形成了标识一段时间内有效交易整体特征值的Merkle根(Merkle 根是所有这些交易的指纹)这一区块内关键数据;而且,每个区块的特征性值,也是通过区块头的哈希值来标识的,每个区块保留上一区块摘要值,通过摘要值的链式接续,链接相邻区块,防止区块被删改替换,保障整个区块链数据的完整性。

2.jpg

不仅如此,区块链中,摘要算法的扩展还用于如下图所示的从公钥生成比特币地址这一公开性可验证的可信标识。这样,任何人都可以单向的验证地址的有效性,也就是具备可追溯性(Provenance/Traceability),而无法获得真正行使转账权的私钥的任何信息。


3.jpg 



4.jpg




康老师 简介

深耕信息安全领域二十余年,从事安全增强系统、密码应用系统及通用软件系统开发、信息安全理论研究、标准规范编研及开发团队管理。参与多项国家863、973、核高基专项等重大科研项目,作为主要完成人编研完成国家/军用标准多项,发表学术论文二十余篇。