1 个不稳定版本
使用旧的 Rust 2015
0.0.1 | 2016年8月20日 |
---|
#30 在 #argon2
91 每月下载量
用于 2 crates
1MB
4K SLoC
argon2rs
这是一个基于纯 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。
- 模糊测试。
- 证明
Block
、Matrix
中未检查访问的安全性。
基准测试
我们的主要基准测试是针对默认参数的 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