算法和术语
有许多数字签名算法,它们都是公钥算法,用秘密信息对文件签名,用公开信息去验证。有时签名过程也叫“用私钥加密”,验证过程也叫“用公钥解密”,这会使人误解,并且仅仅只对RSA这个算法而言才是这样,而不同的算法有不同的实现,例如有时使用单向Hash函数和时间标记对签名和验证过程进行处理要增加额外的步骤。许多算法可用作数字签名,但不能用作加密。
一般地,提到签名和验证过程通常不包括任何算法的细节。用私钥K签名信息表示为:
SK(M).
用相应的公钥验证信息表示为:
VK(M).
在签名时,附在文件上的比特串叫数字签名(在上面的例子中,用私钥对文件的单向Hash值加密)或者就叫签名。信息的接收者用以确认发送者的身份和信息的完整性的整个协议叫做鉴别。这些协议进一步的细节将在3.2节中讨论。
多重签名
Alice和Bob怎么对同一数字文件签名呢?不用单向Hash函数,有两种选择。第一种选择是Alice和Bob分别对文件的副本签名,结果签名的信息是原文的两倍。第二种就是Alice首先签名,然后Bob对Alice的签名再进行签名,这是可行的,但是在不验证Bob的签名的情况下就验证Alice的签名是不可能的。
采用单向Hash函数,多重签名是容易的:
(1)Alice对文件的hash签名。
(2)Bob对文件的hash签名。
(3)Bob将他的签名交给Alice。
(4)Alice把文件、她的签名和Bob的签名发给Carol。
(5)Carol验证Alice和Bob的签名。
Alice和Bob能同时或顺序地完成(1)和(2),在(5)Carol可以只验证其中一人的签名而不用验证另一人的签名。
抗抵赖和数字签名
Alice有可能用数字签名作欺骗,并且无人能阻止她。她可能对文件签名,然后声称并没有那样做。首先,她按常规对文件签名,然后她以匿名的形式发布她的私钥,故意把私钥丢失在公共场所,或者只要假装做上面两者中的一个。这样,发现该私钥的任何人都可装成是Alice对文件签名,于是Alice就声明她的签名受到侵害,其他人正在假装她签名云云。她否认对文件的签名和任何其他的用她的私钥签名的文件,这叫做抵赖。
采用时间标记可以限制这种欺骗的作用,但Alice总可以声称她的密钥在较早的时候就丢失了。如果Alice把事情做得好,她可以对文件签名,然后成功地声称并没有对文件签名。这就是为什么我们经常听到把私钥隐藏在防拆的模块中的原因,这样,Alice就不可能接近和乱用私钥了。
虽然没有办法阻止这种可能的乱用,但可以采取措施保证旧的签名不会失效的(例如,Alice 可能有意丢失她的密钥,以便不用对昨天从Bob那里买的旧车付帐,在这个过程中,Alice使她的银行帐户无效)。数字签名文件的接收者持有签名的时间标记就能解决这个问题[453]。
一般的协议在[28]中给出:
(1)Alice对信息签名。
(2)Alice产生一个报头,报头中包含有些鉴别信息。她把报头和签名的信息连接起来,对连接的信息签名,然后把签名的信息发给Trent。
(3)Trent验证外面的签名,并确认鉴别信息。他在Alice签名信息中增加一个时间标记和鉴别信息。然后对所有的信息签名,并把它发给Bob和Alice。
(4)Bob验证Trent 的签名、鉴别信息和Alice的签名。
(5)Alice验证Trent发给Bob的信息。如果她没有发起这个信息,她很快就会大喊大叫了。
另一个方案是在事后有劳Trent[209]。Bob在接收到签名信息后,他可能把副本发给Trent验证,Trent能够证实Alice的签名的有效性。
数字签名的应用
数字签名最早的建议应用之一是用来对禁止核试验条约的验证[1454,1467]。美国和前苏联(还有人记得苏联吗?)互相允许把地震测试仪放入另一个国家中,以便对核试验进行监控。问题是每个国家需要确信东道国没有篡改从监控国家的地震仪传来的数据。同时,东道主国家需要确信监测器只发送规定的需要监测的信息。
传统的鉴别技术能解决第一个问题,但只有数字签名能同时解决两个问题。东道国一方只能读,但不能窜改从地震测试仪来的数据;而监督国确信数据没有被窜改。