より強力で安全なパスワードを作成しましょう。パスワード作成は常に求められていますが、実際に努力する人はほとんどいません。一方で、パスワードは盗難、漏洩、そして解読されるという被害が日常的に発生しています。そこで今回は、攻撃者の視点からこの問題に着目し、皆さんの関心を高めていただければ幸いです。パスワードがどのように解読されるのか、そして実際に自分で解読する方法までご紹介します。強力なパスワードがなぜ重要なのか、しっかりと理解していただけるはずです。
クラッキングツールを使った簡単な実験でわかるように、パスワードクラッカーの攻撃から身を守る唯一の方法は、ご想像の通り、10文字以上の長く複雑な文字列です。それより短い文字列、ましてや単純な文字列は、簡単に破られてしまいます。これを知れば、パスワードマネージャーを使う方が、自分でパスワードを作るよりもずっと簡単そうに思えてくるでしょう。さらに、非常に強力なパスワードを選ぶためのヒントもご用意しています。
パスワードがクラッカーからどのように隠されるか、またクラッカーがパスワードを解読しようとする方法について、詳しくは以下をお読みください。
注:この記事では、私たち自身のパスワードにクラッキングツールを試しました。クラッキングツールを使用して、自分のものではないウェブサイト、サービス、またはファイルに侵入することは、良くても非倫理的であり、最悪の場合、違法です。私たちのアドバイスに従い、考えることさえやめてください。
ハッシュ化がパスワードを保護する仕組み
クラッカーを阻止するため、責任あるウェブサイトはパスワードを平文(プレーンテキスト)のまま保存しません。代わりに、ハッシュアルゴリズムと呼ばれるアルゴリズム(一般的なものとしてはMD5、SHA2、SHA3などがありますが、他にも多数あります)を使用して、パスワードを「ハッシュ」、つまり一見ランダムな数字と文字の文字列に変換します。
サイト側は、使用しているハッシュアルゴリズムを公表しません。それはクラッカーにとって都合の良いものに過ぎないからです。最初のハッシュを再度ハッシュ化したり、「ソルト」と呼ばれる一連の追加文字を追加したりすることで、パスワードの解読をさらに困難にすることもあります。
サンプルハッシュの作成は簡単です。MD5ハッシュの場合は、MD5hashgenerator.comなどのサイトにアクセスして、サンプルの単語をハッシュするだけです。(セキュリティ上の理由から、実際に使用するパスワードをハッシュすることはお勧めしません 。)MD5は古いアルゴリズムで、いくつかの理由から安全ではないと考えられていますが、パスワードのハッシュ化とクラッキングの仕組みを示すには依然として役立ちます。

今回はパスワード fredをハッシュ化しました。ハッシュ化したい単語をボックスに入力し、「生成」をクリックしてください。
したがって、パスワードmaverick は55f9c405bd87ba23896f34011ffce8da に なります 。
さらなる安全策として、ハッシュアルゴリズムは一方向にのみ機能します。設計上、ハッシュ化されたパスワードを逆ハッシュ化することはできません。さらに、一方向ハッシュの場合、ウェブサイトやサービスはあなたのパスワードを知る必要すらありません。サイト側はあなたのパスワードをハッシュ化し、ファイルに保存されているハッシュと比較するだけで済みます。両者が一致すれば、ログインできます。パスワードの解読も、まさにこの方法で行われます。
ハッシュ化されたパスワードが破られる可能性
ハッシュ化はパスワード保護において重要かつ基本的なステップですが、パスワードを完全に解読できるわけではありません。パスワードクラッカーが行うべきことは、このプロセスを再現することだけです。つまり、パスワードを推測し、ハッシュ化し、漏洩したパスワードハッシュと比較することです。もしクラッカーが正しい推測をすれば、残念ながらあなたのパスワードを盗み取ってしまったことになります。もし間違っていれば、彼らは何度も何度も同じことを繰り返します。

