初めての投稿
dsk0425lucky
Dsk blog
Argon2は、2015年のパスワードハッシングコンペティションで優勝した、現在最も推奨されているパスワードハッシングアルゴリズムの一つです。このアルゴリズムには、耐メモリ攻撃、耐サイドチャネル攻撃の特性を備えた複数のバリエーションがあります:
Argon2アルゴリズムをRustで実装するには、argon2
クレートを使用します。以下は基本的な使用例です:
Cargo.tomlに以下を追加
[dependencies]
argon2 = "0.5.3"
password-hash = { version = "0.5.0", features = ["getrandom"] }
argon2クレートはpassword-hashクレートをRe-exportしています。
use argon2::password_hash::{
rand_core::OsRng,
PasswordHash,
PasswordHasher,
PasswordVerifier,
SaltString,
};
use argon2::Argon2;
fn main() {
let password = b"secret_password";
let salt = SaltString::generate( &mut OsRng);
// デフォルト設定を使用してアルゴリズムを初期化
let argon2 = Argon2::default();
// パスワードをハッシュ化する
let password_hash = argon2.hash_password(password, &salt)
.unwrap()
.to_string();
// ハッシュを検証
let parsed_hash = PasswordHash::new(&password_hash)
.unwrap();
let result = argon2
.verify_password(password, &parsed_hash)
.is_ok();
println!("password_hash = {}", password_hash);
println!("parsed_hash = {:?}", parsed_hash);
println!("result = {}", result);
}
Argon2::default()
のデフォルト値は
AlgorithmはOWASPによっても推奨されるArgon2idを使用し、
VersionはV0x13(バージョン19)を採用しています、
Paramsはargon2クレートが推奨するデフォルトパラメータ。
出力結果
ハッシュ化されたパスワード。
password_hash = $argon2id$v=19$m=19456,t=2,p=1$fwaOLxRginmaeJBKnTJ0vQ$NOfhTji56BtWSCwF8esr5b/vqcTEBM2COtUd0RW+wNY
parsed_hashの値はこのようになっています。
パスワードハッシュとソルトの値、そしてそれがどのように構成されているかを示しています。これにより、検証プロセスで正確に比較できます。
parsed_hash = PasswordHash {
algorithm: Ident("argon2id"),
version: Some(19),
params: {
Ident("m"): Value("19456"),
Ident("t"): Value("2"),
Ident("p"): Value("1")
},
salt: Some(
Salt("fwaOLxRginmaeJBKnTJ0vQ")
),
hash: Some(
Output("NOfhTji56BtWSCwF8esr5b/vqcTEBM2COtUd0RW+wNY")
)
}
検証結果
result = true
verify_password()
メソッドを使用してパスワードが正しいかどうかを検証し、結果はブール値(true
またはfalse
)で表示されました。
今回は、ランダムなソルトと共にArgon2アルゴリズムを使用してハッシュ化し、その結果を検証しました。