数字签名
书信或文件是根据亲笔签名或印章来证明其真实性。但在计算机网络中传送的文电又如何盖章呢?这就需要使用数字签名。数字签名必须能够实现以下三点功能:
- 接收者能够核实发送者对报文的签名。也就是说,接收者能够确信该报文的确是发送者发送的。其他人无法伪造对报文的签名。这就叫做报文鉴别。
- 接收者确信所收到的数据和发送者发送的完全一样而没有被篡改过。这就叫做报文的完整性。
- 发送者事后不能抵赖对报文的签名。这就叫做不可否认。
现在已有多种实现数字签名的方法。但采用公钥算法要比采用对称密钥算法更容易实现。下面就来介绍这种数字签名。
为了进行签名,A用其私钥
SKA
对报文X进行D运算。D运算本来叫做解密运算。还没有加密怎么就进行解密呢?这并没有关系。因为D运算只是得到了某种不可读的密文。A经过D运算得到的密文传送给B。B为了核实签名,用A的公钥进行E运算,还原出明文X。请注意,任何人用A的公钥
PKA
进行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的私钥,而
PKB
和
PKB
分别为A和B的公钥。