5.3 直接方式的数字签名技术

5.3 直接方式的数字签名技术

直接数字签名方案中参与的实体只包括通信收发双方,通常使用公钥密码技术作为数字签名的基础。假设接收方知道发送方的公钥,数字签名就是将消息用发送方的私钥进行加密,或者是用私钥对经过Hash运算后的消息所产生的摘要进行加密运算。在此,利用RSA公钥密码体制来说明直接数字签名的大概过程,较为详细的介绍将在5.5节进行。

若选择发送方的公钥e=17,模n=153,私钥d=113,待签名的消息m=7,则发送方的签名为

s=md mod n=7113 mod 143=24

然后将签名s=24和原始消息m=7都发送给接收方。接收方收到这些信息后,根据发送方的公钥和模可以对签名进行验证,如果

m′=se mod n=2417 mod 143=7=m

成立,则签名有效;否则,签名无效。

消息的保密性可以通过使用接收方的公钥或者两者共有的密钥进行加密。值得注意的是,必须先进行数字签名然后再实施保密性加密措施。这是因为如果发生纠纷,第三方必须可以读取签名和消息。而如果之前的签名是在加密的消息上进行的,那么第三方还需要借助于收发双方的密钥才可以读取消息本身。然而,如果签名是在加密之后进行的,那么可以直接将接收方提供的他所接收到的消息明文和签名给第三方来进行签名的验证。

所有的直接签名方式都存在一个弱点,就是签名方案的有效性取决于发送方私钥的安全性。如果发送方随后称他的私钥被窃了,那么他就可以对自己所签署的文件予以否认,因为其他人可以利用他丢失的私钥构造出合法的签名。私钥管理机构可能会对此现象起到一定的管制作用,但是却不能解决这个问题。一个较好的解决方案是要求签名者对签署消息的日期和时间都进行签名,并且私钥丢失需要及时报送给密钥管理中心。然而随之也会产生这样一种威胁:一些私钥的确在某一时刻被窃取了,然后盗窃者可以用该密钥伪造一个签名并且把签署时间改成盗窃之前的时刻。