KQFuzz: Knowledge-Guided Fuzzing for Quantum Libraries via Large Language Models
KQFuzz 是一种新型的知识引导型模糊测试器,它利用大语言模型、代码库感知提示以及适应度驱动的变异策略,显著提高了测试覆盖率,并发现了 Qiskit、PennyLane 和 Cirq 等量子库中的漏洞。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一个这样的世界:计算机不再仅仅是处理数字,而是与现实的织面共舞,利用量子物理的奇特规则来解决当今超级计算机需要耗费永恒时间才能解决的问题。这就是量子计算领域,它承诺将彻底改变从医药到金融的一切。但与任何新技术一样,它建立在软件库的基础之上——这些庞大且复杂的指令手册告诉量子硬件该做什么。可以将这些库想象成量子机器的“操作系统”。如果这些库中的代码存在缺陷,结果可能会出错,导致科学家得出错误的结论,或者浪费珍贵且稀缺的量子时间。就像你不会信任一个转向系统摇晃不定的汽车一样,我们也不能把带有漏洞软件的量子计算机托付给可靠性存疑的任务。
为了让这些数字引擎平稳运行,测试人员使用了一种叫做“模糊测试”(fuzzing)的技术。想象一个机器人,它随机向锁中投入成千上万把不同的钥匙,试图找到一把能使其损坏或卡住机制的钥匙。在软件测试中,这意味着向程序输入数百万个随机的、略微古怪的输入,以观察它是否会崩溃或表现异常。最近,科学家开始使用人工智能(具体而言是大型语言模型,即 LLM)来充当这些机器人,希望它们能比简单的随机生成器编写出更好、更有创意的测试用例。然而,在面对复杂的量子代码世界时,这些 AI 机器人却经常跌跌撞撞,经常编写出对量子硬件而言毫无意义的指令。
这时,一个名为 KQFuzz 的巧妙解决方案应运而生。研究人员意识到,虽然 AI 擅长编写代码,但当规则变化迅速时,它往往会迷失方向,而这在快速发展的量子世界中是常态。为了解决这个问题,他们为 AI 构建了一个“知识指南”。KQFuzz 不再让 AI 盲目猜测,而是向其提供一份关于该库当前规则、关系和历史的详细地图。这就像是在机器人开始扔钥匙之前,先给了它一部 GPS 和一本规则手册。通过将这张地图与一个智能系统相结合——该系统负责检查哪些测试用例最有趣,并对其进行“变异”以创造出更奇特的变体——KQFuzz 成功地在三个主要的量子库(Qiskit、PennyLane 和 Cirq)中发现了 13 个新漏洞。开发者已确认了所有漏洞,其中 12 个已经得到了修复。
问题所在:当 AI 在量子迷宫中迷失
量子库就像是活生生的、呼吸着的有机体,几乎每天都在改变形态。新的硬件不断到来,软件也必须随之重写以适应新硬件。这给标准的测试工具带来了噩梦。
首先是传统的“电路级”模糊测试器。这些工具就像只知道如何搭建简单乐高结构的机器人。它们遵循严格的、预先写好的规则来构建有效的电路。虽然它们擅长发现结构性裂痕,但极其僵化。它们无法处理现代量子软件的高级特性,因为它们的规则手册已经过时了。它们就像一位只会做吐司的厨师;即使食材就在眼前,他们也无法烹饪出一顿美食。
其次是 AI 驱动的模糊测试器。它们使用大型语言模型(LLata LLM)——即编写论文或代码的那种技术——来生成测试用例。其初衷是,既然这些 AI 阅读过数百万个代码示例,它们理应知道如何编写完美的量子程序。但问题在于:量子世界变化太快了。AI 的训练数据往往已经过时。当被要求为新版本的库编写代码时,AI 会开始“幻觉”。它会发明不存在的命令,或者使用已被删除的旧命令。在一项研究中,作者发现当要求 AI 为量子库编写代码时,只有 35% 到 46% 的尝试能够成功运行。相比之下,在处理经典软件(如标准 Python 库)时,AI 的正确率可达 64% 到 86%。AI 本质上是在黑暗中盲目猜测,而且大多数猜测都是错误的。
解决方案:KQFuzz,知识渊博的向导
论文作者 Fuyuan Xia 及其团队决定不再盲目猜测。他们构建了 KQFuzz,一个充当 AI 知识向导的系统。KQFuzz 不再让 AI 盲目游荡,而是直接从正在测试的库的源代码中提取一个“语料库”作为知识来源。
可以这样理解:如果你想写一个关于特定城市的故事,你不会仅凭记忆(记忆可能是错的);你会看地图,核对街道名称,并查看建筑是如何连接的。KQFuzz 对量子代码也做了同样的事情。它构建了一个包含以下内容的数据库:
- 静态元数据: 库中每个工具(API)的确切名称和位置。
- 关系: 不同工具之间如何相互通信(例如,“工具 A 通常紧跟在工具 B 之后”)。
- 语义模型: 由强大的 AI 模型阅读代码后生成的关于每个工具实际功能的摘要。
- 演进指标: 工具随时间变化的历程,强调了哪些工具是不稳定的或频繁更新的。
有了这张地图,KQFuzz 就能引导“模糊测试”AI 生成真正有效的测试用例。它不仅仅是要求 AI “编写代码”,而是说:“这是当前的地图。请使用这些已知比较棘手的特定工具,并确保它们像这样连接。”这种方法显著提升了生成代码的有效性,将一个容易失败的过程变成了一个可靠的过程。
策略:两级变异与适应度检查
一旦 KQFuzz 有了一个有效的起点(一个“种子”程序),它并不会止步于此。它需要寻找隐藏的漏洞,而这些漏洞通常深藏在复杂的交互之中。为此,它采用了两步策略:
1. 适应度函数(裁判):
并非所有的测试用例都是平等的。有些测试用例既无聊又简单,而有些则复杂且混乱。KQFuzz 使用“适应度函数”来对每个测试用例进行评分。它关注以下指标:
- 门电路多样性(Gate Diversity): 是否使用了多种不同类型的量子操作?
- 纠缠量子比特(Entangled Qubits): 量子比特是否以复杂的方式进行交互?
- API 多样性: 是否正在测试库的不同部分?
- 调用深度(Call Depth): 命令链条向下延伸了多少步?
如果一个测试用例在这些指标上得分较高,它就被视为“适应度高”并保留用于下一轮。这确保了系统将精力集中在最有希望、最复杂的场景中,而这些场景正是漏洞最容易隐藏的地方。
2. 两级变异(变形者):
在选出最佳测试用例后,KQFuzz 会通过进行细微且智能的修改来尝试破坏它们。它通过两种方式实现:
- 参数级变异: 它调整数值。量子门经常使用角度(如 0, 1 或 )。KQFuzz 会用“边界情况”——即可能使系统产生困惑的奇怪、极端值——来替换这些数字。
- 门电路结构级变异: 它改变电路的结构。它会将一种类型的量子门替换为另一种逻辑行为相似但内部逻辑不同的门。这就像是将汽车引擎更换为另一种型号,以观察底盘是否能承受得住。
结果:发现漏洞
该团队在三个最流行的量子库上测试了 KQFuzz:Qiskit、PennyLane 和 Cirq。他们将其与包括其他模糊测试器和基于 AI 的测试器在内的现有最佳工具进行了对比。
结果令人印象深刻。KQFuzz 不仅发现了更多的漏洞,还探索了其他工具完全忽略的代码部分。
- 在 Qiskit 上,KQFuzz 覆盖了 63.31% 的代码,而排名第二的工具仅覆盖了 53.00%。
- 在 PennyLane 上,它的覆盖率达到了 58.71%,而对比组为 45.44%。
- 在 Cirq 上,它达到了惊人的 73.79% 覆盖率,将竞争对手远远甩在身后(后者为 55.35%)。
总计,KQFuzz 发现了 13 个独特的漏洞。每一个漏洞都得到了库开发者的确认,并且 12 个已经得到了修复。这些不仅仅是微小的拼写错误,而是严重的逻辑问题,例如“边界违规”(软件在极端输入下崩溃)、“状态分歧”(内部内存失去同步)以及“语义违规”(代码的行为与文档描述不符)。
在 Qiskit 中发现的一个特定漏洞涉及一个循环,该循环会导致软件丢失对其自身参数的追踪,从而导致一个可能多年都无法被察觉的静默错误。开发者承认这是一个长期存在的问题,而他们之前的测试方法未能捕捉到它。
为什么这很重要
论文指出,量子计算的未来取决于可靠的软件。随着这些库的快速演进,手动测试已不足够,而简单的随机测试又过于盲目。KQFuzz 表明,通过将 AI 的创造力与严格的基于知识的指南相结合,我们可以构建一个既灵活又准确的测试系统。它证明了我们不必在“智能”AI 和“安全”测试之间做选择;我们可以两者兼得。
作者强调,他们的方法在不同的 AI 模型下都是鲁棒的。即使使用较小、功能较弱的 AI 模型,KQFuzz 仍然优于竞争对手,这表明“知识指南”才是真正的核心秘诀,而不单纯是 AI 大脑的大小。
最后,KQFuzz 提醒我们,在量子计算这个野性且快速变化的世界里,寻找漏洞的最佳方式是比规则本身更了解规则。通过给 AI 一张地图,研究人员确保了通往无漏洞量子未来的旅程更加稳健。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。