LoginSignup
119
48

More than 5 years have passed since last update.

BigQueryでレインボーテーブル攻撃をしてみた

Last updated at Posted at 2018-12-06

BigQueryの計算資源を利用して、ハッシュレインボーテーブルをしてみました。
BigQueryはスキャンした実テーブルのデータ量に対して課金されるため、無からデータを生成し計算をすることによって、無料で計算することができます。

今回は以下のSHA256ハッシュを平文にしてみたいと思います。

ECB666D778725EC97307044D642BF4D160AABB76F56C0069C71EA25B1E926825

とりあえず、アルファベット小文字6文字以下の範囲を総当たり的に探索してみます。
アルファベット1文字だけのテーブルである chars を作成し、それを CROSS JOIN することですべての総当たりパターンを網羅させます。
そして、それら全てに対して、sha256を計算して、目的のハッシュ値を満たすものを表示します。

#standardSQL
with chars as (
  SELECT * FROM UNNEST(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', null]) as char
)

select str from (
select 
  concat(ifnull(a.char, ''), ifnull(b.char, ''),  ifnull(c.char, ''),  ifnull(d.char, ''),  ifnull(e.char, ''),  ifnull(f.char, '')) as str 
from chars as a 
cross join chars as b 
cross join chars as c
cross join chars as d
cross join chars as e
cross join chars as f
) where sha256(str) = b'\xEC\xB6\x66\xD7\x78\x72\x5E\xC9\x73\x07\x04\x4D\x64\x2B\xF4\xD1\x60\xAA\xBB\x76\xF5\x6C\x00\x69\xC7\x1E\xA2\x5B\x1E\x92\x68\x25'

実際にこのクエリを実行すると、217秒かかりました。
合計 $27^6$ 個のハッシュ値を計算したため、 1秒あたり 48,204,392 個のハッシュ値を計算していることになります。

こちらのサイトを確認すると、SHA256は 1秒あたり 約 1,300,000 個のハッシュ値を計算できているので、それと比較して40倍程度の高速化を行うことができました。
https://automationrhapsody.com/md5-sha-1-sha-256-sha-512-speed-performance/

119
48
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
119
48