セキュリティ

「16文字以内で最強のパスワード」は本当に最強のパスワードなのか?


2023年4月21日にActiveTK.さんがツイートした「16文字以内で最強のパスワード」が、記事作成時点で1万2000件のリツイート、7万件のいいねを集めています。この「16文字以内で最強のパスワード」は果たして本当に最強のパスワードなのか、エンジニアに聞いてみました。

「16文字以内で最強のパスワード」を考えてみた。

';--\t:․\n,"\0}`|@

ここが凄い!
・エクスポート時の流失防止機能
SQL→ ';--によるDB破壊
CSV→ \t\n,によるファイル破壊
コマンド→ |による構文破壊
・総当たり防止機能
2byte文字や特殊文字を混在

ここがダメ!
・Twitterで公開してしまった

— ActiveTK․ (@ActiveTK5929)


ActiveTK.さんがツイートした「16文字以内で最強のパスワード」が以下。
';--\t:․\n,"\0}`|@

ActiveTK.さんはパスワードについて「SQL→ ';--によるDB破壊」「CSV→ \t\n,によるファイル破壊」「コマンド→ |による構文破壊」「2byte文字や特殊文字を混在」という4つの特徴を挙げていますが、それぞれどういった意味なのか、エンジニアに聞いてみた回答が以下です。

◆1:SQL→';--によるDB破壊
関係データベース管理システムでデータの操作や定義を行うために使用されるデータベース言語SQLでは、コマンドが「(コマンド);」と記述されます。当該パスワードには「';--」が含まれるので、「;」までがコマンドであると誤認される一方、「--」以降はコメントとして処理されるため、パスワード全体がデータに含まれなくなってしまいます。

つまり、パスワードに「';--」を含めることでシンプルなSQLインジェクション攻撃を実行できるようになります。データベースが破壊されるような状況は考えづらいものの、以下のような雑なコードならエラーで処理を停止させることが可能です。

UPDATE users SET password = ' + pass + ' WHERE id = '+ id + ';


今回のパスワードを入れると以下のようになります。

UPDATE users SET password = '';--\t:․\n,"\0}`|@' WHERE id = '+ id + ';


「--」以降がコメント文として無視されると、最終的には以下のようになります。

UPDATE users SET password = '';


◆2:CSV→\t\n,によるファイル破壊
表計算ソフトやデータベースソフト向けのファイル形式として使用されているCSVでは、「\t」がタブ文字、「\n」が改行を意味します。ユーザーIDやパスワードをまとめてCSVにエクスポートするなどした場合、パスワードの「\n」の部分で改行されたり、「\t」の部分でタブが挿入されたりしてしまうわけです。

つまり、このパスワードが漏えいしても、パスワードを盗んだ人物がパスワードをCSV形式で保存していた場合、パスワードに勝手に改行やタブが入ってしまい、正しいパスワードが何かわからなくなってしまうというわけ。


なお、「\t」は別の表計算データ向けのファイル形式であるTSVにも対応しているので、TSVでもパスワード漏えいを防いでくれる可能性があります。

◆3:コマンド→|による構文破壊
|」はパイプ(あるコマンドの出力を別のコマンドの入力とするもの)として扱われるため、パスワードのこの部分でコマンドが強制的に切れます。

◆4:2byte文字や特殊文字を混在
このパスワードには2バイト文字(全角文字)や特殊文字が含まれているため、パスワードを解読するために総当たり攻撃を実行する場合、半角文字だけのパスワードよりも解読に時間がかかります。

ただし、「2バイト文字を考慮に入れるようなシステムは存在しないため、実質的にこのパスワードは総当たり攻撃に対して無敵」との指摘もあります。

なお、通常のシステムは2バイト文字の入力に対応していないため、JavaScriptを使ったパスワードの入力をActiveTK․さんは推奨しています。

ちなみに、このパスワードを手動で入力することはできませんが、以下のようなJavaScriptで入力できます(elemid='password')。

setTimeout(`with(document.getElementById("password"))type="text",pattern="",value=String.fromCharCode(39,59,45,45,9,65306,8228,10,44,34,0,125,96,124,64)`);

— ActiveTK․ (@ActiveTK5929)



上記の説明だけを読むと確かに「16文字以内で最強のパスワード」であるかのように思えますが、◆1~3はいずれも適切にエスケープ処理を施していれば簡単に回避することが可能だそうです。そもそも、「◆1~3が機能するシステムを探す方が難しい」という指摘も。

加えて、基本的にパスワードはハッシュ化した状態で保存されており、ハッカーが盗み出すのもこの「ハッシュ化されたパスワード」であるため、ハッカー側がパスワードを扱う上で◆1~4のような効果に出くわすことはほとんどありえないとのことです。

この記事のタイトルとURLをコピーする

・関連記事
大半のパスワードを1分以内にクラッキングできるAI「PassGAN」が登場、どんなパスワードであればPassGANでも解析不可能なのか? - GIGAZINE

「Password1234」などの超単純パスワードがアメリカ政府機関で大量に使われていた - GIGAZINE

経営者や管理職も脆弱なパスワードやダサいパスワードを使いがち - GIGAZINE

完璧にパスワードを設定するための4つの方法 - GIGAZINE

2020年に最も使われたパスワードは何だったのか?常連に加えて新顔も登場 - GIGAZINE

in セキュリティ, Posted by logu_ii

You can read the machine translated English article here.