这是一个单一数字证书泄露。单一数字证书泄露就是单证书属性字段的选择性泄露,重点就是在实际使用过程中展示必要属性字段,隐藏无关属性字段。具体步骤如下(如图6.3所示)。
图6.3 单一数字证书的选择性泄露协议
(1)Alice产生随机值rv。
(2)Alice把原始值ov和随机值rv做连接,产生临时值tv(tv又称为pre-image),即tv=ov‖rv,符号“‖”表示连接。
(3)Alice调用单向Hash函数产生最终值fv,即fv=Hash(tv)。
Alice把临时值tv和最终值fv及其他相关信息发给CA。CA检测tv、fv的每一个值,确保它们一一对应。然后签名,并用fv替换掉初始值ov,fv就显示在最终的证书上面。
产生随机值rv的目的是抵抗“字典攻击”。如果不添加随机值rv,那么有一些字段的值很容易被猜出来,比如性别,因为只有两个,要么是男,要么是女。具体编程时需要在原始值和随机值之间加上特殊标志符号(比如*)以作区分。例如,原始值为Alice,随机值为abcd,那么临时值tv=Alice*abcd。
下面几步用来检测协议,可以使Alice任意泄露她愿意泄露的信息给Bob。
(1)Alice把含有敏感信息的证书发送给Bob,Bob验证证书。
(2)当Alice认为Bob可以访问相关信息的时候就把敏感信息和相关随机数发送给Bob。(www.daowen.com)
(3)Bob调用Hash函数。
(4)Bob把Hash后的值与证书上的信息相比较。
举例来说,比如Bob需要Alice展示姓名和E-mail。Alice把值Alice*rv1、Alice@163.com*rv2给Bob,Bob调用Hash函数,计算fv1′=Hash(Alice*rv1),fv2′=Hash(Alice@163.com*rv2),然后把fv1′、fv2′与证书上的fv1、fv2作比较。因为证书上面保存的是经过Hash后的值,由于Hash函数的特性,这样就避免了Alice修改数据,也无法从当前值反推回初值;而使用特殊标志符号“*”,可以很容易地找出原始数据。这样既隐藏了证书持有人Alice的部分敏感信息(如性别、生日等),也满足了Bob的要求。图6.4展示了具体步骤。
图6.4 检测协议
从数字证书选择性泄露设计的目标来看,证书中私有属性的机密性是由单向Hash函数的强度和pre-image(就是上面提到的临时值tv)来保证的。在私有属性值后面添加一个随机数就创建了pre-image。添加随机数直至全部长度达到128 bit,那么就足够可以抵抗字典攻击。如果不添加随机数,那么攻击者可以在可能的范围内寻找每一个值来匹配。举一个简单的例子,如果在性别这一栏没有添加随机数,那么攻击者只需要两次调用Hash函数,就可以知道真正的性别;而添加了随机数后,攻击者需要调用2128次Hash函数才能识别出真正的性别。
证书中每个属性的完整性也是由单向Hash函数的强度来保证的。以SHA-1来说,只要输入小于264,那么可以产生160 bit的摘要。从计算角度来看,很难找到相同的碰撞。那么,证书持有者不可能找到一个不同的pre-image,使得Hash过后结果却一样。构建pre-image时,必须要保证可以很清楚地区分属性值V和随机数R。举例来说,或者可以预先决定好随机数的长度,或者V和R有个明确的界定符号。我们采用界定符号的方式。
证书持有人可以在确保pre-image安全的情况下,通过授权的方式来选择性地泄露相关信息,从而达到访问控制的目的。但这种方法也有限制,因为一旦授权实体可以访问preimage,那么证书中没有机制可以阻止那个实体更进一步地泄露信息给其他人。除此以外,为了防止窃听者窃取私有属性的值,检测协议必须是机密的。在信任协商中结合私有属性允许证书持有者直接控制pre-image,而不需要把个人信息存放在数据库中。
私有属性的性能可以通过计算量的大小和存放空间来分析。在计算量方面,单向Hash函数(如SHA-1)和公钥算法签名证书所需要大量的操作相比较,它产生的计算量是比较小的。存放私有属性的空间也是比较小的,当使用SHA-1时,只需要20个字节大小。这和证书数字签名所需要的空间相比较是非常小的。在一些情况下,采用Hash后的值可以明显地缩小证书所需要的空间,比如图像或者生物数据。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。