Granite: A Modular Methodology for Foundational Verification of Hardware-Software Leakage Contracts
Granite 引入了一种模块化的基础方法论,该方法通过建立与确定性 ISA 泄漏契约的追踪等价性,来验证 RTL 处理器的功能正确性与非泄漏性,从而实现硬件与软件证明的组合,以消除受信任计算基中的中间规范。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下你正在建造一辆超级快速的赛车。为了让它变得极其迅捷,你加入了涡轮增压器、预测转向系统,以及一个能猜出你下一步会如何转弯的系统。但问题在于:如果赛车的引擎只有在向左转弯时才会发出特定的“咔哒”声,那么站在路边的潜伏间谍就能仅凭这种声音就推断出你的整个路线。在计算机芯片的世界里,这被称为“计时侧信道”(timing side channel)。多年来,程序员们一直试图编写无论处理什么秘密数据都耗时完全相同的代码,就像间谍试图在走廊里行走而不发出任何声响一样。但随着芯片变得越来越快、越来越聪明,它们开始产生微小的、不可预测的“噪音”——比如突然停顿一下检查后视镜,或者一阵爆发式的加速——这些噪音会无意中泄露秘密。这篇论文探讨了一个令人恐惧的可能性:即使你的代码是完美的,硬件本身也可能通过其心跳的节奏泄露你的秘密。
这项工作的研究人员(被称为 Granite)构建了一种全新的方法,从数学上证明计算机芯片能够守住其秘密。他们不仅仅是在猜测或进行测试;他们创建了一个严密的、循序渐进的数学论证,将计算机行为的高层规则(指令集,ISA)一直连接到底层的微小导线和晶体管(寄存器传输级,RTL)。他们的主要发现是一种方法,可以证明芯片的计时仅由允许公开的事物(如按下的按钮)决定,而绝不会由它正在处理的秘密数据(如密码或加密密钥)决定。他们明确指出,不能仅仅因为一个芯片看起来没问题或通过了标准测试就信任它;他们表明,如果没有这种特定类型的证明,隐藏的泄露几乎是必然存在的。他们不仅是在建议这种方法可行,而且还针对一个成功合成到 FPGA 上的处理器设计进行了形式化证明,尽管该设计尚未集成到完整的片上系统(SoC)中进行后合成测试。
伟大的芯片侦探故事
把计算机处理器想象成一家高端餐厅里繁忙、混乱的厨房。厨师们(硬件)正在为顾客准备餐点(运行程序)。“指令集架构”(ISA)就是菜单和食谱。它告诉厨房:“如果你收到了汉堡订单,你最终必须提供一个汉堡。”但菜单并没说做这个汉堡要花多长时间,或者厨师何时拿起菜刀。
在过去,厨师被要求做到“恒定时间”(constant-time)。这意味着无论顾客订的是沙拉还是牛排,他们切菜的速度都必须完全一致,这样监视窗外的间谍就无法通过切菜的节奏判断出正在烹饪什么。但随后,厨房变得太快了。厨师们开始使用“投机”(speculation)——他们会猜测顾客想要什么,甚至在订单确认前就开始切洋葱。如果猜错了,他们就会把洋葱扔掉重新开始。这种猜谜游戏创造了新的、偶然的噪音:意识到错误所花费的时间,或者抓取特定香料所花费的时间,都开始泄露信息。间谍可以通过听取厨房的声音来推断:“啊,厨师停顿了 0.0001 秒;他们一定是在做某种带有秘密洋葱的菜!”
于是,Granite 登场了,它是终极的厨房检查员。Granite 不仅仅是观察厨师,它还重写了厨房的规则,以确保没有任何秘密能通过切菜的节奏逃脱。
“影子厨师”的魔力
Granite 的天才之处在于一个涉及“影子厨师”的巧妙技巧。想象一下,你有一个真实的厨师,他知道所有的秘密食谱(秘密数据)。你还有一个蒙着眼睛、只知道订单公开部分(公开数据)的影子厨师。
Granite 的方法是说:“我们将证明真实厨师和影子厨师动作完全同步。”如果真实厨师因为洋葱很大而花了 5 秒钟切洋葱,那么影子厨师也必须恰好花 5 秒钟,尽管影子厨师并不知道那颗洋葱很大。影子厨师的计时仅由公开订单驱动。如果真实厨师的计时依赖于某个秘密(比如洋葱的类型),那么两位厨师就会失去同步,证明也会因此失败。
为了实现这一点,Granite 引入了一个“驱动器”(Driver)和一个“见证者”(Witness)。
- 驱动器 就像是一个只听从公开订单的节拍器。它决定了厨房何时向前推进,确保厨房动作的计时仅由客户希望被知晓的内容决定,而不是由秘密食材决定。
- 见证者 是对厨房中杂乱、不可预测部分(比如因为锅太热而产生的随机延迟)的一个占位符。见证者说:“好吧,我们不在乎这里具体发生了什么,只要它不依赖于秘密即可。”
通过证明真实厨房的行为与由驱动器和见证者运行的厨房完全一致,Granite 证明了厨房的节奏(计时)绝不可能泄露秘密食材。
模块化拼图
检查整个厨房最难的部分之一是它规模太大,无法一次性整体查看。Granite 通过将厨房分解为小的、独立的站点来解决这个问题:切菜站、烧烤站、摆盘站。
Granite 证明每个站点在自身层面都是安全的。例如,“乘法器”站点(进行数学运算的部分)会被检查,以确保如果它在做乘法时耗时较长,那仅仅是因为数字为零(这是允许被知晓的),而不是因为某个秘密数值。一旦每个站点都被证明是安全的,Granite 就会像搭乐高积木一样将它们拼接在一起。由于这种证明是“模块化”的,如果你用一个更快的烧烤站替换现有的,你不需要重新检查整个厨房;你只需要检查新的站点,整个系统依然保持安全。
最终裁决
研究人员不仅是在空谈,他们还构建了一个处理器设计并对其运行了证明。他们拿了一段已知是“恒定时间”的软件(一种名为 Salsa20 的加密程序),并证明了当它在他们的处理器设计上运行时,绝对不会通过计时泄露任何秘密。
这是一件大事,因为它改变了你需要信任的对象。通常,你需要信任软件与硬件之间复杂的契约。Granite 表明,如果将他们的硬件证明与经过验证的软件证明相结合,硬件-软件契约本身就可以从信任列表中剔除。然而,该证明仍然依赖于一些核心组件,例如指令集契约的形式化定义,以及将代码转换为硬件描述的工具,这些仍属于“可信计算基”(Trusted Computing Base)。他们甚至在自己的设计中发现了一个漏洞:他们意识到向某些控制寄存器(CSRs)写入数据可能会泄露信息,并在证明完成前修复了它。
简而言之,Granite 提供了一种构建计算机芯片的新方式,即使在运行高速、进行预测和产生噪音时,也能通过数学保证来守护秘密。它将现代计算中混乱、嘈哮的厨房变成了一座沉默且守口如瓶的堡垒,证明了你可以同时拥有速度与安全性。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。