数字签名(Digital Signature,也称“數位簽章”或“公鑰數位簽章”)是一种基于密码学技术的身份验证和数据完整性保障机制。
在数字时代以前,我们在很多场合通过签名来标识身份,比如书信和契约书上的签名,等等。这些签名或者是按手印,或者是手写,或者是印章,方式多样,但目的都只有一个,就是确定相关人的身份。
数字文件没有物理实体,当然不能用这些方式签名,但它也有它的签名方式,我们一般就称它为数字签名。数字签名广泛应用网络世界中,为网络安全保驾护航,如电子合同、软件分发(如验证软件未被篡改)、区块链交易、电子邮件签名(如PGP)以及SSL/TLS证书验证等场景。
以下举例说明数字签名的流程。
假如Alice要给Bob发一条带有签名的消息,Bob收到消息后能确认两件事:
数字签名在密码学中,使用的技术是非对称加密技术,在数据加密简介第二部分有简单提到。非对称加密基于公钥和私钥对,通常私钥用于签名,公钥用于验证。
借用维基百科的图片说明流程
以上第4步,根据hash的原理,如果消息没有被篡改,digest_a和digest_b应该是相同的。在第6步中,Bob使用公钥解密数字签名得到digest_a,并与自己计算的digest_b比较。若两者一致,则确认消息未被篡改且来自Alice。
CA(证书颁发机构)负责颁发数字证书,证明公钥的所有者身份。数字证书包含公钥、身份信息以及CA的签名,确保公钥的可信性。以上第5步,有一个隐患,如果CA系统出了问题,则整个系统便不可靠。这也是数字签名系统里不可避免的缺陷:必须信任CA这个中心化机构。
Alice发送的消息可能被篡改吗?如果要篡改,就需要重新生成消息签名,而这需要Alice的私钥。也就是只要Alice的私钥不泄露,篡改消息是不可能的。所以,一定要保管好自己的私钥,防止身份被冒用。
Bob验证消息的签名通过,只表示这个消息是拥有Alice私钥的人发出来的。所以这里也有一个漏洞,如果Alice想反悔,她可以撒谎说她的私钥被偷了。
不可否认性是指发送者无法否认其发送的消息,因为数字签名依赖于私钥,而私钥由发送者独有。只要Alice的私钥不被冒用,那么消息就能确定是不是Alice发送的,而且Alice不能抵赖。当然也基于对CA完全正常的假设。
如果CA被黑。有人冒充Alice身份,并更换了Alice的公钥,然后发送消息给Bob,Bob显然无法知晓Alice的真伪。此时,如果Bob足够警惕,可能去询问Alice是否更新了公钥。同样,如果CA被黑,黑客将CA保存的公钥胡乱篡改一番,即使不传递伪造的消息,也能引起很大的混乱。
参考资料