#有限域 #rsa #大数 #安全 #gmp #编译时

unknown_order

一个用于处理未知阶有限域的crate,适用于RSA、Paillier、超椭圆曲线等。

21个版本 (9个破坏性更新)

0.10.1 2024年6月12日
0.9.0 2024年5月6日
0.8.0 2024年2月13日
0.7.0 2023年12月28日
0.2.3 2021年7月21日

#975加密学

Download history 116/week @ 2024-05-01 49/week @ 2024-05-08 3/week @ 2024-05-15 158/week @ 2024-05-22 23/week @ 2024-05-29 67/week @ 2024-06-05 217/week @ 2024-06-12 68/week @ 2024-06-19 48/week @ 2024-06-26 25/week @ 2024-07-03 17/week @ 2024-07-10 39/week @ 2024-07-17 56/week @ 2024-07-24 31/week @ 2024-07-31 24/week @ 2024-08-07 67/week @ 2024-08-14

每月191次下载
3 个crate中使用 (直接使用2个)

Apache-2.0 OR MIT 和可能 LGPL-3.0+

115KB
3K SLoC

unknown_order

Crates.io Documentation License-Image minimum rustc 1.50 dependency status

处理未知阶群组的crate。

我在多个项目中看到,当它们需要一个高精度库时,通常会使用以下三个库之一: Gnu MP BigNum库OpenSSL的大数库Rust的大整数库,具体取决于需求和要求(许可、性能、平台目标、常数时间)。

默认情况下,使用纯Rust选项,不使用任何外部C绑定。这个版本也友好地支持WASM。

要使用OpenSSL的大数库,您必须在路径中具有libcrypto和libssl。在您的 Cargo.toml 中添加以下内容。

unknown_order = { version = "0.9", default-features = false, features = ["openssl"] }

要使用Gnu MP大数库,您必须在路径中具有libgmp。在您的 Cargo.toml 中添加以下内容。

unknown_order = { version = "0.9", default-features = false, features = ["gmp"] }

此库将它们都包装在一个公共API中,因此它们可以互换使用。

未知阶的群组需要使用由两个大素数组成的模数。此库旨在简化这些用例,如RSA、Paillier、超椭圆曲线、累加器、CL签名等。

模数在编译时是未知的,这排除了使用某些特性,如 ff::PrimeField,因此不幸的是,调用者需要记住使用以 mod 前缀的方法来达到预期的结果。

此库一次只能有一个实现处于活动状态。不同实现之间的混合并不一定是问题,但大量注入依赖和混合许可证并不是一个好主意。这也迫使用户在选择特定实现时了解他们所做出的权衡。例如,某些实现可能不是常数时间,而其他实现则非常重要,特别是在用于加密目的时。

当使用 features=opensslfeatures=gmp 时,如果可用,将使用常数时间的实现。

示例

use unknown_order::BigNumber;

fn main() {
    // Create a safe group of unknown order
    let p = BigNumber::safe_prime(1024);
    let q = BigNumber::safe_prime(1024);
    let n = p.clone() * q.clone();
    
    // Simulate RSA algorithm, DO NOT USE totally insecure
    
    // Public key
    let e = BigNumber::from(65537);
    
    // throw away when done
    let totient = (p.clone() - 1) * (q.clone() - 1);
    
    // Secret key
    let d = e.invert(&totient).unwrap();
    
    
}

许可证

根据您的选择,许可协议为以下之一

任选其一。

贡献

除非您明确声明,否则任何有意提交供包括在您的工作中的贡献,如Apache-2.0许可证中定义,均应双重许可如上,无需任何额外条款或条件。

此软件包是Hyperledger Labs Agora项目的一部分

依赖项

~1–6.5MB
~137K SLoC