パスワードの管理方法

Googleがアカウントやパスワードをどう管理しているのかは公開されていません。

各サービスでの一般的なパスワード管理方法を紹介します。

パスワード認証方法の基本

パスワードは他のサービス等と異なる物で、なるべく複雑で長い物が好ましいです。

今回は単純なパスワード「password1234」を複雑にした「p@ssw0rd!234」というパスワードを設定している事にして、基本的な認証の流れを紹介します。

ちなみにパスワードなどの流出をまとめているサイトのHIBPで調べると「password1234」は23,183回。「p@ssw0rd!234」は2回流出しています。どちらも誰かが使っていますが、後者の方が利用が少ないです。本来は誰も使っていない、流出もしていないパスワードの方が望ましいです。

設定したパスワードは、そのままの文字列の平文の「p@ssw0rd!234」をそのままどこかに保存した場合、これが流出すると大変なことになります。

例えば並びを逆にする暗号化をすると「432!dr0wss@p」になります。一般的にはもっと難しい暗号化ルールを採用しますが、暗号化は元に戻す復号が可能です。ルールがわからない場合でも、暗号化した物からパズルを解くように元に戻せる可能性があります。

そのため、Googleなどのまともなサービスではパスワードはそのままの平文の文字列はもちろん、暗号化した状態でも保存されていません

パスワードはハッシュ化して保存している

パスワードはハッシュ関数という特殊な数式で、元に戻せない数値(ハッシュ値)に変換したデータにして保存しています。

SHA256(SHA-2)などが近年よく使われていますが、どこで何のハッシュ関数がどのように使われているかは公開されていません。例えば「p@ssw0rd!234」をSHA256でハッシュ化すると「9156f54bc3c7b30bdb57a5e5566bab7dc275372514d3ccbd6953af7d7ee668df」というハッシュ値が得られます。

Googleなどのサービスはパスワードをこのようにハッシュ化して、ハッシュ値をどこかに保存しています。ユーザーがログインする際、入力されたパスワードを、同じルールでハッシュ化し、保存されているハッシュ値と一致すればパスワードが正しいと判断されます。

SHA256などの新しいハッシュ関数で得られたハッシュ値から、元のデータに戻すことは現時点で不可能とされています。
以前使われていたMD5、SHA-1などは安全性が低いとされています。従来元のデータに戻すのに数万年かかるとされていた物がもっと短い時間で出来る脆弱性が見つかったなどの状態になっています。通常は出来ませんが、比較的簡単に元のデータを得られるので、脆弱性が見つかっていないより高度なハッシュ関数が一般的に使われています。
このため、パスワードなどよりセキュアな用途では古いハッシュ関数は使わないのが一般的です。ハッシュ関数はパスワード以外にも使う事があるので、安全性が低くなっても用途自体はあります。

SHA-2など、現在セキュアだと言われているハッシュ関数は将来も絶対とは限らないです。多くの研究者がまだ見つかっていない脆弱性を調べたり、より強固なハッシュ関数を開発したりしています。

前述していますが、注意したいのは、ハッシュ関数で得たハッシュ値は暗号化しているわけではないということです。
暗号化というのは、一定の法則で暗号化し、その法則で復号できる物のことを言います。例えば、文字を1文字ずらすという法則で暗号化した場合、CATが、DBUになります。暗号の規則を知らないと、何のことかわかりませんが、暗号の規則がわかれば、1文字反対にずらせばわかります。

ハッシュ化はこのように計算などから元に戻すことが困難な、可逆性がある暗号化とは異なる不可逆性の物です。

単純にハッシュ化しただけではデータが流出すると問題になる

単純にハッシュ化しただけの場合、ハッシュ化したパスワードのデータが漏れた場合に問題なります。

事前に、全パターンのハッシュ化したデータを集めておけば、一致データを調べるだけで確認にパスワードがわかります。

例えばMD5など安全性が低いハッシュ関数の場合、大量のパスワードリストが作られていると考えられます。

SHA-2などでの実際に全パターンのハッシュ化したデータを作るのは、データが大きくなりすぎるため現実的ではないため、レインボーテーブルというのを使うなど、攻撃者が便利に使える方法もあります。ハッシュ化したデータも安全ではありません。

このレインボーテーブルを使った場合でも、高速にパスワードを割り出す事が出来ます。

ハッシュ化は複雑に運用することでさらに情報を守っている

