argon2 - Node.js

  • 作成日:
  • 最終更新日:2025/10/11

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)で生成された内容は、データベースにそのまま保存する必要があります。