本文按照 Plonky2、RISC Zero 与 ethSTARK 采用的经典约定评估 ParanO(1)d 的实际部署参数,将基于猜想的评分与由有限定理支撑的界限明确区分,并用可执行的 Rust 计算固定每个公布值。每个数值只在其对应指标内比较。
比较中反复使用四个术语。FRI 是下列编码型系统所采用的一类低次数证明。交互式预言机证明(IOP)允许验证者查询已承诺预言机数据的少量位置,而不必读取整张证明表。Toy Problem 分数是业界常用的参数启发式,取决于码率、查询数和域大小上限。逐轮知识可靠性(RBR)则限制提取器在验证者每一步交互中的失败概率;相关的 约定用攻击工作量 除以其成功概率 。表格只在每一行明确写出的指标内比较标量数值,并不把底层协议视为同一对象。
| 已发布系统与指标 | 已发布数值 | ParanO(1)d 在对应指标下的数值 |
|---|---|---|
| Plonky2 默认 FRI,Toy Problem 猜想 | 基于猜想的 100 位安全性;项目估计其默认 Poseidon 配置约为 95 位 | 基于猜想的 128 位安全性,严格采用 Plonky2/Toy Problem 公式,并受实际部署所用域的大小限制 |
| RISC Zero 可靠性计算器,Toy Problem 猜想 | 当 SEGMENT_SIZE = 2^20 时为基于猜想的 97 位安全性;当其为 2^24 时为基于猜想的 95 位安全性 | 基于猜想的 128 位安全性,采用同类 Toy Problem 码率与查询数计算 |
ethSTARK / StarkWare,逐轮分析与 t / e(t) 操作次数分析 | 96 位 RBR IOP 前提;按其操作次数定义,编译后 STARK 结果为 95 位 | 钱包的 96.047 位广义 RBR 知识可靠性界;固定无效区块的 95.022 位有限组合(计入工作量) |
ParanO(1)d 的数值均从固定的实际部署参数导出,以可执行公式实现,并由回归测试锁定。每个数值都保留其所属指标的适用范围:基于猜想的参数评分、广义 RBR 知识可靠性界,或计入工作量的有限组合。
这些协议并不相同。96.047 是 ParanO(1)d 交互式钱包基础 IOP 的广义逐轮知识可靠性界。95.022 是下文定义的固定无效区块有限组合,其中计入了工作量。两者分别与最接近的已发布标量约定配对;精确定义在整个比较中始终明确可见。
范围与方法
一旦去掉定义,安全数值就很容易比较;但这样的比较也同时失去意义。“100 位”“96 位”和“128 位”可能分别指基于猜想的查询评分、已有证明支持的交互式可靠性误差、较宽松的单次成功工作量定义、哈希原语,或应用层组合。整数只是分析的最后一步,安全性游戏与归约才是起点。
本研究只提出一个可复现问题:按照成熟证明系统项目所发布的同类经典约定,固定的 ParanO(1)d 证明几何会得到怎样的评分? 四个对象分别评估:
- 严格按 Plonky2/Toy-Problem 原式计算的参数评分;
- 使用实际接受半径和强制查询前工作量搜索(grinding)的查询工作量评分;
- 有定理支撑的钱包基础 IOP 广义 RBR 知识可靠性界;
- 有限接受路径的误差总和,并显式说明 grinding 的处理方式。
这些结果不会取平均,也不会压成一个数字,因为它们回答不同问题。公开仓库以不同类型和不同输出章节保存它们。
实际部署参数,而非示例参数
输入取自 ParanO(1)d 提交 93b0252317208c20f8a769afb74681aa9389e286。该版本已记录在独立计算项目中。后续协议修订必须显式更新源码版本绑定与预期结果。
State 是由当前未花费输出与共识计数器组成的认证集合。HistoryStep 是区块从父 State 到子 State 精确转换的递归证明。B64 与 B255 是两种固定证明容量类别,分别容纳最多 64 页和 255 页用户交易。两者执行相同的有效性规则,只是约束域容量不同。
| 组件 | 查询数 | 码率 | 查询前工作量搜索 | 域 |
|---|---|---|---|---|
| 钱包授权 | 64 | 1/32 | 16 位 | GF(2128) |
HistoryStep B64 | 125 | 1/4 | 16 位 | GF(2128) |
HistoryStep B255 | 125 | 1/4 | 16 位 | GF(2128) |
钱包几何固定在 zk_capsule.rs。BaseFold 查询数下限、查询前搜索量与实际部署参数层级固定在 basefold.rs。独立计算项目只保留完成计算所需的值:
pub const PRODUCTION: ProductionParameters = ProductionParameters {
challenge_field_bits: 128,
digest_bits: 256,
wallet_query_count: 64,
wallet_log_inverse_rate: 5,
wallet_miss_numerator: 3,
wallet_miss_denominator: 10,
wallet_grind_bits: 16,
max_authorizations_per_block: 255,
history_query_count: 125,
history_log_inverse_rate: 2,
history_grind_bits: 16,
history_log_message_columns: [18, 19],
};
这种重复是有意的,任何失配都会使检查失败。实际部署代码是权威来源,独立项目用于复核计算。测试会暴露过时副本,避免计算表格在协议已经更新后仍悄然沿用旧参数。
指标一:严格按原式计算的 Toy Problem 评分
Plonky2 实现了常见的码率与查询数表达式,并受域大小限制:
其中 是查询数, 是码率, 是查询前工作量搜索(grinding)的位数, 是由域大小决定的上限。计算项目中的实现严格保持原公式的形式:
pub fn literal_toy_problem_score(
query_count: u32,
log_inverse_rate: u32,
grind_bits: u32,
field_bits: u32,
) -> (f64, f64) {
let raw = (query_count * log_inverse_rate + grind_bits) as f64;
(raw, raw.min(field_bits as f64))
}
钱包授权为 64 * 5 + 16 = 336。任一 HistoryStep 类别均为 125 * 2 + 16 = 266。两者都受 GF(2128) 限制为 128 位;256 位摘要的经典碰撞上限同样是 128 位。因此,所显示证明流水线的最弱组件为 128 位。
其准确名称是:按 Toy Problem 原公式得到、基于猜想的 128 位经典安全性参数评分。该评分采用基于码率的模型,不枚举有限异常集合。
指标二:实际接受半径下的查询工作量
原公式的码率评分没有包含验证器实际使用的接受半径。因此,第二项仍是基于猜想的工作量评分,但采用真实漏检概率,并计入查询抽样前强制执行的 16 位工作量搜索。
对于钱包授权,选定的列表译码半径为 。超出该半径的码字最多只能在 的源位置上一致。六十四次查询全部漏过差异的概率至多为 :
对 HistoryStep,计算采用码率 、相对距离 、域长度 ,以及实际部署所用的接近半径
相应评分为
| 组件 | 域 | 查询工作量评分 |
|---|---|---|
| 钱包授权 | 216 个源域元素 | 127.165798 位 |
HistoryStep B64 | 220 | 100.757887 位 |
HistoryStep B255 | 221 | 100.758438 位 |
最弱组件和加法组合都得到 100.757887 位。该结果记为:实际接受半径下、基于猜想的 100.76 位经典查询工作量评分。它采用实际部署的接受半径,而不只使用码率;有限异常集合则留给下文单独分析。
指标三:96.047 位广义 RBR 知识可靠性界
钱包结果是本研究中有定理支撑的部分。它采用 Block、Garreta、Tiwari 与 Zając 定义的广义逐轮知识可靠性(generalized round-by-round knowledge soundness)。协议有 30 次验证器动作,每次动作得到误差界 ;标量广义 RBR 约定取其中最大值:
这不是接受路径上各事件的并合界。在此处把所有动作的界相加,计算的会是另一个量。
精确 Reed–Solomon 几何
源仿射码长度 ,消息长度 ,论文次数 ,选定半径 。七次二进制折叠保持 1/32 码率,并产生从 65,536 递减到 512 的八种码字长度。
计算采用 Ben-Sasson、Carmon、Haböck、Kopparty 与 Saraf(BCHKS)的定理 4.6,重数 ,且 :
上取整不使用二进制浮点数计算。令 且
计算项目验证整数证书
代入正分母得到保守的有理数上界
因此,BCHKS 异常集合上限为 。固定主批处理差异是同一挑战上的非零仿射多项式,至多再贡献一个根:
为什么候选列表不贡献概率
选定的 Sudan 插值加权次数为 19,660,关于 的次数为三。四个系数块分别包含 19,661、17,614、15,567 与 13,520 个单项式:65,536 个齐次约束对应 66,362 个未知数,正余量为 826。因此存在非零插值多项式,且不同因子 最多三个。同一整数维数检查在每个折叠层上都保持为正。
bank、companion 与 mid 预言机分别是授权协议在源数据、伴随断言和中间折叠阶段观察到的三张编码表。提取器完整解码每张表,针对观测值重新编码每个候选,并检查精确授权与折叠链关系。每个列表最多三个元素,因此最多检查 组候选三元组。这 27 次检查属于确定性工作,不会加到失败概率中,也不会乘入失败概率。
30 次动作的误差明细
阶段 A 是十一轮 sumcheck,用来把公开的乘积求和关系绑定到所有者证明和公开授权数据。表中的代码名称对应精确的 Fiat–Shamir 挑战值;每行先写明其协议作用,因此无需查阅实现即可阅读。
| 动作或范围 | 作用 | 以 2128 为分母的异常集合分子 |
|---|---|---|
| 0–1 | 来源预言机与掩码求值挑战(OwnerRho、OwnerLambda) | 11;1 |
| 2–12 | 十一次所有者多线性扩展检查 | 每轮 10 |
| 13 | 所有者终端断言挑战(OwnerEta) | 10 |
| 14 | 主伴随断言挑战(MainGamma) | 4,157,831,959 |
| 15–25 | 阶段 A 的十一轮乘积求和检查 | 每轮 2 |
| 26 | 阶段 B 数值与上层表挑战(BetaSource) | 3,644,593,022 |
| 27 | 中间预言机挑战(BetaMid) | 499,529,882 |
| 28 | 尾部揭示挑战(BetaTail) | 1 |
| 29 | 64 个查询随机值 |
MainGamma 是最大动作。所得标量为
所得数值是交互式钱包基础 IOP 的96.047 位经典广义 RBR 知识可靠性界。完整证明逐项给出候选选择引理、失败状态集合(doomed set)归纳以及每次动作。
let rbr = wallet_generalized_rbr_metrics();
assert_eq!(rbr.source_correlated_agreement_bad_coins, 4_157_831_958);
assert_eq!(rbr.gamma_affine_batch_bad_coins, 1);
assert_eq!(rbr.max_restoration_triples_checked, 27);
assert_eq!(rbr.bad_coin_numerator, 4_157_831_959);
close(rbr.generalized_rbr_bits, 96.046_815_693_930_09, 1e-12);
指标四:有限接受路径的可靠性界
广义 RBR 可靠性与普通接受路径可靠性(accepting-path soundness)不能互换。计算后者时,必须先把有限误差项相加,再用 转换。查询前搜索不会自动降低交互记录中的所有可靠性误差项。
对于一份钱包授权:
得到 95.049176 位。对于 HistoryStep:
| 类别 | 查询项 | 接近项 | 有限和 |
|---|---|---|---|
| B64 | 84.757887 位 | 109.415049 位 | 84.757887 位 |
| B255 | 84.758438 位 | 108.415043 位 | 84.758438 位 |
一个固定无效区块若包含一次虚假授权事件和一次虚假 HistoryStep 事件,在不计查询前搜索的情况下具有保守加法界:每次伪造 84.756737 位。
查询前搜索应计入何处
16 位查询前工作量搜索(grinding)紧接在查询抽样之前。若只把它应用于后续查询项,而不乘到无关的有限域异常上,固定无效区块得到 95.021747 位。在计算项目中,这是 ParanO(1)d 最接近 ethSTARK 对比所用较宽松工作量核算口径的标量。
另一项单次实验允许一个区块包含最多 255 个可独立攻击的钱包证明事件:
事件并合在不计查询前搜索时得到 84.490657 位;只对查询项计入查询前搜索时得到 87.054734 位。该数值并非每次伪造工作量的对外摘要指标。在 定义下,生成 255 次独立尝试同样会消耗相应工作;若在计入所有尝试后再减去 ,可能把同一重数计算两次。真正的多目标 Fiat–Shamir 陈述需要统一的全局攻击工作量或预言机查询预算。
fixed_invalid_block_finite_no_grind_bits:
union_probability_bits(&[
wallet.finite_no_grind_bits,
limiting_history_finite_no_grind_bits,
]),
fixed_invalid_block_query_grind_only_bits:
union_probability_bits(&[
wallet.finite_query_grind_only_bits,
limiting_history_finite_query_grind_only_bits,
]),
可执行记录
计算以小型独立 Rust 仓库发布,而不是嵌入节点。它没有共识角色,也不改变任何网络参数。它的作用是让公式可审阅、可执行,并能感知参数漂移。
git clone https://github.com/ignotusnemo/parano1d-soundness.git
cd parano1d-soundness
cargo run --release
cargo test --release
cargo clippy --all-targets --release -- -D warnings
RUSTDOCFLAGS='-D warnings' cargo doc --release --no-deps
测试固定实际部署代码的版本、Toy Problem 原公式数值、两个 HistoryStep 类别、按 248 缩放的平方根证书、全部八个 BCHKS 上限、列表大小为三的插值证书、精确的 30 动作 RBR 误差明细,以及每项有限组合。其中一项回归测试明确规定:27 组候选三元组属于确定性提取器工作,绝不能进入误差分子。
所展示每个公式的数值计算均可执行、可复现。96.047 位广义 RBR 结果在其声明的经典交互模型下有定理支撑。128 位与 100.76 位评分明确标为基于猜想的数值。可复现的算术不会把 Toy Problem 猜想变成定理。
如何解释这些结果
所报告数值只用于各自命名指标内的同类比较:
- 128 位是按 Toy Problem 原公式得到、基于猜想的经典参数评分。
- 100.76 位是实际接受半径下、基于猜想的经典查询工作量评分。
- 96.047 位是交互式钱包基础 IOP 的、有定理支撑的经典广义 RBR 知识可靠性界。
- 95.022 位是按所述查询前搜索规则得到的固定无效区块有限组合,其中计入了工作量。
这些定义与文章开头的比较表一致,并保留在可执行输出中。每个数值只用于其明确命名的指标。
主要来源
- Ignotus Nemo,ParanO(1)d soundness。
- 钱包授权:96.047-bit 广义 RBR 界。
- Plonky2 安全声明及其字面参数计算。
- RISC Zero 可靠性计算器。
- StarkWare,Safe and Sound: A Deep Dive into STARK Security。
- Block、Garreta、Tiwari 与 Zając,Fiat–Shamir Security of FRI and Related SNARKs。
- Block 与 Tiwari,On the Concrete Security of Non-interactive FRI。
- Block、Garreta、Tiwari 与 Zając,On Soundness Notions for Interactive Oracle Proofs。
- Ben-Sasson、Carmon、Haböck、Kopparty 与 Saraf,On Proximity Gaps for Reed–Solomon Codes。
Ignotus Nemo