妖怪道中記パスワード絞り込み技法

 2021年末に4STシイナさんが公開したこの動画は大きな反響を呼びましたが、2022年1月9日現在「8文字と11文字のパスワードは瞬殺されたものの、14文字の最難関パスワードは候補として4731万5374個の重複が発見された」というトンデモナイ状況になっています。
 つまり、4731万個以上あるパスワードの中から真のパスワード1個を探し出す(!)という、発掘作業へとフェイズが移行したわけですね。

関連記事:【随時更新】妖怪道中記パスワード解析 on Discord

 上記コンテンツでは協力者が集まるDiscordサーバおよび自作のパスワード解析プログラムの紹介をしていますが、今回の記事では「膨大なパスワードからハズレを除去する手法」を解説します。

 ただし4731万件の純粋な完全パスワードファイルは非常に巨大かつ解析が困難であるため、私が「高確率でハズレと思われるものを除去したフィルタ済みパスワードリスト」をアップしました。

・フィルタ済みパスワード795.6万件(真パスワードを含む可能性が極めて高い)
Download : passwords-last7956212.zip

・フィルタ済みパスワード325.7万件(真パスワードも除去している可能性が若干ある)
Download : passwords-last3256849beta.zip

~絞り込み技法~

 まず下記yokai-tool-packをダウンロードし、適当なフォルダに展開してください。
Download : yokai-tool-pack.zip

 ツールパックには妖怪道中記のパスワードを解析するための様々なツールを内包していますが、絞り込みには
「05-yokaitable(強力フィルタ)」
「06-yokaipassrip(テーブルのみ出力)」
「07-yokaidiff(不一致除去)」
の3種のツールを用います。

05-yokaitable(強力フィルタ)

 ためしにフィルタ済みパスワード passwords-last7956212.txt を同フォルダへコピーしてから table0.bat にドラッグ&ドロップで投げ込んでみてください。
 しばらくして passwords-last7956212.txt.output0.txt という502KBのファイルが生成されますが、これは「1行の全てがローマ字読みできるアルファベット・数字・記号だけで100%変換できた行だけを抜粋し、右に強引にふりがなを挿入したテキストデータ」です。

 なお、先にネタバレしますがここで生成された11,848行の目視チェックはとっくに済んでいるので、この中に真のパスワードは無いです。

 詳しいカスタマイズ方法は省略しますが table0-ALL-CHAR.txt へ対象となる文字を増やしたり table0.bat の%1のあとに書かれている0を増加させることで、フィルタを緩めて強引に広範囲の候補を拾うことができます。

yokaitable.exe table0-ALL-CHAR.txt %1 0 > %1.output0.txt

yokaitable.exe table0-ALL-CHAR.txt %1 1 > %1.output0.txt

※この修正では「パスワード14文字のうち13文字の変換に成功し1文字だけ失敗した場合のみ列挙」という意味になる。2にすれば「2文字失敗した場合」になるが、増やせば増やすほど該当件数が爆発的に増加する。

 また、table1はローマ字変換と数字のみ、table2はローマ字変換と記号のみ、table3はローマ字変換のみ、table4は数字のみ、table5は強引な英語読みを含む変換プロファイルですので、うまくカスタマイズしてください。

06-yokaipassrip(テーブルのみ出力)

 先ほど生成した502KBのテキストデータは「目視に特化している」ので、各種ツールで使えません。
 なのでこのフォルダに passwords-last7956212.txt.output0.txt をコピーして、同フォルダの start.bat にファイルを投げ込むと502→186KBまで縮んだ password-no-comment.txt が生成されます。
 これは名前のとおり右のコメント部を除去した純粋なパスワードリストで、各種フィルタツールから利用することができます。


 地獄の目視チェック作業が終わり「うわーん、全部ハズレだったー!!」という時は、そのファイルがハズレであると分かるようにファイル名やフォルダ名をしっかり付けておきましょう。
 次のツールで使います。

07-yokaidiff(不一致除去)

 まずyokaidiff.exeに「加工前のオリジナルのパスワードファイル passwords-last7956212.txtをドラッグ&ドロップで投げ込んでください。
 そしてツールが起動して「7956211 件のパスワードテーブルをロードしました」と表示されたら、コマンドプロンプト画面に先ほど目視してハズレだった186KBのテキストファイルをドロップしてエンターキーを押下。

 めちゃくちゃ待たされますが「マスタとなるテーブルから11848件のパスワードを除去しました」と表示されるので、ここで何も入力せずにエンター。
 「保存ファイル名を拡張子付きで入力してください」と求められるので適当に「output.txt」とでも入力してエンター。

 これで生成された output.txt に書かれたパスワードの個数は 794万4363 ……つまり、11,848個のハズレパスワードを除去したリストファイルです。
 なので……

05-yokaitable(強力フィルタ)をカスタマイズして候補を絞る。

06-yokaipassrip(テーブルのみ出力)でパスワード情報のみを抽出。

目視してダメなら07-yokaidiff(不一致除去)でマスタファイルからハズレを除去。

05に戻ってやりなおし。

 そんな作業の繰り返しによる絞り込みを行っているわけです。
※合理的な絞り込み手法が発見されたら、ここから一気に減る可能性もあります。


 というか、一人で796回もこんな作業をやってられないので、皆で力を合わせるのが大切であり、そのためのDiscord参加なのです(‘-`)

~追記~ (2022.1.10)

 さらに下記のツールを追加したので「該当件数が多すぎてやってられない」という場合にご活用ください。

09-yokairincut(条件フィルタ)
 数字とアルファベットが隣接するものを除去、ハイフンを含むものを除去など5種のフィルタをかけて自分の読みたいパスワードだけを出力するツール。

10-yokaitopkana(先頭カナ出力)
 パスワードの頭文字がローマ字カナ変換できるものだけを出力するツール。

11-yokainumend(終端数字列挙)
 パスワードの終端が数字で終わるものだけを出力するツール。