不要过度扩展您的不经意传输 - Trail of Bits博客
Joop van de Pol
2023年9月20日
密码学, 阈值签名
我们在一个阈值签名方案中发现了一个漏洞,允许攻击者恢复基于不经意传输(OT)的阈值ECDSA实现的签名密钥。阈值签名协议的恶意参与者可以在OT扩展子协议期间执行选择性中止攻击,恢复其他方的秘密值,并最终恢复签名密钥。使用此密钥,攻击者可以冒充用户身份、获得关键系统的控制权或窃取金融资产。虽然我们还不能披露受此漏洞影响的客户端软件,但我们认为这对其他实现MPC协议的开发者具有指导意义。
防范此漏洞很简单:由于攻击依赖于在多个协议轮次中引发选择性中止,惩罚或排除导致选择性中止的参与者就足够了。尽管如此,这仍然是一个常见问题的典型例子,往往导致严重甚至关键的问题:学术界做出的假设与试图在实际系统中高效构建这些协议的实现者之间的脱节。
阈值签名方案
阈值签名方案(TSS)是强大的密码学对象,允许对数字签名方案的签名密钥进行去中心化控制。它们是更通用的多方计算(MPC)的特定应用,旨在去中心化任意计算。每个TSS协议通常针对特定的数字签名方案定义,因为不同的签名方案需要不同的计算来创建签名。
当前的研究旨在为各种数字签名方案定义高效的TSS协议。效率目标包括不同参与者之间的计算和通信。通常,TSS协议依赖于MPC中使用的标准技术,如秘密共享、零知识证明和乘法到加法转换。
阈值ECDSA
ECDSA签名方案被广泛使用。然而,ECDSA的阈值方案通常比其他签名方案更复杂。这是因为ECDSA签名需要计算秘密值的模逆。
各种MPC技术可用于分配此模逆的计算。目前,ECDSA阈值签名方案的一项工作使用同态Paillier加密方案来实现这一目的,如Lindell等人、Gennaro等人的工作及后续工作所示。本篇博客文章将重点关注依赖于不经意传输(OT)的方案,如Doerner等人的工作和后续工作,或Cait-Sith。
在解释OT是什么之前,应该注意到基本变体相对低效。为了缓解这个问题,研究人员提出了称为OT扩展的东西,其中少量OT可以高效地转变为大量OT。阈值签名方案的创建者急切地使用此功能,因为您可以运行少量OT的设置一次,然后任意多次扩展。
不经意传输
不经意传输就像魔术师纸牌戏法的设置。魔术师有一堆牌,希望您选择其中一张,这样他们可以通过占卜您选择的牌来展示他们的魔法能力。为此,魔术师不知道您选择了哪张牌很重要,但您必须恰好选择一张牌,并且不能后来声称您实际上选择了另一张牌。
在现实生活中,魔术师可以让您在他们选择的牌上写些东西,迫使您恰好选择一张牌。然而,这对密码学设置来说不够好,因为魔术师之后可以查看所有牌(使用他们令人印象深刻的手法隐藏这一事实)并挑出有文字的牌。更好的解决方案是让魔术师在每张牌上写一个随机单词,这样您可以通过记住这个单词来选择一张牌。现在,在现实生活中,魔术师可能允许您在选择一张牌之前查看多张牌,而在密码学情况下,您必须盲目选择一张牌,这样您只学到写在你所选牌上的随机单词。
选择牌并将其交还给魔术师(随机洗牌以确保他们不能直接挑出您归还的牌)后,他们现在可以尝试找出您选择了哪张牌。在现实生活中,魔术师会使用各种技巧尝试挑出您的牌,而在密码学设置中,他们实际上不应该能够做到。
所以,简而言之,OT是关于发送者(魔术师)希望让接收者(您,目标)在一些值(牌)之间选择。发送者不应了解接收者的选择,接收者不应了解除所选值之外的任何其他值。
事实证明,OT是一个非常强大的MPC原语,因为它可以用作构建任意多方计算协议的构建块。然而,在没有任何特殊假设的情况下实现OT需要非对称密码学,这相对昂贵。使用昂贵的构建块将导致低效的协议,因此需要更多的东西才能在实践中使用OT。
OT扩展
OT需要非对称密码学或“特殊假设”。这意味着当双方已经访问称为相关随机性的东西时,OT是可能的。更好的是,这种相关随机性可以从OT协议的输出创建。
因此,可以运行昂贵的OT协议若干次,然后将这些“基础”OT扩展为更多OT。这种扩展仅使用对称密码学(如哈希函数和伪随机生成器)即可实现,这使其比昂贵的非对称变体更高效。
对于本篇博客文章,我们将重点关注OT扩展中的特定工作线,从Ishai等人的这篇论文开始。详细解释此方案的工作原理有点复杂,但以下几点很重要:
- 它仅使用对称原语(伪随机生成器和哈希函数)。
- 发送者和接收者的角色互换(基础OT中的发送者成为扩展OT中的接收者,反之亦然)。
- 协议包括构建与旧选择(基础OT的)和新选择(OT扩展的)都相关的随机性。
- 扩展OT发送者不能作弊,但协议对作弊的扩展OT接收者不安全。
最后一点是什么意思?扩展OT接收者可以作弊并了解属于扩展OT发送者的原始选择位。Ishai等人提出了一个解决方案,但效率不高。因此,后续工作如Asharov等人和Keller等人的工作添加了一种一致性检查,其中扩展OT接收者必须提供一些额外信息。扩展OT发送者然后可以使用此信息验证接收者没有作弊。
这些一致性检查限制了接收者可以了解发送者秘密选择的程度,但它们并不完美。发送者执行以验证接收者信息的检查取决于他们自己的秘密选择。因此,接收者仍然可以在特定位置作弊,以便根据发送者是否中止来了解发送者秘密选择的一些位。这被称为选择性中止攻击,因为接收者可以有选择地尝试引起中止,并因此从发送者那里获得一些信息。
上述论文承认这种泄漏可能发生在作弊接收者身上。然而,作者选择了方案的参数,使得接收者在运行协议一次时永远无法了解足够多的发送者原始选择位。问题解决了,对吧?
漏洞如何工作
回想一下,在基于OT的阈值签名方案的背景下,您希望在设置阶段执行一次基础OT,并任意多次重用此设置以执行OT扩展。由于这提高了效率,实现者会欣然接受。没有非常明确提及的是,导致我们发现的漏洞的原因是,只有在OT扩展接收者不作弊的情况下,您才能任意多次重用设置。
如果接收者作弊,那么他们可以了解OT扩展发送者的秘密设置值的几个位。如果您允许接收者在协议的不同执行中多次这样做,这确实会成为问题。最终,接收者了解所有秘密发送者位,安全性完全受损。通常,根据特定的TSS,接收者现在可以使用秘密发送者位来恢复对应于ECDSA nonce的发送者份额。在阈值为二的方案中,这意味着接收者恢复nonce,并且给定使用此nonce的有效签名,他们可以恢复ECDSA签名密钥。(在更多方的方案中,攻击者可能不得不对多个方重复此攻击。)
那么这里的问题到底是什么?选择性中止攻击是已知的,并在OT扩展论文中明确讨论,但这些论文在您是否可以重用基础OT方面并不非常清楚。实现者和TSS协议设计者希望任意多次重用基础OT,因为这样高效。TSS协议设计者知道选择性中止攻击是一个问题,因此他们甚至指定了检查并认为案件已结,但他们在实现者检查失败时应该做什么方面并不非常清楚。学术论文中的这种模糊性总是导致对现实世界系统的攻击。
在这种情况下,一个清晰的解决方案是为在OT扩展协议期间试图作弊的参与者丢弃设置。查看一些公共存储库,大多数OT扩展库将报告类似“相关性检查失败”的内容,这不会告诉用户下一步该做什么。事实上,只有一个库添加了警告,指出特定检查的失败可能代表攻击,您不应重新运行协议。
弥合学术界与实现之间的差距
大多数学术MPC论文提供了方案的一般概述和相应的安全性证明;然而,它们没有构成清晰规范所需的细节,也不打算作为实现的蓝图。在解释学术论文以创建现实世界应用程序时做出错误假设可能导致严重问题。我们希望NIST最近对多方阈值密码学的呼吁将为MPC和TSS的规范设定标准,并在未来防止此类问题。
同时,如果您计划实现阈值ECDSA、另一个TSS或一般的MPC,您可以联系我们以指定、实现或审查这些实现。
如果您喜欢这篇文章,请分享: Twitter LinkedIn GitHub Mastodon Hacker News
页面内容
近期文章
使用Deptective调查您的依赖项
系好安全带,Buttercup,AIxCC的评分回合正在进行中!
使您的智能合约超越私钥风险成熟
Go解析器中意外的安全隐患
我们审查首批DKLs23库之一的经验教训
来自Silence Laboratories的库
© 2025 Trail of Bits。
使用Hugo和Mainroad主题生成。