パスワードは単純に1回ハッシュ化するだけでなく、特定の文字列を加えてハッシュ化するSalt(ソルト)と組み合わせてハッシュ化します。さらにこのハッシュ化を複数回行うStretching(ストレッチング)などを組み合わせています。

例えば「p@ssw0rd!234」に「google」という文字を加えてSHA-256でハッシュ化すると「8933ac8a531b5cd25d9d684b445dc5f02af81a97ceac086a86473b5b7620d3c6」になります。

このハッシュ化したものをもう一度SHA-256でハッシュ化すると

「7b5f62f848999253fa349e9f94d9e21128686a145bfef7d3c0d3db26770337c0」になります。それぞれ全く異なる物になっていることが分かると思います。

通常Stretchingは数回ではなく数百、数千回もしくはそれ以上行います。

Saltはユーザー毎に異なるのが一般的な用です。何回Stretchingをしているのか、それらをどう組み合わせているのかを秘密にしておけばハッシュ化したデータが流出しても、そこからパスワードが解析される可能性はほぼ問題ありません。

Googleがおそらくやっている事

公開されていないこと

パスワードをハッシュ化したデータが流出した場合

ハッシュ化したデータが仮に流出したとしても、どのようにハッシュ化しているのかがわからない限り、元のパスワードを割り出すのは現時点で不可能です。

ハッシュ化したデータを入手し、ハッシュ化のルールがわかった場合は、時間をかければGoogleアカウントのパスワードを解析できるかも知れません。

それでも解析には時間がかかるので、ハッシュ化したデータが流出したことがわかった時点でそれが公表されれば、ユーザーがパスワードを変更する時間的な余地はあります。

パスワードを他のサービスと使い回していた場合

Googleが他にない手段でパスワードなどの情報を管理していて、データを完全に守っているので、パスワードは守れているとします。それでも、他のサービスが同じように強固な手段でパスワードを管理しているとは限りません。

そもそもハッシュ化もしていないサービスもあるかも知れませんし、単純なハッシュ化してないサービスもあるかも知れません。

パスワードを使い回していた場合、どこか緩い管理をしているサービスがあれば、強固に守られているはずのパスワードも他のサービスから漏れる可能性があります。

パスワードは他のサービスと異なる物にしてください。

パスワードの管理方法を実際に確認したい方へ

パスワードの管理方法をUnixで確認する

量子コンピュータの登場でパスーワード管理はどうなるか

パスワードをハッシュ化したデータの解析は、現在一般的に使われている古典コンピュータの計算能力では事実上不可能とされています。しかしハッシュ化したデータを分析するための素因数分解等の高速化等、解析技術の進化によっては将来的には解析が現実的な範囲になる可能性があります。

さらに、最近開発が急速に進んで、一般にも使えるようになりつつある量子コンピュータは、現在一般的な古典コンピュータが不得意な素因数分解が高速に出来ると言われています。(Shorのアルゴリズムで可能と言われています)

そのような量子コンピュータの登場を予想して、対量子暗号などの研究も進んでいます。

パスワード管理に完璧はないので、常に新しい技術が導入されています。

Google以外はどうなのか実際の事件で振り返る

パスワードの管理方法について「Googleなどのまともなサービスではパスワードはそのままの平文の文字列はもちろん、暗号化した状態でも保存されていません」と書きましたが、インターネット各サービスの対応状況は異なります。

一見まともに管理していそうな所ほど危ない実態があります。そんな例を以下にメモします。

日本のパスワード平文管理事件

2022年3月
ITmediaの取材によると、KDDI、ドコモ、LINEMO、ソフトバンクなど各系列を含めた日本の通信キャリア各社は、パスワードを平文により管理している事実が広まった。
この取材に対し、ソフトバンクは「平文による通知は見直す必要があると認識しており、見直しの検討に入っている」、ドコモは「自分で設定したパスワードをdアカウント内のみで(平文として)確認できるが、パスワードはサーバの中で厳重に保管しており、SNSやメールで外部に提示することはない」と答えた。

2019年1月
平文管理していたオージス総研の「宅ふぁいる便」の約480万件のメールアドレスと平文のパスワードが流出した

安全性が低いハッシュ関数が使われていた事件

2023年8月
GMWが運営するpictBLand、pictSQUAREは、パスワードをMD5でハッシュ化し、ソルトもしていなかったが、それらのハッシュ化したパスワードデータ含めた多数のデータが流出した。