#verifier #stark #zkp #crypto

no-std winter-verifier

Winterfell STARK验证器

18个不稳定版本 (8个破坏性)

0.9.0 2024年5月9日
0.8.3 2024年3月15日
0.8.1 2024年2月21日
0.7.0 2023年10月23日
0.2.0 2021年8月24日

#257 in 加密学

Download history 2367/week @ 2024-04-26 1941/week @ 2024-05-03 1870/week @ 2024-05-10 1210/week @ 2024-05-17 1211/week @ 2024-05-24 1871/week @ 2024-05-31 1883/week @ 2024-06-07 1937/week @ 2024-06-14 1725/week @ 2024-06-21 2073/week @ 2024-06-28 1870/week @ 2024-07-05 2314/week @ 2024-07-12 2102/week @ 2024-07-19 2895/week @ 2024-07-26 2288/week @ 2024-08-02 1661/week @ 2024-08-09

9,349 每月下载量
用于 16 个crate (2直接)

MIT 许可证

1MB
15K SLoC

Winterfell STARK验证器

此crate包含一个STARK验证器的实现,该验证器可以验证由prover crate生成的证明。

用法

要验证一个证明,您可以使用verifier::verify()函数,该函数具有以下签名

pub fn verify<AIR, HashFn, RandCoin>(
    proof: Proof,
    pub_inputs: AIR::PublicInputs,
    acceptable_options: &AcceptableOptions,
) -> Result<(), VerifierError> 
where 
    AIR: Air, 
    HashFn: ElementHasher<BaseField = AIR::BaseField>,
    RandCoin: RandomCoin<BaseField = AIR::BaseField, Hasher = HashFn>,

其中

  • AIR是实现了针对您计算Air特质的类型(有关更多信息,请参阅air crate)。
  • HashFn是定义在证明生成过程中由prover使用的哈希函数的类型。
  • RandCoin是定义在证明生成过程中绘制随机值的方法的类型。
  • proof是prover生成的证明,证明计算针对某些公共输入执行正确。
  • pub_inputs是prover执行计算所使用的公共输入集。
  • acceptable_options定义了验证器可以接受的安全参数集。

例如,如果我们有一个实现了Air特质的FibAir结构,它描述了斐波那契数列的计算(有关具体实现,请参阅examples crate),我们可以验证prover正确地计算了序列的第1,048,576项,如下所示

let min_sec = AcceptableOptions::MinConjecturedSecurity(95);
let fib_result = BaseElement::new(226333832811148522147755045522163790995);
match verifier::verify::<FibAir, Blake3, DefaultRandomCoin<Blake3>>(proof, fib_result, &min_sec) {
    Ok(_) => println!("Proof verified!"),
    Err(err) => println!("Failed to verify proof: {}", err),
}

其中,226333832811148522147755045522163790995是当序列在128位模数2128 - 45 * 240的128位字段中计算时,斐波那契数列的第1,048,576项。

性能

证明验证非常快,几乎与被验证计算复杂性无关。在绝大多数情况下,证明可以在现代中端笔记本电脑CPU上(使用单个核心)在3 - 5毫秒内验证。

然而有一个例外:如果一个计算需要大量的 sequence 断言(参见 air crate 以获取更多信息),验证时间可能会超过5毫秒。但是要使影响明显,断言的值数量需要达到数万。即使对于数十万的 sequence 断言,验证时间也不应超过50毫秒。

crate功能

此crate可以使用以下功能进行编译

  • std - 默认启用,并依赖于Rust标准库。
  • no_std - 不依赖于Rust标准库,并支持编译到WebAssembly。

要使用 no_std 编译,通过 --no-default-features 标志禁用默认功能。

许可证

本项目受 MIT许可

依赖关系

~3MB
~58K SLoC