環境構築
メインディッシュは hashcat です.
Pythonも入れておきましょう
事前準備
人からウォレットファイルを奪って総当りするのは良くないと思うので,自分で適当なパスワードつきウォレットを作っておきます.
パスワードは4桁と解析しやすいようにしておきました.
Windows環境でElectrumを導入しているならば,
C:\Users\ユーザー名\AppData\Roaming\Electrum\wallets
にウォレットファイルが入っているので,デスクトップなど適当なフォルダにコピーしておきます.
hashcatで解析できるようにする
ElectrumのウォレットファイルをJohnripper形式に変換する pythonスクリプト をウォレットファイルと同じ階層に置きましょう.
次のようにスクリプトを実行します.
python .\elect2john.py .\wallet_file
すると,一見してよくわからない16進数が表示されます.
wallet_file:$electrum$4*03a0b839b5537e595ffbce8(ながいので省略)d701743
この文字列で最初の$
以降をコピーしてhashcat.exe
が存在するディレクトリに適当な名前で保存しておきましょう.(electrumhash.txt
にしました)
hashcatをつかってみる
hashcatのヘルプで使い方を見ることができます.
hashcat.exe -h
ここでは一部を抜粋して紹介します.
Attack Modes
hashcatでは総当たりや辞書攻撃などを実施することができます.
今回はお手軽コースの総当りでやってみますので,引数としては-a 3
を指定すればよいでしょう.
Hash modes
ヘルプを見ると一番印象的なのはこれでしょうか.
(一部抜粋)
11300 | Bitcoin/Litecoin wallet.dat
16600 | Electrum Wallet (Salt-Type 1-3)
21700 | Electrum Wallet (Salt-Type 4)
21800 | Electrum Wallet (Salt-Type 5)
BitcoinウォレットやElectrumのウォレットにも対応しています.
Electrumにはソルトの違いによってモードを選択する必要があります. ソルトタイプは,先程のスクリプトを実行したときに出力された文字列から得ることができます.
wallet_file:$electrum$4*03a0b839b5537e595ffbce8(ながいので省略)d701743
この場合,$electrum$4*03a...
とあり,$4*
がソルトタイプになっています.
Built-in Charsets
パスワードの文字列を指定します.
- [ Built-in Charsets ] -
? | Charset
===+=========
l | abcdefghijklmnopqrstuvwxyz [a-z]
u | ABCDEFGHIJKLMNOPQRSTUVWXYZ [A-Z]
d | 0123456789 [0-9]
h | 0123456789abcdef [0-9a-f]
H | 0123456789ABCDEF [0-9A-F]
s | !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
a | ?l?u?d?s
b | 0x00 - 0xff
と表示されていますが,英字か数字か記号か,それらを含めたものかなどを指定することができます.
今回は4桁の英字ですので,?l?l?l?l
を指定すれば良いでしょう.?a?a?a?a
でもできます.
実際に解析してみる
私の環境ではRTX3070というGPUを利用することができますので, -D 2
でGPUを使って総当りするようにしています.
hashcat.exe -a 3 -D 2 -m 21700 .\electrumhash.txt ?a?a?a?a
実行した結果が以下のようになりました.
(長いので省略)ffdee255858b20dc38338d55b13477dc2c430d81357e:mimo
Session..........: hashcat
Status...........: Cracked
Hash.Mode........: 21700 (Electrum Wallet (Salt-Type 4))
Hash.Target......: $electrum$4*03daade8a4f51da46d57f01fe89eb69c2702202...81357e
Time.Started.....: Wed Dec 28 17:14:58 2022 (2 secs)
Time.Estimated...: Wed Dec 28 17:15:00 2022 (0 secs)
Kernel.Feature...: Pure Kernel
Guess.Mask.......: ?a?a?a?a [4]
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: 368.1 kH/s (8.73ms) @ Accel:32 Loops:15 Thr:256 Vec:1
Speed.#3.........: 21175 H/s (9.78ms) @ Accel:64 Loops:15 Thr:64 Vec:1
Speed.#*.........: 389.3 kH/s
Recovered........: 1/1 (100.00%) Digests (total), 1/1 (100.00%) Digests (new)
Progress.........: 688128/81450625 (0.84%)
Rejected.........: 0/688128 (0.00%)
Restore.Point....: 0/857375 (0.00%)
Restore.Sub.#1...: Salt:0 Amplifier:1-2 Iteration:1020-1023
Restore.Sub.#3...: Salt:0 Amplifier:1-2 Iteration:330-345
Candidate.Engine.: Device Generator
Candidates.#1....: mari -> mp8x
Candidates.#3....: mw8x -> m3")
Hardware.Mon.#1..: Temp: 42c Util: 0% Core:1582MHz Mem:5995MHz Bus:8
Hardware.Mon.#3..: Util: 95% Core: 400MHz Mem:1600MHz Bus:16
Started: Wed Dec 28 17:14:20 2022
Stopped: Wed Dec 28 17:15:01 202
4桁程度のパスワードでは2秒で解析することができます.
実際に解析されたパスワードはハッシュの最後に追記されている
(長いので省略)ffdee255858b20dc38338d55b13477dc2c430d81357e:mimo
のmimo
です.
調子に乗ってパスワードを6桁にしてみる
パスワードが4桁だと非常に危険なことがわかりました. 6桁の英字にするとどうなるのでしょうか?
Session..........: hashcat
Status...........: Bypass
Hash.Mode........: 21700 (Electrum Wallet (Salt-Type 4))
Hash.Target......: $electrum$4*03a0b839b5537e595ffbce8f76f8efd6cef7646...701743
Time.Started.....: Wed Dec 28 17:40:14 2022 (2 mins, 3 secs)
Time.Estimated...: Wed Dec 28 17:53:59 2022 (11 mins, 42 secs)
Kernel.Feature...: Pure Kernel
Guess.Mask.......: ?l?l?l?l?l?l [6]
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: 351.9 kH/s (9.37ms) @ Accel:32 Loops:15 Thr:256 Vec:1
Speed.#3.........: 22499 H/s (9.69ms) @ Accel:16 Loops:63 Thr:64 Vec:1
Speed.#*.........: 374.4 kH/s
Recovered........: 0/1 (0.00%) Digests (total), 0/1 (0.00%) Digests (new)
Progress.........: 46022656/308915776 (14.90%)
Rejected.........: 0/46022656 (0.00%)
Restore.Point....: 1728512/11881376 (14.55%)
Restore.Sub.#1...: Salt:0 Amplifier:2-3 Iteration:780-795
Restore.Sub.#3...: Salt:0 Amplifier:0-1 Iteration:1008-1023
Candidate.Engine.: Device Generator
Candidates.#1....: csdgfe -> cyxjss
Candidates.#3....: stxjss -> schtng
Hardware.Mon.#1..: Temp: 70c Util: 99% Core:1468MHz Mem:5995MHz Bus:8
Hardware.Mon.#3..: Util: 76% Core: 400MHz Mem:1600MHz Bus:16
どうやら15分程度で解析可能なようです.(途中で止めましたが…)