文章摘要
我们使用AI审计工具检测Cloudflare的CIRCL密码学库,发现了七个真实漏洞,包括阈值RSA中的关键精度损失和属性加密的访问控制失效。所有漏洞已被修复。这是系列文章的第一篇。
文章总结
好的,这是根据您的要求,对原文进行的中文重述:
标题:AI遇上密码学(一):AI在Cloudflare的CIRCL库中发现了什么
核心内容:
zkSecurity团队利用其AI审计工具,对Cloudflare的CIRCL实验性密码学库进行了扫描,并确认了7个真实存在的漏洞。这些漏洞的严重程度不一,从阈值RSA中的关键性float64精度丢失,到基于属性加密中完全访问控制被攻破。目前,所有7个漏洞均已被Cloudflare修复。
背景与方法:
zkSecurity正在开发一个名为zkao的AI审计代理,其目标是持续对代码进行审计,直至找出所有可被AI工具发现的漏洞。本次实验是构建该工具过程中的一部分,旨在探索AI(特别是大语言模型)在密码学代码审计中的能力与局限。
研究人员使用了两种配置对CIRCL库进行扫描: 1. 仅使用大语言模型,配合简单提示。 2. 使用大语言模型,并辅以由安全专家维护的“技能”库。
对于发现真实漏洞的项目,他们还运行了zkao工具,以验证其是否能独立发现相同问题。结果显示,zkao不仅能发现所有已知问题,还能识别出更复杂、更严重的漏洞。
发现的7个漏洞概览:
- float64精度丢失(阈值RSA):在计算多项式时使用了
float64类型,导致大数运算时精度丢失,生成错误的密钥分片。AI评为“严重”,Cloudflare评为“低危”。 - 证明者控制安全参数(DLEQ证明):安全参数
SecParam被包含在证明结构中,攻击者可将其设为极小值,从而轻易伪造证明。AI评为“高危”,Cloudflare评为“低危”。 - BLS聚合签名缺少消息唯一性检查:BLS BASIC聚合模式要求所有签名的消息必须唯一,但代码未做此检查,导致经典的“流氓密钥攻击”。AI评为“中危”,Cloudflare评为“高危”。
- 通过符号碰撞破坏DLEQ可靠性:利用
big.Int的FillBytes方法会忽略符号位的特性,结合代数恒等式,攻击者可以伪造一个关于负数公钥的有效证明。AI评为“高危”,Cloudflare评为“低危”。 - 位或操作符导致HPKE PSK验证绕过:Go语言中,
switch语句的case使用位或操作符|,导致本应检查预共享密钥(PSK)的分支被错误地跳过。AI评为“中危”,Cloudflare评为“中危”(重复报告)。 - int64类型计算拉格朗日系数(阈值RSA):使用
int64计算拉格朗日插值系数,存在整数溢出和截断两个独立问题,导致签名组合错误。AI评为“高危”,Cloudflare评为“中危”。 - CP-ABE访问控制完全失效:在实现密文策略属性基加密(CP-ABE)的AND门时,代码错误地将一个子节点设为0,另一个子节点获得完整秘密,导致任何拥有单个属性的用户都能解密所有密文。AI评为“严重”,Cloudflare评为“严重”。
主要发现与反思:
- AI对漏洞严重性的评估不准确:AI倾向于高估或低估漏洞的严重性,尤其是在库被多种应用场景使用时。目前仍需人工介入进行严重性评估。
- 不同模型的能力差异显著且不稳定:不同版本的大语言模型在发现和验证漏洞方面的能力会随时间变化,甚至出现角色互换。因此,审计工具应保持模型无关性。
- AI能发现问题,但难以进行关联分析:AI能够发现多个独立的漏洞,但有时会将它们打包成一个报告,而未能深入分析它们之间的关联,从而可能错过更复杂的攻击链。
后续计划:
zkSecurity团队已扫描超过200个密码学项目,发现了上千个候选问题。目前最大的瓶颈是人工验证。他们欢迎密码学项目维护者联系合作,以便及时发现并修复严重漏洞。
评论总结
根据评论内容,总结如下:
主要观点与论据:
对使用浮点数实现加密算法的质疑(评论1,评分无)
- 评论者惊讶于现代加密算法竟使用浮点数实现,认为这不符合常规做法。
- 关键引用:"People do crypto using floats these days?" / "I would never have expected people to use floats the 'intended way' to implement crypto algorithms."
对文章内容的技术提问与反馈(评论2,评分无)
- 评论者感谢作者,并提出了三个具体问题:
- 关于AI候选发现与可信报告的比例:询问LLM生成了多少候选报告,最终只有7个真实漏洞。
- 关于测试缺失:质疑为何没有更高层级的测试(如检查“缺少属性时无法解密”),尽管已添加回归测试。
- 关于zkao的定义:询问zkao是否是一个持续运行LLM审计的系统,还是其他工具。
- 关键引用:"Roughly how many candidate reports did the LLMs create vs the eventual 7 true vulnerabilities?" / "I'm wondering why there isn't a test further up the stack that is simply checking 'can't decrypt if the required attribute isn't present'?" / "Is it an LLM? (but better than the frontier LLMs?)"
- 评论者感谢作者,并提出了三个具体问题:
平衡性总结: - 评论1对技术实现提出质疑,强调浮点数在加密中的非常规性。 - 评论2则聚焦于文章的技术细节,提出建设性问题和改进建议,同时表达对作者工作的认可。两者均未涉及明显争议,观点互补。