argon2 とは?
argon2 は、現代で最も安全性の高いパスワードハッシュアルゴリズムの一つです。
2015年にパスワードハッシュコンペティション(Password Hashing Competition, PHC)で最優秀賞を受賞し、正式に採用されました。
| バージョン | 特徴 | 主な用途 |
|---|---|---|
| argon2d | 高速、GPU耐性に優れる | ブロックチェーン、暗号通貨など |
| argon2i | サイドチャネル攻撃に強い | パスワードハッシュ |
| argon2id | dとiのハイブリッド | 現在の推奨(パスワード保存に最適) |
Node.js の argon2 ライブラリではデフォルトで argon2id を使用します。
インストールするには、以下のコマンドを実行します。
npm install argon2 CSRFトークンの生成には、向かない為、crypto.randomBytes()などで行います
クラス化のサンプル
const argon2 = require('argon2');
class PassManager {
async createHashPass(password){
try {
return await argon2.hash(password);
} catch (err) {
console.error('Hash error:', err);
throw err;
}
}
async verifyPassword(hash, password) {
try {
return await argon2.verify(hash, password);
} catch (err) {
console.error('Verification error:', err);
return false; // 失敗時は false を返す設計もアリ
}
}
}
(async () => {
const password = "password123"
const passManager = new PassManager();
const hashPass = await passManager.createHashPass(password);
console.log(hashPass);
const isValid = await passManager.verifyPassword(hashPass, password);
console.log("一致:", isValid);
})(); console.log(hashPass)で表示される内容は、以下のような内容が表示されます。
$argon2id$v=19$m=65536,t=3,p=4$7rl0bC7YKB3QO+Np7KV4sQ$gzX3R25YvI8xM4CjXFeNzV7ydeY4nt1L3KbblX2ISIc 上記は1つの文字列であり、以下のような情報がすべて詰まっています。
| 部分 | 意味 |
|---|---|
| $argon2id$ | アルゴリズムの種類 |
| v=19 | バージョン(現在は19) |
| m=65536,t=3,p=4 | メモリ、タイム、パラレリズム(パラメータ) |
| $7rl0bC... | ソルト(Base64) |
| $gzX3R2... | ハッシュ(Base64) |
argon2.hash(password)で生成された内容は、データベースにそのまま保存する必要があります。