用 Rust 检查一层神经元约束:R1CS 示例究竟证明什么

发布时间:2026/10/24 23:57:21

用 Rust 检查一层神经元约束:R1CS 示例究竟证明什么 把神经网络的一次计算写成约束和生成一份零知识证明是两件不同的工作。前者回答“这些数值是否满足关系”后者还涉及证明系统、公开输入、见证、参数和验证器。两者混在一起最容易让一段几十行的检查程序被误读成可部署的 zk-ML 引擎。arkworks 的接口文档将关系描述和 SNARK 构造分开组织这是理解工程层次的好入口。仓库说明 8 月上线的 better.codes 则提供另一个提醒机器检查接收的是精确定义的命题命题写弱了工具通过也没有证明想要的性质。项目介绍从一个整数神经元开始取两个公开输入x03、x14固定权重2、5先求dot26再用平方激活得到y676。这里选平方只是为了得到一个简单的乘法关系并不把它当成 ReLU 或实际模型的替代品。令见证向量为[1,x0,x1,dot,y]。第一条关系是(2*x05*x1)*1dot第二条是dot*doty还要单独把公开输入与见证中的对应位置绑定。下面的代码使用素数模数 65537。示例中所有预期整数都小于模数真实的有符号定点计算还必须加范围和截断约束不能把模意义相等直接当成整数相等。const P: u128 65537; fn dot(a: [u128; 5], w: [u128; 5]) - u128 { a.iter().zip(w).map(|(x, y)| x * y).sum::u128() % P } fn check(w: [u128; 5], public: [u128; 2]) - bool { if w.iter().any(|x| *x P) || w[0] ! 1 || [w[1], w[2]] ! public { return false; } let rows [ ([0,2,5,0,0], [1,0,0,0,0], [0,0,0,1,0]), ([0,0,0,1,0], [0,0,0,1,0], [0,0,0,0,1]), ]; rows.iter().all(|(a,b,c)| dot(a,w) * dot(b,w) % P dot(c,w)) } fn main() { let good [1,3,4,26,676]; assert!(check(good, [3,4])); let mut bad good; bad[4] 1; assert!(!check(bad, [3,4])); assert!(!check(good, [4,4])); println!(3 constraint cases passed; no proof generated); }保存为neuron.rs运行rustc --edition2021 neuron.rs -o neuron ./neuron。三个断言分别检查合法见证、被篡改的输出和不匹配的公开输入。代码仅在这些受控小整数上使用u128它不是可处理任意有限域元素的密码学库。固定权重不一定需要“每个权重一个乘法门”已知常数乘以变量可以进入线性组合。只有当权重也作为需要约束的私有见证、或者计算结构另有要求时门数分析才会变化。把参数量直接当作非线性乘法门数会误导对稀疏化收益和证明时间的估计。进一步实现 zk-ML还需要把量化规则、模型标识和输入输出承诺绑定进关系再使用经过审查的证明系统完成 setup、prove 和 verify。本文没有运行这些步骤也没有测量证明时间、显存或链上 Gas。先把小关系写对、把篡改用例挡住再讨论如何隐藏见证和压缩证明工程次序会清楚得多。
延伸阅读

更多相关文章

2026/10/24 23:57:21

AI 合约审计先做分诊:候选发现怎样变成可复核证据

同一份合约交给多个模型,通常能收回一叠措辞笃定的风险报告。问题是,其中有些路径不可达,有些依赖错误的部署配置,还有些只是重复描述同一个状态更新顺序。把报告数量当成安全进展,会把分诊工作越积越多。 以太坊基金…

2026/10/24 23:52:21

MyBatisPlus批量插入性能优化与实现方案

1. 为什么需要自己实现MyBatisPlus批量插入MyBatisPlus作为MyBatis的增强工具,虽然提供了基础的CRUD操作,但在批量插入场景下存在几个明显的痛点。首先是性能问题,默认的saveBatch()方法实际上是通过for循环执行单条INSERT语句,当…

2026/10/25 0:52:50

Azure DevOps Pipeline 排错实战:从 YAML 报错到部署故障

简介:Azure DevOps Pipelines 官方文档离线整理版,适合需要系统搭建持续集成/持续交付体系的开发、运维与 DevOps 工程师。全书围绕 CI/CD 展开,涵盖从免费注册、创建第一个管道到自定义 YAML 管道的完整流程,并对代理、条件、表达…

2026/10/25 0:52:50

计算机网络期末复习:分层协议、时延计算与IP分片易混点梳理

简介:这份《计算机网络》期末复习电子版资料对应谢希仁第8版教材,面向高校计算机相关专业备考期末的学生,也适合需要梳理网络基础概念的自学者。内容围绕互联网的连通性与共享、边缘部分与核心部分、电路交换/报文交换/分组交换、性能指标计算…

2026/10/25 0:47:50

MCP工具选型别做伪横评:用能力、权限与证据填一张表

挑MCP工具时,一张看起来精确的性能表很容易让人安心。但如果不知道测的是哪个版本、哪种任务、是否包含模型推理和网络等待,0.8毫秒和15毫秒几乎没有可比性。更实用的第一张表,是记录工具能够做什么、它需要什么权限、依据在哪里。 10月22日…

2026/10/25 0:47:50

布隆过滤器不是答案缓存:先堵住 Token 分流里的误命中

缓存方案里最容易被忽略的一条线,是“这个请求可能出现过”与“我有权返回这个答案”之间的距离。布隆过滤器只适合做前一种判断。把命中当成答案命中,省下的模型调用可能换来错误响应,甚至把别人的答案返回给当前用户。 10 月 13 日 GitHub…

2026/10/25 0:47:50

RAG 合成对抗集怎么做:先拆开错误前提、版本冲突与缺证据

一套RAG系统能回答文档目录里的问题,并不说明它能处理用户的真实问法。用户可能把前提说反,可能引用旧制度,也可能问到知识库从来没有收录的事项。把这些情况合在一个“准确率”里,会让修复工作失去方向。 Anthropic 在10月9日披…

2026/10/25 0:47:50

小型无人机自主飞行系统:从坐标系到路径规划的工程实现

简介:这是一本面向无人机系统工程师、飞行控制研究者及高校航空航天专业高年级本科生与研究生的经典教材,系统讲授小型无人机(MAV)从理论建模到工程实现的完整知识链。全书覆盖系统架构、多坐标系转换(地球/机体/航迹坐…

2026/10/25 0:02:22

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/25 0:02:23

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/25 0:02:23

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/25 0:02:22

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/25 0:02:23

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/25 0:02:23

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