#vrf #random #randomness #ecvrf #public-key

no-std libecvrf

一个与 EVM 兼容的 ECVRF,基于 secp256k1 曲线和 keccak256

3 个稳定版本

1.1.2 2023年9月1日
1.0.1 2023年2月25日

#764密码学

Download history 38/week @ 2024-04-02

228 每月下载量

Apache-2.0

30KB
635

Libecvrf

来自 Orand 的库,Orand 是一个去中心化 RNG(或公共随机性信标)@ Orochi 网络

概述

在密码学中,可验证随机函数(VRF)是伪随机函数的公钥版本。它生成一个伪随机输出,并提供一个证明来证明输出是正确计算的。

VRF 包含一对密钥,即公钥和私钥。私钥与输入一起由持有者用于计算 VRF 的值及其证明,而公钥由任何人用于验证计算的正确性。

传统伪随机函数的问题在于,其输出无法在没有种子知识的情况下进行验证。因此,恶意对手可以选择一个对他有利的输出,并声称它是函数的输出。VRF 通过引入一个公钥和可以公开验证的证明来解决此问题,同时所有者可以保留私钥来生成与随机选择的数字不可区分的数字。

VRF 在各个方面都有应用。其中之一是在互联网安全中,它用于提供对存储在基于哈希的数据结构中的数据的离线枚举(例如,字典攻击)的隐私保护 irtf-vrf15。VRF 还用于彩票系统 MR02 和电子现金 BCKL09

功能

这个库是 Orand 的一个组成部分,Orand 是一个去中心化 RNG(或公共随机性信标)。这个 crate 提供两个主要功能,普通的 ECVRF 如 irtf-vrf15 中所述,以及与 Chaink VRF 验证器在 Solidity 中兼容的 EVM 友好的 ECVRF。

使用方法

use libecvrf::{
    extends::ScalarExtend,
    secp256k1::{curve::Scalar, SecretKey},
    util::thread_rng,
    ECVRF,
};

fn main() {
    let secret_key = SecretKey::random(&mut thread_rng());
    let ecvrf = ECVRF::new(secret_key);
    let alpha = Scalar::randomize();

    let proof = ecvrf.prove(&alpha);
    println!("result: {:#?}", proof);

    println!("{:?}", ecvrf.verify(&alpha, &proof));

    let smart_contract_proof = ecvrf.prove_contract(&alpha);

    println!("result: {:#?}", smart_contract_proof);
}

许可证

此项目根据 Apache 许可证,版本 2.0 授权。

用 ❤️ 和 🦀 构建

依赖项

~1.5–2.2MB
~47K SLoC