书信或文件是根据亲笔签名或印章来证明其真实性。但在计算机网络中传送的文电又如何盖章呢?这就要使用数字签名。数字签名必须保证能够实现以下三点功能:
(1)接受者能够核实发送者对报文的签名。也就是说,接收者能够确信该报文的确实发送者发送的。其他人无法伪造对报文的签名。这就叫做报文鉴别。
(2)接收者确信所收到的数据和发送者发送的完全一样而没有被篡改过。这就叫做报文的完整性。
(3)发送者事后不能抵赖对报文的签名。这就叫做不可否认。
现在已有多种实现数字签名的方法。但采用公钥算法要比采用对称密钥算法更容易实现。下面就来介绍这种数字签名。
为了进行签名,A用其私钥SKA对报文X进行D运算。D运算本来叫做解密运算。还没有加密怎么就进行解密呢?这并没有关系。因为D运算只是得到了某种不可读的密文。我们写上的是“D运算”而不写上“解密运算”就是为了避免产生这种误解。A把经过D运算得到的密文传送给B。B为了核实签名,用A的公钥进行E运算,还原出明文X。请注意,任何人用A的公钥PK进行E运算后都可以得出A发送的明文。可见D运算和E运算都不是为了解密和加密,而是为了进行签名和核实签名。
下面讨论一下数字签名为什么具有上述的三点功能。
因为除A外没有被人持有A的私钥SKA,所以除A外没有别人能产生密文DSKA(X)。这样,B就相信报文X是A签名发送的。这就是报文鉴别的功能。同理,其他人如果篡改过报文,但并无法得到A的私钥SKA来对X进行加密。B对篡改过的报文进行解密后,将会得出不可读的明文,就知道收到的报文被篡改过。这样就保证报文完整性的功能。若A要抵赖曾发送报文给B,B可把X及DSKA(X)出示给进行公证的第三者。第三者很容易用PKA去证实A确实发送X给B。这就是不可否认的功能。这里的关键都是没有其他人能够持有A的私钥SKA。
但上述过程仅对报文进行了签名。对报文X本身却未保密。因为截获到密文DSKA(X)并知道发送者身份的任何人,通过查阅手册即可获得发送者的公钥PKA,因而能知道报文的内容。若采用下图所示方法,则可同时实现秘密通信和数字签名。图中SKA和SKB分别为A和B的私钥,而PKA和PKB分别为A和B的公钥。
深圳 · 龙岗 · 大运软件小镇22栋201
电话:400 182 8580
邮箱:szhulian@qq.com