4 个版本 (2 个重大更新)
0.4.0 | 2021 年 1 月 29 日 |
---|---|
0.3.2 | 2021 年 1 月 14 日 |
0.3.1 | 2021 年 1 月 14 日 |
0.3.0 |
|
0.2.0 | 2021 年 1 月 13 日 |
#1551 在 密码学
每月 62 次下载
28KB
348 行
此包提供了一个简单的 ElGamal 密码系统实现,该系统在 ristretto255 椭圆曲线群上使用 curve25519-dalek 包。**本包不针对一般开发者**,而是针对实现使用 ElGamal 的协议的密码学家。
我应该使用 ElGamal 吗?
使用 ElGamal 密码系统的主要原因是需要 同态属性:给定消息 m1
和 m2
,它们的加密和是 m1 + m2
的加密。在椭圆曲线群中,这种同态是乘法的。
在其他情况下,ElGamal **通常不适用**。这是因为它对选择密文攻击(这是同态属性的直接后果)不安全。
警告:虽然本包的作者在密码学方面受过教育,但他们不保证实现的安全性。请自行承担风险。
致谢
作者感谢 Henry de Valence 提供的反馈和建议。
使用
要导入 rust-elgamal
,请将以下依赖项添加到您的 Cargo.toml
文件中
rust-elgamal = "0.2"
因为此包处于预发布状态(主要版本 0),次要版本可能引入破坏性更改。因此,您不应使用 rust_elgamal = "0"
。
示例
use rand::rngs::StdRng;
use rand::SeedableRng;
use rust_elgamal::{DecryptionKey, Scalar, GENERATOR_TABLE};
const N: usize = 100;
let mut rng = StdRng::from_entropy();
let dec_key = DecryptionKey::new(&mut rng);
let enc_key = dec_key.encryption_key();
let message = &Scalar::from(5u32) * &GENERATOR_TABLE;
let encrypted = enc_key.encrypt(message, &mut rng);
let decrypted = dec_key.decrypt(encrypted);
assert_eq!(message, decrypted);
功能
std
(默认启用):包括 Rust 标准库。对于嵌入式环境,请禁用此功能。enable-serde
:启用 serde 支持。simd_backend
:该软件包使用 curve25519-dalek 来实现椭圆曲线群操作。在 nightly Rust 中,curve25519-dalek 支持使用 SIMD(单指令,多数据)指令以获得额外的效率。使用 Rust 的 nightly 版本启用此功能以使用 SIMD 操作(无论是avx2
还是ifma
)。例如
# Requires nightly, RUSTFLAGS="-C target_feature=+avx2" to use avx2
cargo build --features "simd_backend"
# Requires nightly, RUSTFLAGS="-C target_feature=+avx512ifma" to use ifma
cargo build --features "simd_backend"
nightly
:用于构建文档和 SIMD 支持。
依赖项
~1.5–2MB
~46K SLoC