セカイノカタチ

世界のカタチを探求するブログ。関数型言語に興味があり、HaskellやScalaを勉強中。最近はカメラの話題も多め

マーブルワーズ

イマドキの仮想通貨採掘用ASICでパスワード総当たりをすると突破まで何日かかるのか?

タイトルの通りなのですが、最近流行の仮想通貨を掘るための専用設計されたASICと呼ばれる機器があります。

こんな感じのものですが。

これは、1秒間に20テラ回のハッシュ計算ができるとされており、20テラとは20兆のことなので、このマシンがあれば、1秒間に20兆回のハッシュ計算ができます(語彙力)。

通常、Webサイトやコンピュータに保存されているパスワードというのは、ハッシュ計算という方法を使って暗号化*1されています。そのため、ASICを使えばパスワード総当たりができます*2

これは、パソコンのCPUやGPUを利用したハッシュ計算と比べてけた違いに強い計算能力なので、今まで安全圏とされていたパスワード長でも脅威となりうる可能性があると思い、ちょっと調べてみました。

実際3年前のブログでは、3000万件/秒を基準に計算しているので、実にその60万倍以上の計算能力となります。恐ろしいですね(というか数年おきにパスワード強度の計算をしているのか・・・)。

qtamaki.hatenablog.com

注意点としては、単純計算なので、実際にアタックした場合、誤差がある可能性があるのと、ビットコイン用のASICをそのまま、パスワードクラックに使えるわけではないということです*3。あと、コンピュータのパワーをフルに使って総当たり攻撃ができるシチュエーションは限られています。Web上のパスワードを外部から攻撃する場合、せいぜい数十回から数百回程度しかトライできないはずなので「password」とか「12345」とかの単純なパスワードを避けていれば、攻撃される可能性は低いです。

ということで、行ってみましょう。

計算してみる

まずは、文字種別ごとに何種類の文字があるのか調べます。

文字種別(省略形) 種類 内容
数字(0) 10 0123456789
小文字(a) 26 abcdefghijklmnopqrstuvwxyz
大文字(A) 26 ABCDEFGHIJKLMNOPQRSTUVWXYZ
記号(!) 33 !"#$%&'()*+,-./:;<=>?@[]^_`{|}~

こうしてみると、英語の大小文字より、記号のほうが種類が多いです。パスワードを設定するときは、記号を織り交ぜると強度が飛躍的に増します。おすすめです。

そして、単純に同じ文字種別を使ってパスワードを作成した場合の強度です。何通りあるかという話です。

文字種別 種類 8文字
a 26 208,827,064,576 200億
0 10 100,000,000 1億
! 33 1,406,408,618,241 1兆

単純に計算すると、文字種別が多い方がパターンが多くなります。数字のみのパスワードは非常に脆弱なので危険ですね。

それでは、各文字種および、組み合わせによるパターン数を数えます。

文字種別 種類 8文字 9文字 10文字 11文字 12文字
a 26 208,827,064,576 5,429,503,678,976 141,167,095,653,376 3,670,344,486,987,780 95,428,956,661,682,200
0 10 100,000,000 1,000,000,000 10,000,000,000 100,000,000,000 1,000,000,000,000
! 33 1,406,408,618,241 46,411,484,401,953 1,531,578,985,264,450 50,542,106,513,726,800 1,667,889,514,952,990,000
aA 52 53,459,728,531,456 2,779,905,883,635,710 144,555,105,949,057,000 7,516,865,509,350,970,000 390,877,006,486,250,000,000
a0 36 2,821,109,907,456 101,559,956,668,416 3,656,158,440,062,980 131,621,703,842,267,000 4,738,381,338,321,620,000
a! 59 146,830,437,604,321 8,662,995,818,654,940 511,116,753,300,641,000 30,155,888,444,737,800,000 1,779,197,418,239,530,000,000
aA0 62 218,340,105,584,896 13,537,086,546,263,600 839,299,365,868,340,000 52,036,560,683,837,100,000 3,226,266,762,397,900,000,000
aA! 88 3,596,345,248,055,300 316,478,381,828,866,000 27,850,097,600,940,200,000 2,450,808,588,882,740,000,000 215,671,155,821,681,000,000,000
aA0! 98 8,507,630,225,817,860 833,747,762,130,150,000 81,707,280,688,754,700,000 8,007,313,507,497,960,000,000 784,716,723,734,800,000,000,000

横幅が足りずに完全にはみ出していますが・・・。^^;

とりあえず、一見膨大なパターンの組み合わせがあり、これを手当たり次第にトライするのは無謀なように見えます。しかし、我らがASIC君は、1秒間に20兆回の計算ができます。この計算能力を使ってクラックした場合、どの程度の時間でパスワードを突破できるのでしょうか?(単位は「日」です)

文字種別 種類 8文字 9文字 10文字 11文字 12文字
a 26 0 0 0 0 0
0 10 0 0 0 0 0
! 33 0 0 0 0 0
aA 52 0 0 0 2 113
a0 36 0 0 0 0 1
a! 59 0 0 0 9 515
aA0 62 0 0 0 15 934
aA! 88 0 0 8 709 62,405
aA0! 98 0 0 24 2,317 227,059

というわけで、殆どのケースであっさり「0日」で突破できます。流石のパワーですね!

これを見ると、小文字と記号を組み合わせて12文字か、大小文字と記号を組み合わせて11文字ぐらいが安全ラインでしょうか。1年以上かかりそうです。

このASICを1年間休まず稼働させると、電気代が300~500万円ぐらいかかりそうなので、あなたのパスワードがそれに見合うだけの価値があるなら頑張ってクラックされる可能性がゼロとは言えない?

まとめると

パスワードの強度的には、英数記号を織り交ぜた方が、パターン数が増えるので強度が増します。特に記号が有効です。

総当たりされるシチュエーションは限られていますが、それでも安全なパスワードとなると、小文字+記号で12文字以上か、大小文字+記号で11文字以上が最低ラインとなります。できれば13文字以上のパスワードを使うと良いと思います。

*1:正確には暗号化とは違いますが簡単のため

*2:正確にはSHA-1というハッシュアルゴリズムの計算しかできないので、パスワードのハッシュアルゴリズムがSHA-1でないと使えません

*3:実際にやろうとして「できないじゃないか!」と言われても責任は負いかねます。^^;