Cao Yi

数字签名

Index

数字签名,Digital Signature,也称“數位簽章”或“公鑰數位簽章”。

在数字时代以前,我们在很多场合通过签名来标识身份,比如书信和契约书上的签名,等等。这些签名或者是按手印,或者是手写,或者是印章,方式多样,但目的都只有一个,就是确定相关人的身份。

数字文件没有物理实体,当然不能用这些方式签名,但它也有它的签名方式,我们一般就称它为数字签名。数字签名广泛应用网络世界中,为网络安全保驾护航。

例如Alice要给Bob发一条带有签名的消息,Bob收到消息后能确认两件事:

  1. 消息是Alice发送的
  2. 消息没有被篡改

数字签名在密码学中,使用的技术是非对称加密技术,在数据加密简介第二部分有简单提到。

借用维基百科的图片说明流程

  1. Alice使用某hash算法对消息生成摘要信息digest_a
  2. Alice使用私钥对摘要信息加密,加密后的文本即是数字签名ds
  3. Alice将数字签名ds以及CA的认证和原信息汇集在一起,并发送给Bob
  4. Bob收到消息后也使用同样的hash算法对消息生成摘要信息digest_b
  5. Bob通过CA得到Alice的公钥
  6. Bob使用Alice的公钥对Alice的签名解密,如果能正常解密,则消息是Alice发送的,如果解压出的内容和摘要信息digest_b相同,则消息没有被篡改

以上第4步,根据hash的原理,如果消息没有被篡改,digest_a和digest_b应该是相同的,但这并不需要去验证,因为第6步里只要Alice的身份没问题,则对签名解密后,得到的内容必然和digest_a相同。

以上第5步,有一个隐患,如果CA系统出了问题,则整个系统便不可靠。这也是数字签名系统里不可避免的缺陷:必须信任CA这个中心化机构。

Alice发送的消息可能被篡改吗?如果要篡改,就需要重新生成消息签名,而这需要Alice的私钥。也就是只要Alice的私钥不泄露,篡改消息是不可能的。所以,一定要保管好自己的私钥,防止身份被冒用。

Bob验证消息的签名通过,只表示这个消息是拥有Alice私钥的人发出来的。所以这里也有一个漏洞,如果Alice想反悔,她可以撒谎说她的私钥被偷了。

只要Alice的私钥不被冒用,那么消息就能确定是不是Alice发送的,而且Alice不能抵赖。当然也基于对CA完全正常的假设。

如果CA被黑。有人冒充Alice身份,并更换了Alice的公钥,然后发送消息给Bob,Bob显然无法知晓Alice的真伪。此时,如果Bob足够警惕,可能去询问Alice是否更新了公钥。同样,如果CA被黑,黑客将CA保存的公钥胡乱篡改一番,即使不传递伪造的消息,也能引起很大的混乱。


参考资料