パスワードハッシュとは暗号の基礎

ハッシュ関数とそれがどのようにパスワードを保護するかについての紹介。

Basics in Cryptography: What is a password hash?

データ流出がハイテク関連のニュースを席巻し続ける中、電子メールやパスワードが流出したというニュースをよく耳にする。しかし、ハッシュ化されたパスワードとは何なのか?ハッシュ化されていないパスワードとどう違うのか、「ソルト」は何か関係があるのか?本日の暗号技術ガイドでは、これらのトピックについて掘り下げてみよう。


パスワードとは?

パスワードはテクノロジーの世界だけでなく、日常会話にも欠かせないものとなっている。電子メール・アカウントから埋蔵金の絵本に至るまで、パスワードの要求があまりにも日常的になっているため、パスワード・ハッシュはおろか、パスワードが実際に何であるかについてもほとんど考慮されなくなっている。

パスワードは、技術的にはNISTによって”IDの認証、アクセス権限の検証、暗号鍵の導出に使用される文字列(文字、数字、その他の記号)“と定義されている。私たちは皆、お気に入りのウェブサイトやアカウントにアクセスするためにパスワードを入力する方法については十分に理解していますが、これらの認証情報を安全に保管することは少し厄介です。

ユーザーとしては、パスワードを再利用しないこと、常に強力なパスワードを選択すること、そして時々変更することが重要です。ユニークで安全なパスワードを作成し、すべてのアカウントで使用する1つの方法は、パスワードマネージャを利用することです。パスワード・マネージャーをあなたのプライバシー衛生習慣に組み込むことで、あなたはすでに、この重要なステップをまだ踏んでいない膨大な数のインターネット・ユーザーよりも安全になっています。

残念ながら、あなたのログイン認証情報は、あなたがサインアップしたサービスによって扱われるため、100%自分自身を守ることはできません。そこで、データ漏洩が問題になる。情報漏えいにはユーザー名、生年月日、電子メールアドレス、電話番号、パスワードのハッシュが含まれる」というような内容のニュース記事は、すっかりおなじみになった。これらの用語のほとんどは理解しやすいが、最後の用語は混乱の元かもしれない。そこで、企業やオンライン・サービスが、新規アカウント作成時に送信したデータを実際にどのように扱っているのかを見てみよう。

パスワードを安全に保管する問題

あなたが成長中のオンライン・フォーラムで、より多くの人々があなたのサービスにサインアップしようと殺到していると想像してください。結局のところ、誰かが彼らのログイン情報を盗んだ場合、あなたは不幸なユーザーを持つことになります。

このことをよりよく理解するために、お気に入りのウェブサイトにログインしようとしたときに何が起こるかを見てみましょう。まず、ブラウザでログインページにアクセスし、ユーザー名/メールアドレスとパスワードを入力するよう促される。この情報を入力し、「ログイン」をクリックする。次に起こることは少し複雑だ。

パスワードを選択する際、そのパスワードは(願わくば)問題のサービスに平文で保存されることはない。もしサービスがパスワードを平文で保存していたら、万が一サービスが侵害された場合、あなたのログイン認証情報が漏洩する危険性がある。代わりに、あなたが選んだパスワードはハッシュ化され、そのハッシュはサービスが運営する安全なデータベースに保存されるべきです。新しいアカウントにログインしようとすると、送信したメールアドレスとパスワードのハッシュ値がデータベースに保存されている情報と比較される。これらが一致すれば、アカウントへのアクセスは完了だ。しかし、このサービスをハッキングした者は、何もできないハッシュを得るだけで、アカウントにログインすることはできません。

Tutaでは、暗号化されたデータ(パスワードキー)のロックを解除するキーを導き出すためにArgon2を使用しています。bycryptからargon2に切り替えた際、生成される鍵の長さを256ビットに増やし、ポスト量子セキュアにもしました。パスワードキーは、Tutaサーバーとの認証には使用されません。その代わりに、SHA256を使用してハッシュ化し、パスワード検証子となります。Tutaでパスワードがどのように保護されているかについては、こちらをご覧ください

