每个 ECDSA 签名都给出 s·k = z + r·d (mod n)。如果已知每个 k 的最高几位为零,或者这些位通过侧信道泄露,那么每个签名都是关于私钥 d 的一个近似线性方程;方程足够多时,对由 (r, s, z) 三元组构造的矩阵做格基约简(LLL 或 BKZ),就能求出 d。这就是 Boneh 和 Venkatesan(1996年)提出的隐藏数问题,Howgrave-Graham 和 Smart(2001年)以及 Nguyen 和 Shparlinski(2002年)将其应用于 DSA。
每个签名泄露几位,有几百到几千个签名就足够了;最新的技术甚至能利用不到一位的泄露。有记录的案例包括 Minerva(2019年,智能卡和库中与位长相关的时序泄露)、TPM-Fail(2019年,Intel 固件 TPM 和一款 STMicroelectronics TPM)、LadderLeak(2020年),以及2019年的“Biased Nonce Sense”研究,该研究利用过短的 nonce 从真实的比特币和以太坊签名中恢复出了密钥。
防御措施:在整个取值范围内均匀生成 nonce(按 RFC 6979 确定性生成,或采用对冲方式),使用不会泄露 nonce 位长的常量时间代码进行计算,并把任何已报告的 nonce 泄露视为密钥泄露,而不是无关紧要的小缺陷。