主要观点:
- 介绍了预哈希(prehashing)这一在数字签名方案中常用的范式及其问题,指出在数学世界中签名方案无哈希,而实际应用中消息大小可能变化,引出流签名相关问题及解决方案。
- 并非所有签名方案都能轻易通过将签名方案分解为哈希函数和哈希输出的签名来解决使用 HSM 和远程预言机的问题,NIST 为此标准化了四个方案,但这些方案相互排斥且描述不佳。
- 提出了解决方案,主要技巧是将私钥从初始化(init)移到最终完成(finalize),使消息标识符仅依赖于公钥,ML-DSA 就是这样做的,NIST 也认可此做法。
- 解决方案的第一部分几乎完全解决了 ML-DSA 的问题,还提到了其他情况的解决方案,如对于 SLH-DSA 需多次哈希,可通过协议来解决预哈希的烦恼,如签名数据的哈希等。
- 引出“坏地方”(HashML-DSA 和 HashSLH-DSA),这是将协议问题推到原语层导致的情况,定义复杂且存在问题,如验证者需知道签名方式,哈希作为不可信输入存在安全风险,应忽略其存在而使用定义明确的签名方案。
关键信息:
- 签名方案的数学定义包含三个函数(G、S、V)及相应映射。
- 实际应用中消息大小可变,引出流签名相关问题及解决方案。
- NIST 标准化的四个签名方案及其特点。
- ML-DSA 中通过特定方式实现签名方案分解及相关代码示例。
- 其他情况的解决方案及通过协议定义系统的重要性。
- HashML-DSA 和 HashSLH-DSA 的问题及不良影响。
重要细节:
- 数学定义中签名方案各函数的具体映射及安全要求。
- 流签名中
sign_init、sign_update、sign_finalize等函数的作用及变化。 - NIST 标准化方案的相互关系及描述情况。
- ML-DSA 中消息标识符与公钥、私钥的关系及相关代码实现。
- 协议在解决预哈希问题及定义系统中的作用及举例。
- HashML-DSA 和 HashSLH-DSA 中两种签名方式及验证问题。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。