Eine Visualisierung des Umgangs mit Passwörtern und Verschlüsselungscodes. Eine Visualisierung des Umgangs mit Passwörtern und Verschlüsselungscodes.

では、平文のパスワードを保存するよりもハッシュを保存する方が安全なのはなぜでしょうか?答えは単純で、情報漏洩が発生した場合の追加保護です。

パスワード・ハッシュとは何か?

パスワード・ハッシュとは、ユーザーが作成したパスワードをハッシュ・アルゴリズムに通してビットをスクランブルし、選択されたパスワードのユニークな表現を作成するプロセスです。パスワードを知らない場合、理想的には全く同じハッシュを複製することはできません。

ハッシュアルゴリズムには多くの種類がありますが、どれも似たような機能を果たします。平文のパスワードを任意の長さのデータ列とみなし(パスワードのさまざまな長さを思い浮かべてください)、この文字列を、使用されているハッシュ関数に従って決定論的にスクランブルされた(つまり、同じパスワードは常に同じハッシュになるということです)データのビットに変換します。このハッシュは、安全なデータベースに保存される。

覚えておいていただきたいのは、ハッシュは暗号化とは違うということです。ハッシュを復号化する鍵は存在しない。ハッシュは一方通行で、平文からハッシュへの移動のみを目的としている。料理好きな人のために、ジャガイモを例にとってみよう。皮をむいたジャガイモが平文で、それをハッシュ化しておいしいハッシュドポテトにすると、これがハッシュとなる。ハッシュドポテトを元のポテトに戻すことができないように、ハッシュを元のパスワードに戻すことはできません。

Hashing-Funktionen sind eine Einbahnstraße Hashing-Funktionen sind eine Einbahnstraße

ハッシュ関数は一方通行なのだ。暗号化とは異なり、ハッシュを元の平文に戻すための鍵は生成されない。

誰かがパスワードのクラッキングについて語るとき、彼らは何かを「解読」しているのではなく、よく使われるパスワードに基づいて独自のハッシュのリストを作成し、その既知の結果をデータ漏洩で漏れた情報と比較しているのだ。これは相互参照の問題となり、暗号解読の深い知識は必要なく、基本的なロジックだけでよい。

塩漬けパスワード・ハッシュとは何か?

先ほどソルティング・ハッシュについてお話しました。ソルティングとは、ハッシュ・アルゴリズムで処理する前に、入力にランダムなデータを追加するプロセスのことです。ソルトはすべてのパスワードに対して一意であるため、事前に計算されたハッシュを利用しようとする攻撃から守ることができます。なぜなら、ソルトの値がデータ侵害に含まれていたとしても、攻撃者は個々のソルトの値を事前に計算しなければならず、攻撃のコストがはるかに高くなるからです。さらに、パスワードがソルト化されていない場合、あなたと私が同じパスワードを使用している場合、パスワード・ハッシュ・アルゴリズムの決定論的性質により、ハッシュはデータベース内で同じように表示されます。ソルティングをすることで、最終的な出力が異なることになり、ハッカーが同じパスワードのアカウントを素早く探し出すのを防ぐことができる。

Ein Beispiel für den Unterschied zwischen gehashten Kennwörtern mit und ohne Salting. Ein Beispiel für den Unterschied zwischen gehashten Kennwörtern mit und ohne Salting.

塩漬けは食べ物をおいしくするだけでなく、パスワード・ハッシュを強化する!

暗号化ソルトは、ユーザー名や、各アカウントに固有のその他の識別子から導き出すことができます。一意性という要素は、事前計算されたテーブル攻撃の使用を、合理的であるよりもはるかに多くのリソースを要求するようにするため、ここで鍵となります。

問題点と攻撃の種類

ハッシュはもちろん完璧ではありませんが、暗号技術者がこれらの関数を作成する際に考慮される既知の攻撃がいくつかあります。

誕生日攻撃

どのパスワード・ハッシュ・アルゴリズムも、誕生日攻撃として知られる攻撃に対して脆弱です。これらは誕生日問題として知られる数学的確率問題を利用したものです。この問題の背後にある数学についてのより正確な記述は、こちらにあります。幸いなことに、これらの攻撃はブルートフォース攻撃よりも速くはないと考えられています。

