1 个不稳定版本

使用旧的 Rust 2015

0.0.1 2016年8月20日

#30#argon2

Download history 34/week @ 2024-03-11 25/week @ 2024-03-18 31/week @ 2024-03-25 55/week @ 2024-04-01 16/week @ 2024-04-08 24/week @ 2024-04-15 25/week @ 2024-04-22 23/week @ 2024-04-29 20/week @ 2024-05-06 22/week @ 2024-05-13 24/week @ 2024-05-20 20/week @ 2024-05-27 29/week @ 2024-06-03 18/week @ 2024-06-10 19/week @ 2024-06-17 23/week @ 2024-06-24

91 每月下载量
用于 2 crates

1MB
4K SLoC

C 2.5K SLoC // 0.1% comments Visual Studio Project 1.5K SLoC Visual Studio Solution 98 SLoC PowerShell 70 SLoC // 0.0% comments Shell 55 SLoC // 0.1% comments Rust 44 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_simple(\"{}\", \"{}\"):", password, salt);
    for byte in argon2rs::argon2i_simple(&password, &salt).iter() {
        print!("{:02x}", byte);
    }
    println!("");
}

输出

argon2i_simple("argon2i!", "delicious salt"):
e254b28d820f26706a19309f1888cefd5d48d91384f35dc2e3fe75c3a8f665a6

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

待办事项

  • 并行化。
  • 将 SIMD 集成到压缩函数中。
  • 敏感类型(s)的零在释放特质:Matrix
  • 恒等时间验证 API。
  • 基准测试。
  • 支持 NEON 和其他架构上的 SIMD。
  • 模糊测试。
  • 证明 BlockMatrix 中未检查访问的安全性。

基准测试

我们的主要基准测试是针对默认参数的 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 bench_ref"

# 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:密码散列和其他应用的内存困难函数"

依赖项