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/