このような大規模な組織の Web サイトでは、通常、ユーザーがユーザー アカウントへの侵入を試みるためにパスワードを次々と試すことを防ぐ対策が講じられています。
Amazonにログインしようとするのは簡単ではありませんが、ビル・ゲイツになったつもりで、パスワードを何度も何度も推測して、運が良ければうまくいくでしょう。銀行も同じです。スマートに設計されたウェブサイトには、何らかの制御機能が組み込まれています。何度も間違えると、サイトはアカウントまたはIPアドレスを潜在的なハッカーとしてフラグ付けし、ログイン試行を制限または完全にブロックする可能性があります。
しかし、パスワード漏洩が発生すると、すべてが台無しになります。例えば、2019年に発生したCollections侵害では、21億9000万件ものメールアドレス、ユーザー名、パスワードがWeb上に流出しました。ハッシュ化されたパスワードが公開されると、アクセス可能な人物が自分のPCにダウンロードし、実際のウェブサイトで適用されるレート制限なしに解読しようとするのを阻止する方法はありませんでした。
このシナリオでは、クラッカーが本当に知る必要がある、あるいは推測する必要があるのは、パスワードをハッシュ化するアルゴリズムだけです。そして、PCの膨大な計算能力を駆使して、毎秒数十億回もの推測を行い、パスワードを解読します。ハッシュ化されたパスワードにとっての敵は、時間、計算能力、そして巧妙な推測です。(パスワードが盗まれたかどうかを確認する方法はこちらです。)
パスワードを解読するのはどれくらい難しいですか?
パスワードの解読は、あっという間に非常に複雑になる可能性があります。1文字のパスワードだけでも26通りの可能性があり、大文字を加えると52通りになります。0~9の数字を加えると62通り、特殊文字を加えると合計96通りになります。(外国語のキーボードではこの数字が変わる場合があり、サイトによっては利用可能な特殊文字の一部しか必要としない場合もあります。)96文字のリストに基づくと、 t7G(のような4文字のパスワードでさえ 、理論上は最大84,934,656通り(96の4乗)の推測が必要になります。
では、4文字のパスワードは安全だということでしょうか? いいえ、絶対にそうではありません。
プロのパスワードクラッキング会社Terahashが2018年に作成した以下のグラフは、パスワードクラッキングがいかに容易で、かついかに困難であるかを示しています。グラフの左側には主要なハッシュアルゴリズムがリストされています。すぐ隣の色は、各アルゴリズムでハッシュ化されたパスワードがTerahashのパスワードクラッキング技術によってどれだけ速く解読できるかを示しています。最上位のアルゴリズムであるNTLMは、全体的に最も速く解読され、他の多くのアルゴリズムは濃い赤色で表示されています。一方、最下位のBitcoin/Litecoinアルゴリズムは最も時間がかかり、黄緑色で表示されています。

このグラフは、パスワードに文字を数文字追加するだけで、Terahash の強力な GPU クラスターを使用しても、パスワードの解読に必要な時間がほぼ不可能なほど長くなる可能性があることを示しています。
しかし、アルゴリズムは課題の一部に過ぎません。もう一つは元のパスワードの長さです。他の列の色分けは、各アルゴリズムでハッシュ化されたパスワードが、元の長さに基づいて解読される容易さを表しています。ターコイズブルーの海は、4文字から8文字の短いパスワードを表しており、使用するハッシュアルゴリズムに応じて「瞬時」または最大1時間で解読可能です。濃い緑の領域は、解読に最大1日かかるパスワードを表し、明るい緑の領域は最大1週間かかるなど、解読に時間がかかるパスワードを表しています。オレンジと赤のグラデーションは、解読に1年以上かかるパスワードを表しています。
このグラフから重要な点が2つあります。1つ目は、4文字から6文字の短いパスワードは、アルゴリズムに関わらずTerahashにとって容易に解読可能だったということです。2つ目は、ランダムなパスワードを10文字以上にするだけで、解読耐性が大幅に向上したということです。
パスワード解読は暗号通貨のマイニングと同じ進化を遂げています。CPUはある程度効率的ですが、GPUははるかに効率的です。パスワード解読専用のASICの開発に取り組んだのは、資金力のある研究者や国家だけです。Terahashの技術は強力なGPUのクラスターを使用しているため、PCの性能をはるかに上回ります。とはいえ、パスワード解読に必要なのは専用GPUを搭載したPCだけです。GeForce GTX 1660 Ti GPUを搭載したMicrosoft Surface Book 3をテストベッドとして使用したところ、1秒あたり6,959メガハッシュ(約70億ハッシュ)というピーク値を達成しました。デスクトップPCでは、さらに多くの処理が可能です。
Hashcatでパスワードを解読する方法
パスワードを解読するためのソフトウェアツールは数多くありますが、ここでは1つに絞って説明します。Hashcatは、ブルートフォース攻撃、ルール攻撃、マスク攻撃、辞書攻撃などを組み合わせた攻撃方法でパスワードハッシュを攻撃します。これらについては後ほど詳しく説明します。
当初、HashcatはKali Linuxのような、ペネトレーションテスト用に設計された特殊なLinuxディストリビューションを必要としていました。Kali LinuxはMicrosoft Storeアプリからダウンロードし、Windows Subsystem for Linuxシェル内に配置できます。(GPUで計算を実行できるWindows Subsystem for Linux 2であることを確認してください。)しかし、もっと簡単な方法があります。hashcatにはWindowsバイナリが用意されているので、Windows用にダウンロードできます。Windowsのコマンドラインインターフェースを使用して実行し、NVIDIAのCUDA APIまたはより汎用的なOpenCLドライバーを使用します。
Hashcatは主に3つのコンポーネントで構成されています。プログラム本体と、作成する必要がある2つのテキストファイルです。1つのファイルには解読するハッシュが含まれ、もう1つは解読したハッシュのリポジトリです。今回は、それぞれ「hash.txt」と「cracked.txt」という名前を付けました。推測しやすいパスワードの単純なハッシュを作成し、そのパスワードハッシュをhash.txtファイルにコピーして保存し、テキストエディタを閉じました。次に、Windowsのコマンドラインアプリを管理者権限で開き、Hashcatを実行し、Hashcatが保存されているディレクトリに移動しました。
まずはHashcatを使って「総当たり方式」でパスワードを解読します。つまり、無限に続く可能性のあるパスワードを推測し、正しいパスワードを見つけ出すことを目指します。HashcatのFAQでドキュメントを読むこともできますが、コマンドラインアプリに以下を入力するだけで簡単に始めることができます。
hashcat -m0 -a3 -o cracked.txt hash.txt
fredのような短くて単純なパスワードは、 ほんの数分で解読できるはずです。実際、そうなります。

hashcatコマンドウィンドウ。クラックされたハッシュと平文の「パスワード」が記されたメモ帳ファイルに重ねて表示されています。Hashcatはハッシュ速度(Speed.#1)を表示しますが、この場合は1秒あたり約10億ハッシュとかなり遅いことがわかります。また、GPUの熱保護機能がデフォルトで搭載されており、GPUの温度(Hardware.Mon.#1)を監視して過熱を防止します。
ハッシュ化されたパスワードを再確認するには、解読されたパスワードが保存されているファイルを開いてください。ハッシュと、解読された平文のパスワードが表示されます。
4289、yniu、tg5f、Trxcといった単純な4文字のハッシュパスワードは簡単に解読できました。後者の組み合わせは少し複雑ではありますが、いずれも4秒以内に解読できました。しかし、その後jRtw を試してみたところ、非常に興味深いことが起こりました。デフォルト設定のままでは、Hashcat は数秒、いや数分、あるいは1時間以上もハッシュを解読できなかったのです。
なぜ?たぶんマスクを壊したんだと思う。でも、それはいいことだ。
ルール、マスク、辞書攻撃
パスワードクラッカーは、長く複雑なパスワードほど解読が困難になることを私たちと同じように知っています。しかし、人間は長くランダムな文字列ではなく、単語やパターンを使ってパスワードを作成することで不正行為をすることも知っています。つまり、パスワードクラッカーも「ルール」や「マスク」と呼ばれる戦術と、一般的なパスワードの「辞書」を組み合わせることで不正行為をすることができるのです。例えば、SplashDataによる2018年と2019年の最も安全でないパスワードのチャート(下記参照)は、信頼できるクラッカーなら辞書攻撃に必ず含まれるはずです。また、このチャートはパスワードの再利用の危険性も指摘しています。クラッカーは一度パスワードの再利用方法を見つけると、あなたが怠けていた場合に備えて、あなたの他のアカウントでもそのパスワードを試すからです。

パスワードが「Oliver」「compass」「iloveyou」のどれであっても、クラッカーの辞書に載っているなら、ハッキングされる可能性は高くなります 。クラッカーが最初に試すパスワードは、まさにこれです。
辞書攻撃では、単語または単語列、一般的な名前のリスト、そして最も一般的なパスワードが使用されることがあります。例えば、2009年には、RockYouというアプリベンダーが侵入を受け、3,000万件にも及ぶとされる暗号化されていないパスワードのデータベースがWeb上に漏洩しました。このデータベースは、現在最も一般的な辞書攻撃の一つです。
マスク は 、パターンを用いてプロセスを簡素化する別のアプローチです。パスワードを大文字で始め、句読点で終わらせたことはありませんか?パスワードの最後に2桁の数字を使った場合はどうでしょうか?これらはどちらもマスクの例であり、パスワードクラッカーに組み込むことでハッシュ化の可能性を減らすことができます。
ルール はより複雑な表現で、多くの場合、マスクと辞書攻撃を組み合わせたものです。パスワードが一般的な単語と2桁の数字を組み合わせたり、叔母の名前と数字、そして最後に感嘆符を組み合わせたりしている場合、ルールを使うことで、ランダムに推測するよりもはるかに早くパスワードを解読できます。これがパスワードマネージャーを使用する利点の一つです。長いパスワードを生成できるだけでなく、そのパスワードは自分で生成するパスワードよりもはるかにランダムになります。
ただし、覚えておいてください。これは重要です!クラッキングツールは、パスワードが4文字なのか14文字なのかを全く認識できません。私が生成した予想外に難しい4文字のパスワードの例では、Hashcatのデフォルトのマスク攻撃は、マスクファイルに事前にプログラムされていないものはすべてスキップし、4文字のパスワードの解読から5文字のパスワードの解読へと移行するのが最も効率的だと判断したようです。
では、 jRtw は解読不可能なパスワードなのでしょうか?もちろん違います!この場合、別のクラッカーが、Hashcat に次の4文字のパスワードを試すように指示するルールを書けば済みます。しかし、これは 、適切に設計されたパスワードであれば、検出を逃れられる可能性があることを意味しています。
このことから学ぶべきこと
少なくとも、このすべてから次の 3 つの教訓を得る必要があります。
- パスワードは長いほど良いです。上記のTerahashの例に基づくと、現時点では10文字以上のパスワードが安全であると思われます。
- パスワードは複雑であればあるほど効果的です。ランダムなパスワードが最も強力な選択肢ですが、少なくとも小文字、大文字、数字、そして&、#、]などの特殊文字をそれぞれ1つ以上含めるようにしてください。多ければ多いほど効果的です。
- パスワード マネージャーは、おそらくパスワード管理に最適なソリューションです。

パスワード マネージャー (どのパスワード マネージャーでも) は、おそらく、脳だけで管理するよりも優れたパスワード管理機能を発揮します。
繰り返しになりますが、パスワードマネージャー(有料版のおすすめパスワードマネージャーと無料版のおすすめパスワードマネージャーをレビューしました)は、最も強力 で便利なソリューションです。サービスが代わりにやってくれるなら、長くて複雑なパスワードのリストを自分で作成するのに苦労する必要はありません。
パスワードクラッキングがこれほどまでに魅力的なのは、まさにこのためです。パスワードを解読するのは、非常に簡単でありながら、ほぼ不可能でもあります。その違いは、あなたがどのような選択をするかによって決まります。
MD5 ハッシュに hashcat を適用するためのコマンドライン インターフェイスを提供してくれた Carlos Suarez と彼の Hashcat YouTube チュートリアルに感謝します。