用于分析和重现存在漏洞的比特币密钥生成的研究工具。
本工具专为安全研究而设计——理解过去存在漏洞的密钥生成方式有助于改进现代钱包的安全性。
本工具可重现的历史漏洞:
| 漏洞 | 年份 | 影响 |
|---|---|---|
| 脑钱包 | 2011-2015 | SHA256(密码) 容易被破解 |
| 弱 PRNG | 2013-2023 | 可预测的种子(时间戳、进程ID) |
| Milksad | 2023 | libbitcoin bx 使用 32 位种子的 MT19937 |
| MultiBit HD | 2014-2016 | 将 64 字节 BIP39 种子用作熵 |
| Electrum 预 BIP39 | 2011-2014 | 自定义确定性推导,弱拉伸 |
| Armory HD | 2012-2016 | 预 BIP32 确定性推导 |
| LCG PRNG | 1990s-2010s | glibc rand()、MINSTD、MSVC — 仅 31-32 位状态 |
| Xorshift PRNG | 2003 至今 | V8/SpiderMonkey Math.random() — 64-128 位状态 |
| SHA256 链 | 2010 年代至今 | 从弱种子确定性推导密钥 |
cargo install vuke
### 从源码处```bash
git clone https://github.com/oritwoen/vuke
cd vuke
cargo build --release
vuke single "correct horse battery staple" --transform sha256
输出:```
Passphrase: "correct horse battery staple"
Transform: sha256
Source: correct horse battery staple
---
Private Key (hex): c4bbcb1fbec99d65bf59d85c8cb62ee2db963f0fe106f483d9afa73bd4e39a8a
WIF (compressed): L3p8oAcQTtuokSCRHQ7i4MhjWc9zornvpJLfmg62sYpLRJF9woSu
---
P2PKH (compressed): 1JwSSubhmg6iPtRjtyqhUYYH7bZg3Lfy1T
P2WPKH: bc1qfnpg7ceg02y64qrskgz0drwp3y6hma3q6wvnzr
vuke scan --transform=sha256 --targets known_addresses.txt wordlist --file passwords.txt
### 数据提供者
不要使用文件路径,而是使用提供者引用来动态加载目标:```bash
# Scan all unsolved b1000 puzzles
vuke scan --transform=milksad --targets boha:b1000:unsolved range --start 1 --end 1000000
# Scan specific collection with filter
vuke scan --transform=sha256 --targets boha:b1000:with-pubkey wordlist --file words.txt
# Available filters: all, unsolved, solved, with-pubkey
vuke scan --targets boha:hash_collision:unsolved wordlist --file words.txt
提供者语法:provider:collection:filter 或 provider:collection:id
可用集合(boha 提供者):
b1000 - 比特币谜题1000(256个谜题,1-256位)gsmg - GSMG谜题bitaps - Bitaps谜题hash_collision - 哈希碰撞谜题zden - Zden谜题bitimage - Bitimage谜题vuke generate --transform=milksad range --start 1 --end 1000000
### 测试基于 LCG 的密钥```bash
# Generate keys using glibc rand() (default big-endian)
vuke generate --transform=lcg:glibc range --start 1 --end 1000000
# Use MINSTD variant with big-endian byte order
vuke generate --transform=lcg:minstd:be range --start 1 --end 1000
# Test all LCG variants at once
vuke generate --transform=lcg range --start 1 --end 100
vuke generate --transform=xorshift range --start 1 --end 1000000
vuke generate --transform=xorshift:64 range --start 1 --end 1000 vuke generate --transform=xorshift:128 range --start 1 --end 1000 vuke generate --transform=xorshift:128plus range --start 1 --end 1000 vuke generate --transform=xorshift:xoroshiro range --start 1 --end 1000
### 测试基于时间戳的密钥```bash
vuke scan --transform=sha256 --targets addresses.txt timestamps --start 2015-01-01 --end 2015-01-31
vuke generate --transform=bitimage files --file image.jpg
vuke generate --transform=bitimage files --dir ./images/
vuke generate --transform=bitimage --bitimage-path "m/44'/0'/0'/0/0" --bitimage-passphrase "secret" files --file photo.png
vuke generate --transform=bitimage --bitimage-derive-count 10 files --dir ./data/
vuke scan --transform=bitimage --bitimage-passphrase-wordlist passphrases.txt --targets addresses.txt files --dir ./images/
### 多重转换```bash
vuke scan --transform=sha256 --transform=double_sha256 --transform=md5 --targets addresses.txt wordlist --file words.txt
cat passwords.txt | vuke generate --transform=sha256 stdin
### 保存结果到文件```bash
vuke generate --output results.csv range --start 1 --end 1000000
vuke generate --output results.txt --verbose range --start 1 --end 1000
vuke scan --output hits.txt --targets addresses.txt wordlist --file passwords.txt
将结果以 Parquet 格式存储,以便进行 TB 级分析(需要 storage 特性):```bash
cargo build --release --features storage
vuke generate --storage ./results --transform milksad range --start 1 --end 1000000
vuke generate --storage ./results --chunk-records 500000 --chunk-bytes 50M range --start 1 --end 10000000
vuke generate --storage ./results --compression zstd --compression-level 9 range --start 1 --end 1000000
vuke generate --storage ./results --compression none range --start 1 --end 1000000
### 使用SQL查询存储的结果
使用SQL查询已存储的Parquet文件(需要`storage-query`特性):```bash
# Build with query support
cargo build --release --features storage-query
# Count results by transform
vuke query ./results "SELECT transform, COUNT(*) FROM results GROUP BY transform"
# Find matches
vuke query ./results "SELECT * FROM results WHERE matched_target IS NOT NULL LIMIT 10"
# Export to JSON
vuke query ./results --format json "SELECT source, wif_compressed FROM results LIMIT 100"
# Export to CSV
vuke query ./results --format csv "SELECT address_p2pkh_compressed, wif_compressed FROM results" > export.csv
# Show schema
vuke query ./results --schema
输出格式:table(默认)、json、csv
将Parquet结果上传至兼容S3的存储(需要storage-cloud特性):```bash
cargo build --release --features storage-cloud
export AWS_ACCESS_KEY_ID=your_key export AWS_SECRET_ACCESS_KEY=your_secret
vuke generate --storage ./results --cloud-upload --cloud-bucket my-bucket
--transform milksad range --start 1 --end 1000000
vuke generate --storage ./results --cloud-upload
--cloud-endpoint https://account.r2.cloudflarestorage.com
--cloud-bucket my-r2-bucket
--transform milksad range --start 1 --end 1000000
vuke generate --storage ./results --cloud-upload
--cloud-endpoint http://localhost:9000
--cloud-bucket vuke-results
--transform milksad range --start 1 --end 1000000
vuke generate --storage ./results --cloud-upload --cloud-bucket my-bucket
--cloud-delete-local
--transform milksad range --start 1 --end 1000000
vuke generate --storage ./results --cloud-upload --cloud-bucket my-bucket
--cloud-fail-fast
--transform milksad range --start 1 --end 1000000
Cloud upload features:
- 流式多部分上传(对大文件内存高效)
- 自动指数退避重试(5次重试,100毫秒→30秒)
- 可配置并行度的并发上传
- 仅删除成功上传的本地文件