数字签名
数字签名使用私钥生成一个值,任何持有相应公钥的人都可以验证该值,从而为消息提供真实性、完整性和不可否认性。
Definition
数字签名方案是一种公钥原语,由生成密钥对、使用私钥签署消息和使用公钥验证签名的算法组成,只有私钥持有者才能生成可验证的签名。
Scope
本主题涵盖数字签名方案——RSA-PSS、DSA、ECDSA和EdDSA——在自适应选择消息攻击下的存在性不可伪造性安全目标、先哈希后签名范式,以及签名在证书和软件分发中的作用。它讨论了与消息认证码(公共可验证性和不可否认性)的区别。它不包括共享相同底层假设的公钥加密和密钥交换方案,以及分发验证密钥的证书基础设施。
Core questions
- 私钥如何使其持有者能够生成可验证、不可伪造的签名?
- 自适应选择消息攻击下的存在性不可伪造性保证了什么?
- 为什么消息在签名之前要进行哈希处理,而不是直接签名?
- 签名如何提供对称MAC无法提供的不可否认性?
- 签名如何用于锚定证书和软件更新中的信任?
Key concepts
- 密钥对(签名密钥和验证密钥)
- 存在性不可伪造性
- 自适应选择消息攻击
- 先哈希后签名
- RSA-PSS
- DSA和ECDSA
- EdDSA
- 不可否认性
- 证书签名
Key theories
- 选择消息攻击下的存在性不可伪造性
- 签名的黄金标准安全定义:即使攻击者获得了其选择的许多消息的签名,也无法伪造任何新消息的有效签名;GMR方案首次可证明地实现了这一点。
- 先哈希后签名和不可否认性
- 实际方案签署消息的加密哈希值,从而能够签署任意长度的数据并将签名绑定到内容;因为只有私钥持有者才能签名,所以签名提供了共享密钥MAC无法提供的不可否认性。
Mechanisms
签名时,持有者对消息的哈希值应用私钥操作:RSA-PSS使用私有指数对填充后的哈希值进行指数运算,而(EC)DSA和EdDSA将哈希值与每消息随机数和私有标量结合以生成两个值。验证时重新计算哈希值并应用公钥操作,仅当关系成立时才接受。安全性取决于底层的困难假设和哈希函数的抗碰撞性。
Clinical relevance
数字签名是互联网的信任锚点:证书颁发机构签署TLS证书,操作系统供应商签署软件更新和驱动程序,应用商店签署应用程序,文档平台提供法律认可的电子签名。加密货币通过签名授权每笔交易,代码签名防止篡改的软件被信任。
Evidence & guidelines
签名方案已在FIPS 186(DSA、ECDSA)、RFC 8032(EdDSA)和PKCS #1 / RFC 8017(RSA-PSS)中标准化。法律框架(欧盟eIDAS法规、美国ESIGN法案)赋予合格数字签名法律效力。最佳实践倾向于确定性或对冲随机数(如EdDSA和RFC 6979),以避免ECDSA中随机数重用导致的灾难性密钥泄露。
History
数字签名概念由Diffie和Hellman(1976)与公钥密码学一同引入,并由RSA(1978)首次实现。Goldwasser、Micali和Rivest于1988年提出了第一个在自适应选择消息攻击下可证明安全的方案,确立了现代安全定义。DSA在20世纪90年代标准化,随后椭圆曲线ECDSA以及后来的抗误用EdDSA成为主流。
Key figures
- Shafi Goldwasser
- Silvio Micali
- Ronald Rivest
- Whitfield Diffie
- Martin Hellman
Related topics
Seminal works
- goldwasser1988
- rivest1978
- katz2020
Frequently asked questions
- 数字签名与扫描的手写签名有何不同?
- 扫描图像只是一张图片,可以复制到任何文档上。加密数字签名是根据消息内容和私钥计算的,因此它对签名者和该确切文档都是唯一的,并且任何对内容的更改都会使其失效。
- 为什么签名提供不可否认性而MAC不提供?
- MAC使用共享密钥,因此任何一方都可以生成有效的标签——任何一方都无法证明是另一方生成的。数字签名只能使用私钥创建,而验证者不拥有私钥,因此签名者无法可信地否认曾签署过。