← 最新论文
💻 computer science

DALC-CT: Dynamic Analysis of Low-Level Code Traces for Constant-Time Verification

本文提出了一种名为 DALC-CT 的开源工具,通过动态分析低层执行轨迹并比较不同输入下的指令序列分布,为程序提供了轻量级且可靠的常量时间属性验证方法,有效克服了传统形式化方法抽象过度及基于时间测量易受噪声干扰的局限。

原作者: Nges Brian Njungle, Edwin P. Kayang, Mishel J. Paul, Michel A. Kinsy

发布于 2026-04-21
📖 1 分钟阅读☕ 轻松阅读

原作者: Nges Brian Njungle, Edwin P. Kayang, Mishel J. Paul, Michel A. Kinsy

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

这篇论文介绍了一种名为 DALC-CT 的新工具,它的任务是帮助程序员检查他们的代码是否“守口如瓶”,不会通过时间泄露秘密。

为了让你更容易理解,我们可以把整个故事想象成**“侦探抓内鬼”**的游戏。

1. 背景:为什么“时间”会泄露秘密?

想象一下,你有一个绝密的保险箱密码(比如 123456)。

  • 坏情况(非恒定时间): 你派了一个笨拙的守卫去核对密码。

    • 如果用户输入 123456,守卫会开心地核对完所有 6 位,然后说“通过”。
    • 如果用户输入 123450(最后一位错了),守卫核对到第 6 位发现不对,立刻大喊“不行!”并停止。
    • 问题出在哪? 虽然守卫都说了“不行”,但他花的时间不一样!核对前 5 位正确时,他多花了一点点时间。黑客就像躲在暗处的间谍,拿着秒表在外面听:“哦,刚才那个输入多花了 0.001 秒,看来前 5 位是对的!”
    • 通过反复尝试和计时,黑客就能像拼拼图一样,把密码一个个猜出来。这就是**“定时侧信道攻击”**。
  • 好情况(恒定时间): 聪明的守卫会怎么做?

    • 不管用户输入什么,守卫都会假装把 6 位数字都核对一遍。即使第 1 位就错了,他也会继续核对剩下的 5 位,最后才说“不行”。
    • 这样,无论密码对错,守卫花的时间永远一样。黑客拿着秒表也听不出任何区别,自然就无法猜出密码了。

2. 以前的方法有什么缺点?

在 DALC-CT 出现之前,人们检查代码是否“恒定时间”主要有两种笨办法:

  1. 看源代码(纸上谈兵): 就像让程序员自己写保证书说“我代码写得很好”。但问题是,代码写好后,编译器(把代码变成机器能懂的语言的翻译官)可能会自作聪明地优化代码,把原本“恒定”的逻辑改坏了。这就好比翻译官把“假装核对”改成了“直接跳过”,程序员自己都不知道。
  2. 拿秒表测(听风辨位): 在电脑上反复运行程序,用秒表记录时间。但这就像在嘈杂的菜市场里听一根针掉在地上的声音。电脑里其他程序在跑、风扇在转、甚至天气热了 CPU 变慢,都会产生噪音。如果黑客的计时差异很小,很容易被这些噪音淹没,导致误判。

3. DALC-CT 的绝招:数“积木”

DALC-CT 发明了一种全新的、更聪明的方法。它不再看源代码,也不拿秒表去测时间,而是直接数程序运行时用了多少种“积木”

  • 什么是“积木”?
    计算机程序在底层是由成千上万条微小的指令组成的,就像乐高积木。有的积木是“加法”,有的是“存数据”,有的是“跳转”。
  • 它的逻辑是这样的:
    • 如果程序是恒定时间的,那么无论输入什么秘密(比如密码是 123 还是 999),它使用的积木种类和数量必须完全一样。就像守卫无论核对什么密码,都要搬动完全相同数量的积木块。
    • 如果程序不恒定时间,那么输入不同,积木的组合方式就会变。比如密码错了,守卫少搬了两块积木(少执行了两步)。

DALC-CT 的工作流程:

  1. 它把程序变成二进制文件(机器码)。
  2. 它像是一个超级显微镜,盯着程序运行,记录它每一步用了什么指令(积木)。
  3. 它给这些指令分类(比如:加法类、存数类、跳转类),一共分了 13 类。
  4. 它让程序用不同的秘密输入跑几遍,然后对比这几遍的“积木清单”。
    • 如果清单完全一样(比如都是 100 个加法积木,50 个存数积木):恭喜!这是恒定时间的,安全!
    • 如果清单不一样(比如输入 A 用了 100 个加法,输入 B 只用了 90 个):警报!这里有问题,秘密可能泄露了!

4. 为什么这个方法很厉害?

  • 不听噪音,只看逻辑: 它不关心电脑风扇转得快慢,也不关心系统忙不忙。它只关心程序逻辑上到底执行了哪些指令。这就像不管外面多吵,只要看守卫手里搬的积木数量对不对,就能判断他有没有偷懒。
  • 不受编译器欺骗: 不管编译器怎么优化代码,只要底层指令变了,DALC-CT 就能发现。它直接看最终执行的结果,而不是看程序员写了什么。
  • 快速且准确: 论文里测试了很多例子(比如密码检查、加密计算),DALC-CT 只要跑几次,就能完美找出所有有问题的代码,而且没有误报。

5. 总结

这篇论文的核心思想就是:不要猜时间,要数指令。

以前我们担心程序会不会因为输入不同而“偷偷”改变执行步骤,从而泄露秘密。现在,DALC-CT 就像一位指令计数侦探,它通过对比不同输入下的“指令积木清单”,能一眼看穿程序是否在“演戏”。如果清单一样,说明程序守口如瓶;如果清单不一样,说明程序在“泄密”。

这是一种轻量级、可靠且实用的新方法,能帮助开发者在黑客利用时间差窃取密码之前,先把代码里的漏洞堵上。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →