# ハッシュ、ソルト、bcrypt、Argon2：まともなサイトがあなたのパスワードにしていること

> まともなサイトはあなたのパスワードを知らない。持っているのは指紋だけだ。そしてその指紋を計算する関数は、わざと遅くなければならない。守る側と攻める側がまったく同じ競走を走る、唯一の防御だからである。

2026-03-26 · David Carrero · password.es
Original: https://password.es/ja/blog/hash-salt-bcrypt-argon2-no-hanashi/

---

まともなサイトは、あなたのパスワードを知らない。知りたくないのではない。知りようが
ないのだ。

種も仕掛けもあるように聞こえる。打ち込むたびにシステムは通してくれるし、通すために
は何かを照合しているはずだから。だが**照合することは、知っていることではない**。
サーバーが保管しているのは、あなたのパスワードから計算された**指紋**だ。あなたが
打ち込むと、もう一度指紋を計算して、見比べる。一致すれば、どうぞお通りください。
**パスワードそのものが、どこかに書かれている必要は一度もない。**

そこから、まともなサービスとそうでないものを見分けるいちばんはっきりした合図が出て
くる。忘れたと言ったらパスワードをメールで送ってきた——それは保存していたということ
だ。そして保存されているものは、遅かれ早かれ、誰か別の人の手に渡る。

## 1979年：保存しないという発想と、わざと遅くするという発想

1979年、**ロバート・モリスとケン・トンプソン**が *Communications of the ACM* に
「Password Security: A Case History」を発表し、自分たちがUnixでやったことを書いた。
学んだことの報告書であり、そこには今では当たり前とされている二つの発想が据えられて
いる。

ひとつめは彼らの発明ではない——パスワードの代わりにハッシュを保存するのは以前から
行われていた——が、誰よりもうまく説明した。**パスワードを保存せず、そのハッシュを
保存する。** パスワードを、でたらめな見た目の値に変換する関数だ。しかも来た道を戻れ
ない。ハッシュからパスワードへは帰れない。

ふたつめは正真正銘、彼らのものだ。**ソルト**である。利用者ごとに違う乱数を、ハッシュ
を計算する前にパスワードへ混ぜる。ソルトがなければ、同じパスワードを使った二人は同じ
ハッシュを持つことになり——盗まれたファイルは間違い探しならぬ「同じもの探し」に成り
下がる——さらに悪いことに、誰かが一度だけ巨大な表を計算しておいて、世界中のデータ
ベースに使い回せてしまう。**ソルトはあなたのパスワードを当てにくくするのではない。
当てても他の誰の役にも立たないようにするのだ。**

だがこの同じ論文には三つめの発想がある。引用されることははるかに少なく、そしてここ
で肝心なのはそれだ。彼らは関数を**意図して遅くした**。手抜かりではない。狙ってやった
のである。パスワードを暗号化するのに、技術的に必要な分よりずっと多くの手間をかけた。
毎朝一度入るだけの人には、どうでもいい違いだからだ。候補を何百万個も試す人には、そう
ではない。

半世紀近く前の一文に、話のすべてが入っている。

## 遅さだけが誠実な防御である理由

コンピューターの防御はたいてい非対称だ。守る側には安く、攻める側には高くつく。暗号化
は安い。鍵なしの復号は無理筋である。守る側は構造的に有利な札を持って勝負している。

パスワードの保存はそうではない。**ここでは守る側と攻める側が、まったく同じ関数を実行
する。** あなたは正解したことを確かめるためにハッシュを計算する。向こうは正解したかを
確かめるためにハッシュを計算する。セキュリティのなかで唯一、両者が同じ脚で走る競走だ。

相手より速く走れないとき、残る手はひとつしかない。**二人ぶんまとめて、コースの通行料
を上げること**だ。あなたはその代金をログイン一回につき一度払う。向こうは試行一回に
つき一度払う。向こうに必要な試行回数はあなたより桁違いに多いのだから、同じ請求書が
両者にもたらす痛みは比べものにならない。パスワードハッシュがやっているのはそれである。

だから、速くて他の用途では文句なしに優秀な関数——たとえばSHA-256——は、ここでは
最悪の選択になる。速いからだ。速さこそ、ここでいちばん要らないものである。

## 1999年：bcryptと、調節できる部品としてのコスト

遅い関数の困ったところは、ハードウェアがじっとしていてくれないことだ。1979年に遅かった
ものは、しばらくすれば一瞬になる。ある十年のコンピューターに合わせて調整した防御は、
誰も手を触れないまま、ひとりでに老いていく。

1999年、**ニールス・プロヴォスとデイヴィッド・マジエール**がUSENIX Annual Technical
Conferenceで**bcrypt**を発表した。論題がすでにすべてを言っている。*A Future-Adaptable
Password Scheme*。

発想はこうだ。コストを**関数の中ではなく、パラメーターに置く**。bcryptにはあなたが
決めるコスト係数があり、それがハッシュと一緒に保存される。ハードウェアがうんと速く
なったら、数字を上げる。すると新しいパスワードは、また相応の値段に戻る。アルゴリズム
を取り替えることなく、である。

**自分自身がいずれ古びることを前提にし、そのための備えまで組み込んだ設計だ。** そんな
ことをするソフトウェアは、ほとんどない。

## 2009年：scryptと、時間だけでは足りないという発見

bcryptは計算時間を高くつくようにした。そしてそれは効いた——攻撃者が、守る側と同じ種類
の機械を使うのをやめるまでは。

サーバーには、速くて何でもこなす核がいくつか載っている。GPUには、小さな核が途方もない
数だけ並んでいて、同じことを一斉にやる。ASICはさらに先へ行く。たったひとつの演算を実行
するためだけに焼かれたシリコンだ。あなたの防御が「この演算にはXかかる」でできているなら、
誰かがXを一度にたくさんこなすハードウェアを作れてしまう。守る側は、相変わらず自分の
サーバー一台のままだ。

2009年、**コリン・パーシヴァル**が別の理屈で**scrypt**を発表した。*Stronger Key
Derivation via Sequential Memory-Hard Functions*。コストが計算にしかないなら、並列化
されてしまう。だが**メモリはただではもらえない**。関数に大量のRAMを使わせ、しかも回避
できない順序でそこを巡らせる。すると途端に、攻撃者は核を増やせなくなる。核ひとつひとつ
に、それぞれ自前のメモリが要るからだ。そしてGPUの核が持っているのは、有り余る演算力と、
一個あたりごくわずかなRAMである。

**パーシヴァルは演算を高くしたのではない。それを大量に繰り返すために必要なハードウェア
を高くした。** これは階層がひとつ違う。攻撃者の時計ではなく、攻撃者の予算を狙い撃ちに
している。

## 2015年：Argon2と、議論の終わり

もっともな選択肢が複数あるという状態は、誰の役にも立たなかった。そこで暗号の世界は、
何かに決着をつけたいときのいつものやり方をとった。公開コンペである。**Password Hashing
Competition** は候補を募り、何年もかけて開かれた分析にさらし、**2015年**に**Argon2**を
優勝と告げた。

Argon2は二つの教訓を受け継いでいる。時間のコストとメモリのコスト。しかも両方を別々に
調節でき、さらにスレッド数も指定できる。魔法ではない。1979年と1999年と2009年を整理して
まとめ直したもので、それを破ろうとするのが仕事だった人たちの手で点検されている。

## これがあなたにとって何を意味するか

ここまでの話の大半はあなたの手の届かないところにある。それは言っておくべきだ。**ハッシュ
を選ぶのはサイトであって、あなたではない。** 世界一のパスワードを持っていても、Excelに
平文で保存される可能性はある。

だが方程式のもう片側は、あなた次第だ。この建物ぜんぶ——ソルトも、コストも、メモリも
——は、攻撃者の**一回ごとの試行を高くつかせる**ためにある。何回試す必要があるかを決めて
いるのは、あなたのパスワードだ。辞書に載っているなら、どんなに遅い関数も助けにならない。
最初のほうで落ちる。長くて何にも似ていないなら、その一回あたりの値段に、使える時間には
到底収まらない回数が掛け算される。

だから私たちの[ジェネレーター](/ja/)は百分率ではなく**エントロピーのビット数**を見せる
し、[チェッカー](/ja/checker/)は記号を数えるより先に、あなたのパスワードを辞書のなかに
探しにいく。**向こうは一回あたりの値段を決める。あなたは回数を決める。** どちらの半分も、
もう片方なしでは働かない。

そう、結局はいつもと同じ問いのままだ。ただし今は、向こう側で誰かが毎秒何度もその答えを
出そうとしていて、私たちは1979年からずっと、その一度一度に金を払わせようとしている。

---

*出典：R. モリス、K. トンプソン「Password Security: A Case History」Communications of
the ACM、1979年 · N. プロヴォス、D. マジエール「A Future-Adaptable Password Scheme」
USENIX Annual Technical Conference、1999年（bcrypt） · C. パーシヴァル「Stronger Key
Derivation via Sequential Memory-Hard Functions」2009年（scrypt） · Password Hashing
Competition、2015年にArgon2が優勝。*