衝突攻撃

コリジョン攻撃は、2つの異なるパスワード(平文文字列)がハッシュアルゴリズムにかけられ、一致するハッシュを返す場合に発生する。これは、正しくないパスワードが正しいユーザー名と組み合わされた場合、ログインが成功する可能性があることを意味するので問題である。

コリジョン攻撃がバースデー攻撃よりも速く効率的であることが発見された場合、パスワードハッシュ機能は壊れていると考えられ、より回復力のあるアルゴリズムに置き換える必要があります。

ブルートフォース攻撃

ブルートフォース攻撃は、あらゆる暗号システムにとって潜在的な脆弱性である。無限の時間と無限の計算能力があれば、ハッシュを発見することができる。この事実のため、ブルートフォース攻撃は他の脆弱性の重大性のリトマス試験紙と考えられている。攻撃がブルートフォースよりも速いと判断された場合、問題のアルゴリズムはパッチを当てるか、放棄しなければならない。

一般的なハッシュ関数

パスワードのハッシュ化アルゴリズムは数多く開発されており、それぞれ独自の長所と短所を持っています。残念なことに、最も人気のあるハッシュ・アルゴリズムの多くが脆弱であることが示されていますが、(このYouTubeのビデオで説明されているように)それらはまだ定期的に使用されており、しばしば違反データセットで発見されています。

  1. MD5 :時代遅れのアルゴリズムと考えられているが、このハッシュ関数は、新しい情報漏えいのデータセットが一般に公開される際には、今でも定期的に使用されている。MD5は1991年にMITのロナルド・リベスト教授によってMD4に代わるものとして開発された。128ビットのハッシュを生成するが、すぐに衝突攻撃の影響を受けやすいことが示された。2013年、研究者たちはこのアルゴリズムがもはや安全ではなく、置き換えるべきものであることを証明することができた。残念なことに、MD5ハッシュはデータ漏えいで表面化し続けている。
  2. SHA :MD5に代わるものとして推奨されたのが、ハッシュ関数のSecure Hash Algorithmsファミリーだった。SHA-1はNSAの開発により1995年に導入され、160ビットのハッシュを生成する。このアルゴリズムは2005年に高度な脅威行為者に対して安全でないと見なされ、真正性を検証するためのデジタル署名の作成に使用される場合に特に脅威となった。SHA-2はこれより前の2001年に発表され、2011年にNISTが新しい最小セキュリティ要件を導入した際に、正式に前身に取って代わった。残念なことに、後方互換性の欠如により、SHA-2の普及は遅々として進まなかった。最近では、SHA-3が2015年にリリースされ、MD5に類似していた以前のバージョンとはまったく異なる構造になっている。SHA-2と-3はどちらも、選択した設定によって256ビットから512ビットという同じハッシュ長をサポートする。
  3. bcrypt 1999年に導入されたbcryptは、デフォルトのソルティングを導入したパスワード・ハッシュ・アルゴリズムで、適応型でもある。これは、時間が経過してもブルートフォース攻撃に抵抗し続けられることを意味する。Bcryptは、ブルース・シュナイアーによって開発されたBlowfish暗号をベースにしている。
  4. Argon2 : Argon2はパスワード・ハッシング・コンペティション2015で優勝した。サイドチャネルに強いだけでなく、メモリハードであるため、bcryptよりもブルートフォース攻撃に強い。

Tutaでは、セキュリティとプライバシーの分野をリードしています。Argon2への移行は、現在利用可能な最強の鍵導出を使用する最初の電子メール・プロバイダーとなりました。暗号とセキュリティを第一に考えることで、信頼できるプライバシーを構築しています。ゼロ・ナレッジ・アーキテクチャと組み合わせることで、データの解読や閲覧に必要な鍵にアクセスすることはありません。あなたのプライバシーはあなたの手のひらの上にあります。

Tutaに切り替えてプライバシーをオンにすることで、今すぐデータのコントロールを取り戻しましょう。