本文へスキップ

bcrypt・argon2の照合

bcrypt & argon2 Checker

パスワードを指定したコストでbcryptにかけ、既存のbcryptのハッシュと突き合わせます(argon2は判別しますが計算はしません)。

パスワードをbcryptでハッシュしたり、既存の`$2a$`・`$2b$`・`$2y$`のハッシュと突き合わせたりします。実装はOpenBSDの`$2b$`で、公開されているOpenwallのcrypt_blowfishのテストベクタで検証してあり、このタブのワーカーの中で動きます。

🔒 ブラウザの中だけで動きますbcryptargon2passwordhash
モード

このタブの中だけで処理します。どこにも送りません。

コスト

1,024 ラウンド — 長く使われてきた既定値。

OpenBSD が定めるとおりの $2b$ の bcrypt です。公開されている Openwall crypt_blowfish のテストベクターで検証しており、すべてこのタブの中で動きます。パスワードは先頭 72 バイトだけが効きます。ここのバグではなく、bcrypt がそういうものです。 $2x$ のハッシュ(2011 年より前の crypt_blowfish のバグで作られたもの)は断り、argon2 は実装していません。

使い方

  1. ハッシュか照合かを選びます

    ハッシュには費用を決める必要があり、照合するときは貼り付けたハッシュから費用を読みます。文字列の中に入っているからです。

  2. 見合う費用を選びます

    1段階ごとに仕事量が倍になります。10が長らく既定でしたし、12が今のところ無難な選択で、14はブラウザでは数秒はっきりかかります。それが目的です。攻撃側にも同じだけかかります。

  3. 判定を読みます

    一致か、不一致かが出ます。すべてタブの中で起きるので、本番から持ってきたハッシュを貼り付けても、どこへも行きません。

よくある質問

argon2に対応せず、拒否するのはなぜですか

ブラウザで信頼できるargon2を使うには、このプロジェクトが1行ずつ監査できないWebAssemblyのビルドを一緒に配ることになるからです。bcryptは、読めるコードとしてここに実装され、公開されたテストベクタと突き合わせてあります。ブラックボックスから出てきたそれらしい答えより、argon2のハッシュを拒否するほうが正直です。

長いパスワードが、違うはずのハッシュにも一致するのはなぜですか

bcryptは先頭の72バイトしか読みません。先頭の72バイトが同じ2つのパスワードは、bcryptにとって同じパスワードです。この実装ではなく、bcryptそのものがそうです。長いパスフレーズを使うときに問題になり、みながargon2へ移る理由の1つです。

同じパスワードを2回ハッシュすると、違う文字列が出るのはなぜですか

実行のたびに16バイトのソルトを新しく引き、そのソルトがハッシュの中に一緒に入るからです。どちらの文字列も、同じパスワードを検証します。毎回同じ値が出るパスワードのハッシュは、ソルトの無いハッシュであり、レインボーテーブルが狙ったのがまさにそれです。

$2a$、$2b$、$2y$は違うものですか

72バイト以下のパスワードでは違いませんし、実際にはすべてがその範囲に入ります。接頭辞は、そのハッシュがどの歴史的なバグの前に作られたのか、あとに作られたのかを記録しているだけです。例外は`$2x$`で、これは2011年より前のcrypt_blowfishのバグで作られたハッシュを示すため、ここでは拒否します。

ここから渡せます

次の一手

このツールが出したものをそのまま受け取れる道具です。