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 密码学
4,810 每月下载量
在 30 个crate中使用 (直接使用18个)
355KB
1K 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(\"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