1.7 密码功能实现示例
本节从实现角度,给出实现保密性、完整性、真实性和不可否认性等密码功能的典型方法,也是对密码算法的具体应用和总结。
1.7.1 保密性实现
信息保密性保护的目的是避免信息泄露或暴露给未授权的实体。实现保密性保护有三种基本方法:一是访问控制的方法,防止敌手访问敏感信息;二是信息隐藏的方法,避免敌手发现敏感信息的存在;三是信息加密的方法,允许敌手观测到信息的表示,但是无法从表示中得到原始信息的内容或提炼出有用的信息。加密是数据通信和数据存储中实现保密性保护的一种主要机制,保密性保护也是密码技术最初的目标。
对于加密机制的应用,需要考虑密码体制的选取(对称密码体制或者公钥密码体制)、算法的选择、工作模式、填充需要、初始化需要等因素。公钥密码技术和对称密码技术都可以用来实现加密机制,实现保密性保护。一般来说,公钥密码技术加密和解密方式灵活,但是计算成本高,主要应用于信息量不大、分享方式复杂的信息保密性保护,如密钥的协商或加密传输。大量信息传输或存储的保密性保护主要通过对称密码技术完成。公钥密码技术可以为对称密码应用提供密钥协商或安全传输的支撑。
在对称密码实现保密性保护时,尤其需要注意工作模式的安全性。例如,CBC模式下的初始向量一般需要随机产生,而不是只需不重复即可;CTR模式下的计数器值需要每次加密都各不相同,即对于同一个密钥,一个计数器值只能使用一次。
1.7.2 完整性实现
数据完整性保护的目的在于保护信息免受非授权实体的篡改或替代。数据完整性的破坏包括有意或者无意的损坏。数据完整性保护也有两种基本方法:一是访问控制方法,限制非授权实体修改被保护的数据;二是损坏—检测方法,这种方法无法避免数据损坏,但能确保这些损坏能够被检测出来,并能够被纠正或报警。一般通过消息鉴别码(MAC)或数字签名机制来实现完整性保护。在特殊应用中,在确保杂凑值无法被修改时,也可以单纯采用杂凑算法保护数据的完整性。例如,用于系统镜像完整性保护的杂凑值往往被存储在可信计算模块或一次性编程ROM中。下面主要介绍利用MAC和数字签名机制实现完整性保护的方法。
1.消息鉴别码实现完整性
对称密码和杂凑算法都可用于消息鉴别码的生成。基于对称密码算法生成消息鉴别码时,一般对消息使用CBC模式进行加密,取密文的最后一个分组作为消息鉴别码。但需要注意的是,使用CBC模式生成MAC时,不能使用初始向量(初始向量为全0),而且消息长度需要双方预先约定。利用杂凑算法生成消息鉴别码是应用中经常采用的方式,相应的技术称为HMAC,具体的产生过程在本书1.4.3节中已经介绍。
基于MAC的消息完整性保护过程如图1-31所示,MAC往往以消息标签的形式存在。消息发送者针对所发送的消息生成一个MAC作为消息标签,并将该标签和消息传输给接收者;消息接收者在将消息作为真实消息接收之前,通过共享的密钥和接收到的消息重新计算MAC,验证计算出的MAC是否和接收到的MAC一致,如果二者一致则认为接收到的消息是完整的。
图1-31 基于MAC的消息完整性保护过程
2.数字签名实现完整性
数字签名也可以看作是标签的一种。基于对称密码或者杂凑算法的完整性保护机制能够确保接收者接收消息之前的消息完整性,但是不能防止接收者对消息的伪造;基于公钥密码技术的数字签名不仅可以防止敌手对消息进行篡改,还能防止接收者对消息进行伪造,即同时实现消息发送行为的不可否认性。
基于数字签名的消息完整性保护流程如图1-32所示。消息发送者使用私钥对发送的信息进行签名,并将签名结果作为标签,连同消息一起发送给接收者;接收者用公钥对签名信息进行验证,即利用接收到的消息及标签,以及发送方的公钥来验证接收到的消息的完整性。为了提升效率和安全性,方案还引入了杂凑函数,先对要签名的消息进行压缩,然后对压缩后的消息摘要进行签名产生标签。由于杂凑函数的引入,签名的对象变成消息摘要,而不是消息本身,从而减少了签名计算过程的计算量。
图1-32 基于数字签名的消息完整性保护流程
1.7.3 真实性实现
实现信息来源真实性的核心是鉴别。使用密码技术可以安全地实现对实体身份的鉴别。常用的鉴别方式包括:基于对称密码、公钥密码等密码技术的鉴别,基于静态口令的鉴别,基于动态口令的鉴别,以及基于生物特征的鉴别。后面三种鉴别方式虽然不是直接基于密码技术进行鉴别的,但在鉴别过程中仍需密码技术提供保护或支撑。
1.基于密码技术的鉴别机制
基于密码技术鉴别机制的基本原理是:基于声称者知道某一秘密密钥这一事实,实现验证者对声称者身份的鉴别。对称密码技术和公钥密码技术都可用于鉴别机制的实现,详细的鉴别协议已经在1.6.2节中介绍。这里给出一个基于密码技术鉴别的框架,如图1-33所示。使用对称密码技术和公钥密码技术进行鉴别都可以用该框架进行描述。
图1-33 基于密码的鉴别方案的基本框架
基于对称密码技术的最简单的鉴别方法是声称者和验证者共享一个对称密钥。声称者用该密钥加密某一消息或计算该消息的MAC。如果验证者能够成功解密消息,或者验证杂凑值是正确的,那么验证者相信消息来自声称者。被加密或被杂凑的消息内容通常是一个非重复的值,以抵抗重放攻击,也可以使用“挑战—响应”机制来抵抗重放攻击(1.6.2节中“二次传递”鉴别方式)。
基于公钥密码技术的鉴别方法也是类似的。声称者使用私钥对某一消息进行签名,验证者使用声称者的公钥验证签名结果的有效性。如果签名能够验证通过,那么验证者相信声称者是声称者本人。另外,消息中也可以包含一个非重复值以抵抗重放攻击。
1)在线认证服务器
如果每一对声称者和验证者都共享一对密钥,将会导致“密钥爆炸”。针对密钥爆炸问题,可以通过引入中心在线认证服务器(这里“认证服务器”是沿用通俗的叫法,实际上完成的是鉴别功能)来解决。有两种中心认证在线服务器的部署方式,如图1-34所示。
图1-34 在线中心认证服务器部署
在图1-34的两种方式中,声称者和验证者之间都不共享密钥,但是都和中心认证服务器共享密钥。在方式一中,声称者用它的密钥进行加密、签名等操作,然后发送给验证者。因为验证者与发送者之间没有共享密钥,因此不能直接解密/验证,所以验证者将鉴别消息转发给中心认证服务器。中心认证服务器完成解密或者验证后,再用其和验证者共享的密钥,保护鉴别信息,并将其发送给验证者,验证者可以验证鉴别信息。在第二种方式中,声称者首先从认证服务器中获得一个许可证,并将该许可证发送给验证者。声称者和中心认证服务器之间的通信用他们共享的密钥保护。许可证用中心认证服务器和验证者之间的共享密钥保护,因此验证者能够解密/验证许可证。著名的Kerberos系统就是方式二的一个具体实例。
2)离线认证服务器
基于对称密码的鉴别方案需要维持一个在线服务器,导致其在分布式网络中的应用存在困难。利用公钥密码技术可以避免使用在线认证服务器。基于公钥密码技术的鉴别方案的典型代表是公钥基础设施(PKI)系统。只要验证者拥有声称者的证书,就可以独立地完成对声称者身份的鉴别。但是,PKI系统中有效的和已撤销的证书列表仍需要从服务器获取。相比于在线认证服务器,离线认证服务器可以避免鉴别过程中与在线服务器交互而带来的时间延迟,并节省服务器的通信容量,同时可以消除服务器的暂时故障对鉴别过程的影响。关于PKI技术的相关内容已经在本书1.5.3节进行了介绍。
2.基于静态口令的鉴别机制
静态口令或者个人识别码(PIN)是最常用的鉴别信息之一,也是很多人口中的“密码”。直接使用口令进行鉴别有许多脆弱点,最严重的是外部泄露和口令猜测,以及窃听、重放攻击等。用密码技术可以有效提升口令鉴别过程的安全性。在口令传输过程中,可以采用对称加密、杂凑算法、公钥加密等方式保证口令的安全性。一个典型的使用杂凑算法保护的口令鉴别方案如图1-35所示,该方案能够有效抵御口令窃听和重放等攻击,为防止对口令的字典攻击,还可以加入“盐(salt)”值,对存储的口令进行保护。
在图1-35中,声称者使用杂凑函数对口令p′和身份标识id进行杂凑函数计算,输出q′,q′与时变值r一起通过杂凑函数g计算,生成t′。t′、id和r打包在一起形成鉴别消息。验证者接收到鉴别消息后,利用接收到的r和自己存储的q值(口令p和id组合的杂凑值),通过杂凑函数运算生成t,并与接收到的t′进行对比,完成对鉴别消息的验证。其中r是一个非重复的值,可以是一个时间值或者单向递增值。由于r不会重复,使得鉴别消息的t′值在每次鉴别时都不一样,抵御了重放攻击;杂凑函数的使用使得无法从t′得到真实的口令信息,从而抵御了在链路上对口令的窃听攻击。
图1-35中“一次传递”的鉴别方式需要验证者验证时变值r是否被使用过,这一点通常是比较困难的。使用“挑战—响应”机制不仅可以解决这个问题,还能有效提升抵抗重放攻击的能力。在“挑战—响应”方案中,验证者首先给声称者发送一个确定的r值,此时产生非重复值r的能力完全掌握在验证者手中。但是,在这种情况下,通信代价随之增加,因为需要增加一次挑战消息发送的通信。
图1-35 使用杂凑算法保护的口令鉴别方案
3.基于动态口令的鉴别机制
动态口令的使用主要用于抵抗重放攻击。在基于动态口令的鉴别方案中,用户每次使用的口令都是不同的。通常情况下,声称者和验证者共同使用一个初始状态同步的随机序列发生器,或者维持同步时钟。具体来说,声称者拥有一个存储秘密值(又称种子密钥)的动态令牌,动态令牌采用密码算法(如分组密码算法或杂凑算法),将秘密值、时间戳(或者计数器值)和其他一些信息作为输入,计算动态口令信息。由于声称者和验证者维持相同口令序列发生器,并保持同步,所以验证者能够产生正确的口令信息,从而验证声称者的身份。时间戳或者计数值的引入使得动态口令只有一次有效。我国密码行业标准GM/T 0021-2012《动态口令密码应用技术规范》规定了动态口令系统中密码技术的应用要求。
4.基于生物特征的鉴别机制
当对一个自然人实体进行鉴别时,一些较为稳定的生物特征可以作为鉴别信息,包括指纹、声音、虹膜、人脸等。生物特征识别技术在本质上与口令类似,但是因为生物特征与自然人实体的不可分离性及信息量大的特点,所以,基于生物特征的鉴别机制在一定程度上避免了口令猜测、外部泄露等攻击。但是,与传统的静态口令鉴别机制面临的问题相同,基于生物特征的鉴别机制也容易受到窃听和重放攻击。因此,基于生物特征的鉴别机制一般不直接用于远程鉴别,而只用于设备对自然人的鉴别,身份验证通过后,设备再使用密码技术与应用服务器进行安全交互。例如,在线快捷身份鉴别(Fast IDentity Online,FIDO)联盟提出的通用鉴别框架协议(UAF)就是基于该流程设计。
1.7.4 不可否认性实现
使用不可否认功能,虽然不能防止通信参与方否认通信交换行为的发生,但是能够在产生纠纷时提供可信证据,有利于纠纷解决。网络环境中的不可否认可以分为起源的不可否认和传递的不可否认,主要通过数字签名技术来实现。
1.起源的不可否认
起源的不可否认关系到某一特定方是否产生了特定数据的证据。产生证据的主体是发起者,在某些场景下也可以有可信第三方的参与。起源不可否认证据要把各种信息片段用无可辩驳的方式连接起来,这些信息至少包括发起者的身份和数据的精确值。起源不可否认证据产生的方法包括以下两种。
1)使用发起者的数字签名
一个提供数据起源的不可否认的机制是使用发起者的数字签名。发起者对要保护的数据用自己的私钥进行签名,并将其发给接收者,签名就是不可否认证据的主要内容。数字签名被接收者接收保存,在日后发生纠纷时作为证据支持纠纷解决。证据验证过程中公钥的合法性必须得到保证,公钥的合法性可以用公钥证书来保证。由于公钥证书存在被撤销的风险,因此签名证据生成过程中需要包含准确的时间信息。如果证据生成时间在证书有效期内,则证据有效,反之证据无效。
2)使用可信第三方数字签名
可信第三方可以作为发起者的担保。通过这一机制,发起者把数据传递给可信第三方。可信第三方对数据、发起者身份和其他所需信息(如时间信息)进行签名。这个签名被作为证据传递给接收者用于验证和证据储存。发起者和可信第三方之间的通信需要完整性和真实性保护。
发起者也可以将数据的杂凑值发送给可信第三方,用于生成不可否认证据。用数据的杂凑值代替数据可以减少与可信第三方的通信量。此外,由于可信第三方不知道数据的具体内容,这种方法还可以保证原数据的保密性。
2.传递的不可否认
传递的不可否认是关于某一特定接收者接收到特定数据的证据。在这种情形下,产生证据的主体是接收者,在某些场景下也可以有可信第三方参与,证据验证者是发起者。传递不可否认将各种信息连接起来,形成证据。这些信息至少包括接收者的身份和数据的精确值。传递不可否认证据产生的方法包括三种。
1)使用接收者的签名确认
接收者收到消息后,产生一个确认信息送回给发起者。这个确认信息包含对以下信息的数字签名:被传递的数据副本或其杂凑值,以及其他信息(如接收时间)。签名必须由接收者或者担保接收者的可信第三方生成。类似起源不可否认,传递不可否认证据的签名也需要考虑证书撤销和有效期问题。
2)使用可信传递代理
接收者签名不能防止接收者阅读了信息内容但是拒绝生成证明的情况。可信传递代理可以解决这个问题。可信传递代理介入发起者和接收者之间的通信链路,在接收者接收消息之前,首先生成不可否认证据,然后再将信息转发给接收者。
3)使用两阶段传递
发送者在发送消息给接收者之前,先发送一个预接收消息给接收者。预接收消息是一个接收者不能解释其内容的数据标识,如数据的杂凑值。接收者对预接收消息进行签名,将其作为一个确认消息发给发送者。发送者在验证预接收消息的确认消息后,发送完整消息给接收者。接收者对消息进行签名生成确认消息,回传给发送者。预接收消息确认消息和完整消息确认消息共同作为接收不可否认证据。两阶段传递不仅证明了接收到消息的事实,而且还证明了通信链路的状态。在需要时间证明的情况下,预接收消息确认信息还可以包含时间信息,用于证明接收时间。