Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
227
Help us understand the problem. What are the problem?

総当たり攻撃時のパスワード最大解読時間の表(by 上野宣)について分析した

昨日、上野宣(@sen_u)さんがパスワードの総当りに要する時間の表をツイートされ、話題になっています。

1万件を超えるリツイートがありますね。大変よく読まれているようです。しかし、この表は何を計測したものでしょうか。上野さんにうかがってもわからないようでした。

一般に、パスワードの総当たり攻撃(ブルートフォースアタック)というと、以下の二通りが考えられます。

  • ウェブサイト等でパスワードを順番に試す(オンライン攻撃)
  • サイト等から漏洩したパスワードのハッシュ値から平文のパスワード復元する(オフライン攻撃)

どっちかなーと思ったところ、上野さんが別の(?)ソースを教えて下さいました。図表は同じですが、以下の説明があります。

These numbers as the time it takes if a Hask of your password was obtained and then bruteforced. This can be achieved using latest hardware that can be readily purchased on the market,Gigabyte GeForce RTX 2080 Ti Turbo 11GB Graphics Card with Costs about 1000 GBP
How long does it take to crack your password? — Response IT - IT Support Surrey/Londonより引用

以下、私訳を示します。

これらの数値は、パスワードのHask(訳注: おそらくHASH)が取得されてからブルートフォースされた場合にかかる時間です。これは、市場で容易に購入できる最新のハードウェア、Gigabyte GeForce RTX 2080 Ti Turbo11GBグラフィックスカードを使用して実現できます。コストは約1000英ポンド(約15万円)です。

HaskがHashのタイポだと仮定して、おそらくオフライン攻撃であることがわかりました。しかし、どのようなハッシュ(MD5、SHA-1、SHA-256、bcrypt等)なのかは明記されていません。そこで、RTX 2080のハッシュ計算速度から、どのハッシュであるかを逆算で求めてみましょう。
さまざまなGPUについて、Jeremi Gosney氏がハッシュの計算速度を発表していて、その中にRTX 2080も含まれます。氏はGPUによるハッシュ総当り業界の有名人です。

Nvidia RTX 2080 SUPER FE Hashcat Benchmarks

こちらから、主要なハッシュアルゴリズムのRTX 2080での計算速度を拾ってみましょう。以下の表で「MH/sec」とあるのは、1秒間にハッシュをいくつ(100万単位)計算できるかという意味です。

Algorithm Speed(MH/sec)
MD5 40116.1
SHA-1 13988.8
SHA-256 5736.9
SHA-512 1839.9

この値を用いて、英大文字小文字8文字の場合で、各ハッシュアルゴリズムでのハッシュ総当りに要する時間を計算してみましょう。上野さんの紹介した表では、このケースでは22分で総当り可能とあります。
この場合のパスワードのパターンの数は、

$52 ^ 8 = 53,459,728,531,456 $(約53兆)

となります。それを上記のMH/secで割ると、秒数が算出されます。その結果を下表に示します。処理時間は分に換算しています。

Algorithm 処理時間(分)
MD5 22.2
SHA-1 63.7
SHA-256 155.3
SHA-512 484.3

この結果から、先の表の前提となるハッシュアルゴリズムはMD5であろうという結論になります。

考察

上野さんの示した表は非常にインパクトの強いもので、8文字のパスワードなど「瞬殺」されてしまうのかぁと思った人も多いと思います。しかし、この表はパスワードのハッシュ値(MD5)が漏洩した後、ハッシュ値からパスワードを復元するのに要する時間です。
そうだとしても、瞬殺はまずいのですが、それを避けるために、MD5ではなく、パスワード保存に適したハッシュ保存の方法があります。先の各ハッシュの計算速度からbcryptというアルゴリズムの計算速度を調べると、27477 H/sec (0.027477 MH/sec)となっていますので、同じ条件で処理時間を求めると、32426956分(61年8ヶ月)となります。永遠に大丈夫というわけではありませんが、パスワード漏洩を検知して、利用者にパスワード変更を促し対処するには、まずまず十分な時間です。
以下の表はRTX 2080を448発並列(!)で処理した場合の各ハッシュの総当りに要する時間を示すもの(@Typhon666_deathさんに教えていただきました)ですが、MD5のような脆弱な処理が高速でパスワード保存に適さないアルゴリズム1ではなく、bcryptのようなパスワード保存に適した(処理に時間がかかる)アルゴリズムが求められていることがわかります。

結論

上野さんの紹介したパスワード総当りに要する時間の表は、MD5ハッシュで保存したパスワードの総当りに要する時間を示したものでした。単に表だけを見ると、「8桁パスワードなど瞬殺だな」と思う人が多いと思いますが、現在の技術水準ではMD5によるハッシュ保存は否定されており、bcryptなど安全なパスワード保存方法が推奨されます。そして、bcrypt等を使う前提では、8桁パスワードは絶対だめとまではいえません。パスワード設定に関して大きな影響力をもつNIST SP800-63-3でも、以下のように推奨されています。

  • 利用者が設定する場合、最小8文字
  • 管理者側が設定する場合、最小6文字

参考: 世界の電子認証基準が変わる:NIST SP800-63-3を読み解く – サポート − トラスト・ログイン byGMO【旧SKUID(スクイド)】

前提条件なしで表だけを見るとこのような考察ではできないという意味で、以下のように発言させていただきました。

参考

パスワードは何桁以上にするのが良いですか?に対する徳丸 浩さんの回答 - Quora

以下は、パスワードに関する入門動画です。

今回のテーマに近い動画はこちら。

パスワード保護の具体的な方法はこちらの動画をどうぞ。


  1. 当初「脆弱な」と記載しておりましたが、これだとMD5のハッシュ関数のとしての脆弱性を想起してしまうので、「処理が高速でパスワード保存に適さない」と書き換えました。(2021年8月19日13:33編集) 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
227
Help us understand the problem. What are the problem?