数字签名

通过加密技术证明数字数据创建者的身份真实性以及数据未被篡改的机制。基于公钥加密和哈希函数的组合实现。

数字签名 (digital signature) 是通过加密技术保证数字文档"由谁创建"(身份认证) 和"内容是否被篡改"(完整性验证) 的机制。它相当于纸质文档上的手写签名或印章,但因有密码学的支撑,伪造极其困难。数字签名在电子合同、软件分发、电子邮件认证等场景中发挥着数字社会信任基石的作用。

数字签名的工作原理分为三个步骤。第一步,签名者计算文档的哈希值 (固定长度的摘要)。第二步,用签名者的私钥对哈希值进行加密,生成签名数据。第三步,验证者用签名者的公钥解密签名数据,并与自行计算的文档哈希值进行比对。如果两者一致,就证明文档确实由签名者本人创建,且签名后未被篡改。

字符数与数字签名的关联体现在哈希函数的特性上。SHA-256 无论输入数据长度如何,始终输出 256 位 (64 个十六进制字符) 的哈希值。1 个字符的文本和 100 万个字符的文本,哈希值长度完全相同。但只要输入文本改变哪怕 1 个字符,哈希值就会变得截然不同,这正是篡改检测的原理所在。

数字签名的数据大小因算法而异。RSA-2048 的签名为 256 字节,ECDSA (P-256) 的签名约为 64 字节。签名数据会附加到文档中,导致文档整体体积增大。PDF 的数字签名除了签名数据本身,还会嵌入证书链和时间戳,通常增加数 KB 到数十 KB 的体积。

中国于 2005 年实施《电子签名法》,赋予符合特定条件的电子签名与手写签名同等的法律效力。e 签宝、法大大、上上签等电子合同服务均建立在这一法律框架之上。无论合同文本字数多少,数字签名的法律效力不受影响。此外,中国还推行了基于 SM2/SM3 国密算法的数字签名标准,在政务和金融领域广泛应用。

代码签名 (code signing) 是数字签名在软件分发领域的应用。通过对应用程序的可执行文件进行签名,保证开发者身份和代码完整性。未经签名的软件会被操作系统弹出警告,因此代码签名在实际操作中已成为必备环节。

分享这篇文章