我们在本体技术视点 | ECDSA中的随机数重用会导致什么问题?中介绍了 ECDSA 数字签名算法中随机数的重要性。随机数不仅在 ECDSA 这样一个算法中起到重要作用,它更是许多密码机制的安全性保障。在本期的技术视点中,我们将接着围绕 ECDSA 这一在区块链领域中重要的密码学算法,谈谈 ECDSA 算法中为什么需要对消息的哈希摘要签名,而不是直接对消息进行签名。
回顾ECDSA
伪造签名
防止伪造
我们看到,其实在这样一种情况下,该伪造的签名结果能通过验证,是由于直接将(原始消息的)哈希值送入了验证公式中,而没有验证原始消息和哈希值的正确性。防止伪造的方法也很简单,就是 ECDSA 验签时提供原始消息,并通过原始消息来计算其哈希值,然后再利用该哈希值去验证。简单地说,由于哈希函数的单向性特点,计算上不可能从哈希摘要推出其原像,即原始消息,由此来保证安全性。
同样,我们也得到了一个简单的提示:ECDSA 签名算法需要有对消息进行哈希的前置处理。尤其是要签名的消息恰好落在 ECDSA 的消息空间时,更不应该偷懒省略前置哈希处理。
动手试一试
中本聪在数字资产创世块的 coinbase 交易中留下了广为流传的一句话,“The Times 03/Jan/2009 Chancellor on brink of second bailout for banks” 。
而地址1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa 和该创世块相关。任何能通过此地址验证的签名都被认为是中本聪所生成的。
通过相关验证代码,我们可以发现该组消息哈希值和签名通过了创世块相关公钥的验证。Albacore Labs 团队创建了一个小工具来展示这种伪造方法,小伙伴可以通过网址 https://albacore.io/faketoshi 来生成能通过中本聪公钥验证的签名,体会一把当中本聪的感觉。
总结
ECDSA 是现行大多数区块链系统中的重要算法,利用其不可抵赖等特性可以完成交易发送等功能。因此,我们更加有必要充分认识 ECDSA 算法,了解它在理论和实现上的各个方面。在本期技术视点中,我们看到在 ECDSA 签名中前置哈希算法的重要性。我们也欢迎小伙伴们和本体技术团队通过各种方式来多多交流相关区块链技术。