6个版本

新版本 0.2.2 2024年8月13日
0.2.1 2024年5月23日
0.1.3 2024年1月20日
0.1.1 2023年12月12日
0.1.0 2023年11月28日

#1530加密学 类别中

Download history 100/week @ 2024-05-14 124/week @ 2024-05-21 1/week @ 2024-05-28 4/week @ 2024-06-04

每月422次下载

GPL-3.0 许可证

60KB
1.5K SLoC

    __________  ____  ___________              
   / ____/ __ \/ __ \/ ___/_  __/___  ________ 
  / /_  / /_/ / / / /\__ \ / / / __ \/ ___/ _ \
 / __/ / _, _/ /_/ /___/ // / / /_/ / /  /  __/
/_/   /_/ |_|\____//____//_/  \____/_/   \___/
-------------------------------------------------
Ed25519 Threshold Signature Database

Crates.io License: GPLv3

简介

FROSTore是一个工具,用于防止您的私钥被泄露并被用于未经您许可的数据签名。

FROSTore允许您使用Ed25519阈值签名将分布式信任引入您的应用程序。FROSTore生成的密钥永远不会合并成一个密钥,也不会存储在任何单个设备上。这意味着即使设备被入侵,您的私钥仍然安全。

功能

  • 创建、存储和管理阈值签名
  • 使用阈值签名签名数据
  • 分布式密钥生成(DKG)
  • 可自定义的最小和最大阈值

示例

如何使用FROSTore生成密钥对(使用DKG)并签名一些数据的简单示例。

use frostore::*;

static TOTAL_PEERS: u16 = 3;
static MIN_THRESHOLD: u16 = 2;
static BOOT_NODES: [&str; 3] = [
    "/ip4/127.0.0.1/tcp/63888/p2p/12D3KooWDThDUUhDC2bi26E8LhHKsvLZq4wi7dNN5zypNVucgbqx",
    "/ip4/127.0.0.1/tcp/58521/p2p/12D3KooWEk8vk2vFp7qTbif7X5kjQGJorFThxu8LheTF22Ef2fRc",
    "/ip4/127.0.0.1/tcp/58560/p2p/12D3KooWDs3SvAP4pfQAdqse9AroqaAsxDuswV6iFkc6aAwJooVu",
];

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Create the network client
    let mut swarm = Swarm::builder().build_and_exec()?;

    // Add the boot nodes to the client
    for boot_node in BOOT_NODES.iter() {
        let multiaddr: Multiaddr = boot_node.parse()?;
        eprintln!("Adding peer: {:?}", multiaddr);
        swarm.add_peer(multiaddr)?.await?;
    }
    eprintln!("Finished adding peers");

    // Generate a new keypair on the network
    let pubkey = swarm.generate(MIN_THRESHOLD, TOTAL_PEERS)?.1.await?;
    println!("Generated pubkey: {:?}", pubkey);

    // Sign some data
    let data = b"Hello, World!".to_vec();
    eprintln!("Signing data: {:?}", data);
    let signature = swarm.sign(pubkey, data.clone())?.1.await?;
    println!("Signature: {:?}", signature);

    // Verify the signature
    let valid = pubkey.verify(&data, &signature).is_ok();
    println!("Signature Valid: {}", valid);
    assert!(valid);
    Ok(())
}

我们提供了一些更多示例来帮助您入门。您可以在/examples/目录中找到它们。

有关如何使用FROSTore的更多信息,请参阅我们的文档

研究

FROSTore主要基于以下研究论文

依赖项

~17–54MB
~1M SLoC