
Forschungswerkzeug zur Untersuchung angreifbarer kryptografischer Schlüsselerzeugung (brainwallet, PRNG, milksad, LCG, xorshift)
Forschungswerkzeug zur Analyse und Reproduktion angreifbarer Bitcoin-Schlüsselerzeugung.
Dieses Werkzeug ist für die Sicherheitsforschung konzipiert – das Verständnis, wie in der Vergangenheit angreifbare Schlüssel erzeugt wurden, hilft, die moderne Wallet-Sicherheit zu verbessern.
Historische Schwachstellen, die mit diesem Werkzeug reproduziert werden können:
| Schwachstelle | Jahr | Auswirkung |
|---|---|---|
| Brainwallets | 2011–2015 | SHA256(Passphrase) leicht geknackt |
| Schwache PRNGs | 2013–2023 | Vorhersagbare Seeds (Zeitstempel, PIDs) |
| Milksad | 2023 | libbitcoin bx verwendete MT19937 mit 32-Bit-Seeds |
| MultiBit HD | 2014–2016 | 64-Byte-BIP39-Seed als Entropie verwendet |
| Electrum pre-BIP39 | 2011–2014 | Benutzerdefinierte deterministische Ableitung mit schwachem Stretching |
| Armory HD | 2012–2016 | Prä-BIP32 deterministische Ableitung |
| LCG PRNGs | 1990er–2010er | glibc rand(), MINSTD, MSVC – nur 31–32 Bit Zustand |
| Xorshift PRNGs | 2003–heute | V8/SpiderMonkey Math.random() – 64–128 Bit Zustand |
| SHA256-Ketten | 2010er–heute | Deterministische Schlüsselableitung aus schwachen Seeds |
cargo install vuke
### Von der Quelle```bash
git clone https://github.com/oritwoen/vuke
cd vuke
cargo build --release
vuke single "correct horse battery staple" --transform sha256
Ausgabe:```
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
### Datenanbieter
Anstelle von Dateipfaden verwenden Sie Provider-Referenzen für das dynamische Laden von Zielen:```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 syntax: provider:collection:filter oder provider:collection:id
Verfügbare Sammlungen (boha-Anbieter):
b1000 - Bitcoin-Puzzle 1000 (256 Rätsel, 1-256 Bit)gsmg - GSMG-Rätselbitaps - Bitaps-Rätselhash_collision - Hash-Kollisions-Rätselzden - Zden-Rätselbitimage - Bitimage-Rätselvuke generate --transform=milksad range --start 1 --end 1000000
### Test LCG-basierte Schlüssel```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
### Testen von zeitstempelbasierten Schlüsseln```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/
### Mehrere Transformationen```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
### Ergebnisse in Datei speichern```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
Ergebnisse im Parquet-Format für Analysen im TB-Maßstab speichern (erfordert das storage-Feature):```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
### Abfrage gespeicherter Ergebnisse (SQL)
Abfragen gespeicherter Parquet-Dateien mit SQL (erfordert die Funktion `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"