AST-Level Semantic Watermarking Framework for AI-Generated Code: Robust Provenance Attribution via Structural Invariants
本文提出了一种新颖的、与模型无关的抽象语法树(AST)级水印框架,该框架通过保持语义不变的结构化变异,将具有密码学可验证性的签名嵌入到 AI 生成代码的句法拓扑中,从而实现了鲁棒的来源归属,并且在应对格式化、重命名和死代码注入等常见代码转换时,其表现显著优于现有的文本级方法。
原始论文采用 CC BY 4.0 许可(https://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
在现代软件创作时代,一场无声的革命正在进行。大型语言模型——这些能够编写计算机代码的强大人工智能系统——已成为开发者的标准工具,承诺加速数字应用程序的构建。然而,这种便利也带来了重大挑战:当机器编写程序时,几乎无法辨别究竟是谁创造了它。人类努力与机器生成的界限变得模糊,使软件公司和研究人员面临被盗用、剽窃以及未经证实的代码传播的风险。为了解决这个问题,专家们长期以来一直尝试在代码文本内部隐藏数字签名,即水印。但这些传统方法非常脆弱;它们就像是在单词之间的间距中书写秘密信息,一旦有人重新输入文档或更改字体,信息就会被破坏。代码本身保持不变,但隐藏的信息却消失了。
一项近期研究详述的新方法将策略从文本的表面转向了程序的底层逻辑。该方法不再将信息隐藏在文字中,而是将其隐藏在代码的架构结构中。研究人员开发了一种系统,将计算机程序视为其自身逻辑的层级地图,即抽象语法树(AST),而不仅仅是一行行文本。这张地图展示了代码的不同部分是如何连接和交互的,无论代码如何格式化或命名。通过对这种结构进行微小的、在数学上得到保证的修改——例如,在不影响结果的情况下交换两个数字的顺序,或者将一种特定的循环类型转变为另一种等效的循环类型——该系统将加密签名直接嵌入到程序的“DNA”中。这些变化对于运行代码的计算机来说是不可见的,也不会改变软件的功能,但它们留下了永久且可检测的标记,即使代码经过大量编辑或重写,该标记依然存在。
该框架的核心依赖于一个名为 tree-sitter 的工具,它是一个高保真解析器,能够读取代码并重建其逻辑骨架而不丢失任何细节。与可能会丢弃格式或注释的标准工具不同,该系统在构建代表代码逻辑的树结构时,能够保留源文件的精确字节级布局。研究人员利用这一点来识别代码中可以安全进行修改而不破坏程序的特定位置。他们专注于三种主要的转换类型:首先,他们寻找交换律操作,即操作顺序不改变结果的情况,例如将两个数字相加。交换这些数字的顺序是编码单个比特数据的安全方式。其次,他们识别独立的语句,即互不依赖的代码行,并重新排列它们的顺序。第三,他们转换某些控制结构,例如将一个标准的计数循环转换为另一种实现完全相同结果的循环类型。
为了嵌入水印,系统使用一个密钥来生成特定的结构变化序列。随后,它扫描代码,找到符合条件的地点,并应用由密钥指示的更改。例如,如果密钥指示交换某个加法的顺序,系统就会执行该操作;如果密钥指示保持原序,则不做改动。由于这些变化是基于编程语言的逻辑而非具体的文字,因此它们能够经受住那些仅进行间距清理或变量重命名的标准格式化工具的考验。即使开发者运行代码格式化工具重新组织整个文件,逻辑结构依然保持不变,隐藏的签名也会持续存在。该系统旨在抵御各种擦除水印的尝试,包括要求第二个人工智能对代码进行重写以移除签名的攻击。
为了验证一段代码是否包含水印,研究人员构建了一个反向工作的检测引擎。它接收一段代码,重建其逻辑树,并检查在可以进行更改的相同位置。然后,它根据预期的模式对比这些位置的状态与密钥生成的模式。如果代码带有水印,则这些变化的模式与密钥匹配的频率将远高于随机发生的概率。研究人员使用统计检验来衡量这种可能性,将观察到的匹配数与随机变化的基准进行比较。如果匹配次数足够高,系统便会以高置信度判定该代码是由应用了该水印的特定 AI 模型生成的。这一过程是严谨且数学化的,确保检测并非猜测,而是具有统计学意义的发现。
研究人员针对广泛的攻击对该框架进行了测试,以观察其表现如何。他们模拟了以下场景:带水印的代码经过格式化工具处理、变量被重命名,或者被另一个人工智能模型进行重写以进行“清理”。在这些测试中,传统的基于文本的水印方法几乎完全失效。当代码经过格式化时,基于文本的签名被破坏,检测率降至仅为干净代码时的极小部分。相比之下,新的结构化方法即使在格式化后仍能保持近 99% 的检测率。当代码进行变量重命名时,结构化方法在几乎所有情况下都能检测到水印,而旧的结构化方法则表现挣扎。甚至当使用第二个人工智能进行改写和释义(这是一种极难防御的技术)时,新框架仍保持了超过 84% 的检测率。这种韧性归功于系统在代码中嵌入了许多份签名的副本;即使重写过程破坏了一些标记,仍有足够的标记足以证明其来源。
研究还解决了这些更改可能会破坏代码或降低运行速度的担忧。研究人员验证了他们应用的每一次转换都保留了程序的精确输出,并且没有改变其运行速度或内存占用。代码编译并运行完美,没有任何功能性退化。这与通过在编写过程中施加偏差来试图引导 AI 的其他方法有着本质区别,后者有时会导致错误或无效代码。通过在完成的代码上进行数学上安全的交换,该框架确保了软件的完整功能。检测过程本身也非常高效,依赖于可以快速运行以验证大量代码来源的统计检验。
这项工作的意义超越了简单的版权保护。随着人工智能与软件供应链的整合程度日益加深,验证代码来源已成为安全问题。如果一段代码包含了由 AI 引入的隐藏漏洞,了解其来源对于修复问题至关重要。该框架提供了一种追踪此类来源的方法,确保关键任务软件能够经过审核并值得信赖。研究人员通过对数千个生成的脚本数据集进行演示,证明了该方法具有可扩展性并已准备好投入实际应用。虽然研究是在 Python 代码上进行的,但结构不变性的原则适用于多种编程语言,这为保障未来数字工具的安全提供了广阔的路径。
研究结果表明,在人工智能时代,我们保护知识产权的方式发生了根本性的转变。通过将水印从脆弱的文本表面转移到稳固的逻辑骨架上,研究人员创建了一个难以抹除且易于验证的系统。结果表明,这种方法不仅是一种理论上的可能性,更是一种能够抵御现代软件开发中激进编辑和重写行为的切实可行的解决方案。随着人类代码与机器代码之间的界限持续模糊,这种结构化水印为我们在构建软件时维持透明度和问责制提供了一种可靠的方式。研究证实,将永久且不可破坏的签名嵌入程序的逻辑之中是可能的,从而确保无论表面如何改变,代码的真实起源始终清晰可见。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。