此漏洞利用了 ecc-ssh.c 文件中偏置的 ECDSA nonce 生成。Nonce 通过 $sha512(ID\ ||\ sha512(privKey)\ ||\ sha1(data))\ mod\ q$ 生成,导致最高 9 位为零。要恢复私钥,我们需要 60 个签名,但拥有 58 个时仍有 50% 的成功概率。
漏洞由 Bäumer 和 Marcus Brinkmann 发现。
要使用此漏洞利用,您必须安装 sagemath 和 requirements.txt 中列出的 Python 依赖项。
从 60 个使用 PuTTy 或 TortoiseGit 签名的已验证 GitHub 提交中提取 ECDSA 签名。
另一种可能的攻击方式是设置一个恶意 SSH 服务器,受害者连接(使用 PuTTY 或 Pageant)后,经过若干次连接,您就可以获取 60 个签名以恢复私钥。
签名文件必须包含消息哈希、一个空格以及 r 和 s 值(连接在一起)。
公钥文件输入可以是 raw、PEM、DER 或 OpenSSH 格式。
此概念验证使用了 malb 对论文《On Bounded Distance Decoding with Predicate: Breaking the "Lattice Barrier" for the Hidden Number Problem》(https://eprint.iacr.org/2020/1540.pdf) 的部分实现。