1. ECDSA签名算法基础解析
ECDSA(Elliptic Curve Digital Signature Algorithm)是比特币、以太坊等区块链系统广泛采用的数字签名方案。它比传统RSA签名更高效,能在更短的密钥长度下提供同等安全性。理解ECDSA的工作原理是破解相关CTF题目的第一步。
签名过程的核心数学原理基于椭圆曲线离散对数问题(ECDLP)。假设我们有一条定义在有限域上的椭圆曲线,选取一个基点G作为生成元。私钥d是一个随机大整数,公钥Q则是dG的曲线点。签名时需生成临时随机数k(称为nonce),计算点kG的x坐标作为r值,然后用私钥d和消息哈希h计算出s值。完整的签名就是(r,s)这对数值。
在实际CTF题目中,最常见的漏洞模式是随机数重用。如果同一个k值被用于多次签名,攻击者可以通过解方程组恢复私钥。另一种典型漏洞是参数泄露,比如题目可能故意给出私钥d或k值的部分信息。
2. 题目分析与漏洞定位
回到PWNHUB六月赛的例题,题目给出了关键的r和s值:
r = 827738947342412163466256986352463260575568151152429823167
s = 827738947342412163577310637036310636847677110838127448036
观察这两个数值可以发现前16位完全相同(8277389473424121),这种相似性暗示可能存在随机数重用或参数构造缺陷。更可疑的是题目中私钥secret同时被用作签名时的随机数k,这直接违反了ECDSA的安全准则——k值必须是一次性随机数。
通过逆向推导签名公式:
s ≡ k⁻¹(h + r*d) mod n
当k等于私钥d时,公式可简化为:
s ≡ d⁻¹(h + r*d) mod n
=> s*d ≡ h


1838

被折叠的 条评论
为什么被折叠?



