#crypto #argon2 #argon2i #hash #argon2d

argon2rs

运行在Argon2上的纯Rust密码哈希库

4个版本

使用旧的Rust 2015

0.2.5 2016年8月20日
0.2.1 2016年2月7日
0.2.0 2016年2月4日
0.1.0 2016年2月1日

#396 in 密码学

Download history 1203/week @ 2023-10-24 1284/week @ 2023-10-31 1124/week @ 2023-11-07 1138/week @ 2023-11-14 1409/week @ 2023-11-21 903/week @ 2023-11-28 1075/week @ 2023-12-05 1102/week @ 2023-12-12 1088/week @ 2023-12-19 874/week @ 2023-12-26 1227/week @ 2024-01-02 1062/week @ 2024-01-09 1200/week @ 2024-01-16 1144/week @ 2024-01-23 1120/week @ 2024-01-30 1229/week @ 2024-02-06

4,810 每月下载量
30 个crate中使用 (直接使用18个)

MIT 许可证

355KB
1K SLoC

argon2rs

Build Status

这是一个基于Rust的纯库,提供了最先进的Argon2哈希算法的两种变体,适用于密码哈希和基于密码的密钥派生。

文档

安装

通过cargo

$ cd $PROJECT_ROOT
$ cargo install --features "simd"

从git

$ git clone https://github.com/bryant/argon2rs $ARGON_DIR && cd $ARGON_DIR
$ cargo build --features "simd"

使用

examples/helloworld.rs

extern crate argon2rs;

pub fn main() {
    let (password, salt) = ("argon2i!", "delicious salt");
    println!("argon2i(\"argon2i\", \"delicious\"):");
    for byte in argon2rs::simple2i(&password, &salt).iter() {
        print!("{:02x}", byte);
    }
    println!("");
}

输出

argon2i("argon2i", "delicious"):
e254b28d820f26706a19309f1888cefd5d48d91384f35dc2e3fe75c3a8f665a6

Argon2有两种变体,它们在块填充轮次中计算引用索引的方式不同。Argon2d以更快但依赖于数据的方式执行,可能会受到侧信道 攻击,而Argon2i("i"表示与明文输入无关)运行较慢但免受此类攻击,因此是密码哈希的首选。

待办事项

  • 并行化。
  • 将SIMD集成到压缩函数中。
  • 敏感数据(如:Matrix)的零丢弃特性和: Matrix
  • 常量时间验证API。
  • 基准测试。
  • 支持NEON和其他架构上的SIMD。
  • 模糊测试。

许可证

MIT。

基准测试

我们的主要基准测试是使用默认参数的单线程和多线程Argon2i运行与参考实现的对比。为了编译和运行此测试,首先拉取C源代码

$ git submodule init
$ git submodule update benches/cargon/phc-winner-argon2

然后像往常一样使用Cargo进行基准测试

$ rustc --version
rustc 1.11.0-dev (4b240fe96 2016-06-08)

$ export RUSTFLAGS='-C target-feature=+avx'
$ cargo bench --features=simd

# output trimmed for brevity

     Running target/release/versus_cargon-b5955411e1594c85

running 5 tests
test ensure_identical_hashes ... ignored
test bench_argon2rs_i        ... bench:   9,547,031 ns/iter (+/- 15,964)
test bench_argon2rs_threaded ... bench:   4,584,163 ns/iter (+/- 398,803)
test bench_cargon_i          ... bench:  10,013,015 ns/iter (+/- 177,482)
test bench_cargon_threaded   ... bench:   3,753,022 ns/iter (+/- 48,688)

test result: ok. 0 passed; 0 failed; 0 ignored; 2 measured

参考资料

"Argon2: 用于密码哈希和其他应用的内存困难函数"

依赖关系