Skip to content

Performance Benchmarks

This page collects performance benchmarks from various systems running BTCRecover. Benchmarks measure the password/seed recovery speed in passwords per second (p/s).

Benchmark Results

Seed Benchmarks

System Mode Aezeed (LND) Seed BIP39 12-word Seed BIP39 24-word Seed Electrum Seed SLIP39 Seed Share
#1 Ryzen 9 9950X 16-Core (32C/32T) CPU 937.71 Kp/s 256.99 Kp/s 851.04 Kp/s 829.80 Kp/s
#1 NVIDIA GeForce RTX 5090 OPENCL 878.18 Kp/s 79.12 Kp/s 854.89 Kp/s 260.26 Kp/s
#2 i7-10700K @ 3.80GHz (16C/16T) CPU 36.68 Kp/s 147.63 Kp/s 154.77 Kp/s
#2 NVIDIA GeForce RTX 3070 OPENCL 129.10 Kp/s 276.60 Kp/s 396.32 Kp/s
#3 i7-10700K @ 3.80GHz (16C/16T) CPU 284.50 Kp/s 36.02 Kp/s 155.32 Kp/s 151.98 Kp/s 89.85 Kp/s
#3 NVIDIA GeForce RTX 3070 OPENCL 325.94 Kp/s 127.20 Kp/s 292.68 Kp/s 390.90 Kp/s
#4 AMD64 Family 26 Model 68 Stepping 0, AuthenticAMD (32C/32T) CPU 254.06 Kp/s 841.75 Kp/s 818.92 Kp/s
#4 NVIDIA GeForce RTX 5090 OPENCL 132.77 Kp/s 601.64 Kp/s 147.17 Kp/s
#5 Apple M1 (Virtual) (3C/3T) CPU 40.45 Kp/s 154.92 Kp/s 211.87 Kp/s
#6 Apple M1 (Virtual) (3C/3T) CPU 337.59 Kp/s 53.18 Kp/s 195.42 Kp/s 249.63 Kp/s
#7 EPYC 7763 64-Core (2C/4T) CPU 19.48 Kp/s 106.14 Kp/s 116.24 Kp/s
#8 EPYC 7763 64-Core (2C/4T) CPU 230.10 Kp/s 18.65 Kp/s 106.56 Kp/s 118.92 Kp/s
#9 AMD64 Family 25 Model 17 Stepping 1, AuthenticAMD (4C/4T) CPU 16.15 Kp/s 80.29 Kp/s 90.91 Kp/s
#10 EPYC 9V74 80-Core (4C/4T) CPU 215.30 Kp/s 12.05 Kp/s 90.66 Kp/s 102.75 Kp/s

Password Benchmarks

System Mode BIP38 Encrypted Key - sCrypt N=14, r=8, p=8 BIP39 Passphrase - 2048 PBKDF2-SHA512 iterations + ECC Bitcoin Core (BDB) - 67,908 SHA-512 iterations Bitcoin Core (SQLite) - 267,488 SHA-512 iterations Blockchain.com (v0) - 10 PBKDF2-SHA1 iterations Blockchain.com (v2) - 10,000 PBKDF2-SHA1 iterations Blockchain.com (v3) - 5,000 PBKDF2-SHA1 iterations Coinomi (Android) - scrypt N, r, p = 16384, 8, 1 Electrum (Legacy) - 2 SHA-256 iterations Electrum 2.8+ - 1024 PBKDF2-SHA512 iterations + ECC Electrum 2.8+ Passphrase - 1024 PBKDF2-SHA512 iterations + ECC Ethereum Keystore (scrypt) - Scrypt N=17 R=8 P=1 MetaMask (Chrome) - 10000 PBKDF2-SHA256 iterations MultiBit Classic - 3 MD5 iterations MultiBit HD - scrypt N, r, p = 16384, 8, 1 Raw Private Key - 1 SHA-256 iteration SLIP39 Passphrase - 40,000 PBKDF2-SHA256 iterations + ECC
#1 Ryzen 9 9950X 16-Core (32C/32T) CPU 79.13 p/s 17.41 Kp/s 545.56 p/s 138.87 p/s 707.15 Kp/s 3.29 Kp/s 6.58 Kp/s 34.21 Kp/s 6.37 Kp/s 2.07 Mp/s 594.17 p/s 561.03 Kp/s
#1 NVIDIA GeForce RTX 5090 GPU 11.92 Kp/s 3.21 Kp/s
#1 NVIDIA GeForce RTX 5090 OPENCL 0.36 p/s 17.52 Kp/s
#2 i7-10700K @ 3.80GHz (16C/16T) CPU 95.50 p/s 23.30 p/s 61.48 Kp/s 431.42 p/s 772.70 p/s 207.48 Kp/s 4.41 Kp/s 16.77 p/s 674.77 p/s 191.41 Kp/s 131.29 p/s
#2 NVIDIA GeForce RTX 3070 GPU 6.97 Kp/s 2.09 Kp/s
#3 i7-10700K @ 3.80GHz (16C/16T) CPU 15.00 p/s 2.40 Kp/s 82.60 p/s 22.87 p/s 62.35 Kp/s 431.40 p/s 697.93 p/s 4.67 Kp/s 16.37 p/s 689.70 p/s 181.25 Kp/s 134.84 p/s 73.45 Kp/s 365.89 p/s
#3 NVIDIA GeForce RTX 3070 GPU 6.93 Kp/s 2.09 Kp/s
#3 NVIDIA GeForce RTX 3070 OPENCL 10.80 Kp/s
#4 AMD64 Family 26 Model 68 Stepping 0, AuthenticAMD (32C/32T) CPU 542.25 p/s 137.85 p/s 691.29 Kp/s 3.25 Kp/s 6.46 Kp/s 2.65 Mp/s 33.74 Kp/s 6.33 Kp/s 2.00 Mp/s 476.15 p/s
#4 NVIDIA GeForce RTX 5090 GPU 11.96 Kp/s 3.21 Kp/s
#5 Apple M1 (Virtual) (3C/3T) CPU 98.17 p/s 28.78 p/s 73.60 Kp/s 520.64 p/s 1.10 Kp/s 70.81 p/s 301.99 Kp/s 6.44 Kp/s 8.97 p/s 1.08 Kp/s 261.71 Kp/s 69.20 p/s
#6 Apple M1 (Virtual) (3C/3T) CPU 3.79 Kp/s 118.32 p/s 30.40 p/s 114.52 Kp/s 625.97 p/s 1.22 Kp/s 84.39 p/s 7.38 Kp/s 10.39 p/s 1.34 Kp/s 301.89 Kp/s 83.95 p/s 76.00 Kp/s
#7 EPYC 7763 64-Core (2C/4T) CPU 46.73 p/s 11.40 p/s 41.80 Kp/s 394.67 p/s 785.44 p/s 61.79 p/s 158.57 Kp/s 2.67 Kp/s 8.82 p/s 700.40 p/s 140.33 Kp/s 61.26 p/s
#8 EPYC 7763 64-Core (2C/4T) CPU 1.36 Kp/s 46.81 p/s 11.97 p/s 42.59 Kp/s 395.99 p/s 787.66 p/s 62.37 p/s 2.67 Kp/s 9.32 p/s 699.37 p/s 140.91 Kp/s 62.02 p/s 35.41 Kp/s
#9 AMD64 Family 25 Model 17 Stepping 1, AuthenticAMD (4C/4T) CPU 29.00 p/s 6.34 p/s 33.26 Kp/s 154.00 p/s 146.36 p/s 26.35 p/s 158.42 Kp/s 1.39 Kp/s 5.46 p/s 187.40 p/s 56.55 Kp/s 21.00 p/s
#10 EPYC 9V74 80-Core (4C/4T) CPU 1.15 Kp/s 35.95 p/s 9.18 p/s 46.21 Kp/s 219.00 p/s 433.67 p/s 35.30 p/s 2.17 Kp/s 7.33 p/s 383.07 p/s 167.16 Kp/s 35.82 p/s 24.57 Kp/s

Systems Tested

# CPU Cores (Phys/Logical) GPU OpenCL Device OS Date
1 Ryzen 9 9950X 16-Core 32/32 NVIDIA GeForce RTX 5090 NVIDIA GeForce RTX 5090 (32607 MB) Windows 11 2026-04-14
2 i7-10700K @ 3.80GHz 16/16 NVIDIA GeForce RTX 3070 NVIDIA GeForce RTX 3070 (8192 MB) Windows 10 2026-04-12
3 i7-10700K @ 3.80GHz 16/16 NVIDIA GeForce RTX 3070 NVIDIA GeForce RTX 3070 (8192 MB) Windows 10 2026-04-12
4 AMD64 Family 26 Model 68 Stepping 0, AuthenticAMD 32/32 NVIDIA GeForce RTX 5090 NVIDIA GeForce RTX 5090 (32607 MB) Windows 11 2026-04-12
5 Apple M1 (Virtual) 3/3 None None Darwin 24.6.0 2026-04-12
6 Apple M1 (Virtual) 3/3 None None Darwin 24.6.0 2026-04-12
7 EPYC 7763 64-Core 2/4 None None Linux 6.17.0-1010-azure 2026-04-12
8 EPYC 7763 64-Core 2/4 None None Linux 6.17.0-1010-azure 2026-04-12
9 AMD64 Family 25 Model 17 Stepping 1, AuthenticAMD 4/4 None None Windows 2025Server 2026-04-12
10 EPYC 9V74 80-Core 4/4 None None Windows 2025Server 2026-04-12

Understanding the Results

  • p/s = passwords per second (or seeds per second for seed recovery)
  • Kp/s = thousands of passwords per second
  • Mp/s = millions of passwords per second
  • CPU = using CPU only (multi-threaded)
  • GPU/OpenCL = using GPU acceleration via OpenCL

Speed varies significantly based on:

  • CPU model and core count -- more cores = faster for CPU tests
  • GPU model and memory -- more powerful GPU = faster for GPU tests
  • Wallet type -- some wallets use more expensive key derivation (e.g., scrypt vs PBKDF2)
  • Seed length -- 24-word seeds are faster than 12-word seeds due to the stronger checksum
  • Wallet difficulty -- each wallet type has a specific key derivation cost (shown in the table headers). Higher iteration counts or more expensive algorithms (e.g., scrypt) result in slower recovery speeds

!!! note "Seed recovery performance" For seed-based recovery, additional factors beyond raw derivation speed affect performance. Checking extra script types (e.g., Legacy, SegWit, Native SegWit), searching multiple derivation paths, and increasing the account generation limit all multiply the work required per seed candidate and will reduce the effective recovery speed.

Contributing Benchmarks

You can contribute your own benchmarks by running the benchmarking tool and submitting a pull request:

# Run all benchmarks including CPU, GPU and OpenCL (30 seconds each)
python benchmark.py

# Skip GPU/OpenCL benchmarks (CPU only)
python benchmark.py --no-gpu --no-opencl

# Adjust test duration (default: 30 seconds)
python benchmark.py --duration 60

Results are saved as JSON files in the benchmark-results/ directory. Submit a PR adding your results file to share your benchmarks with the community.

To view results locally, run the benchmark tool and then serve the docs:

# Generate benchmarks
python benchmark.py

# View results in docs (requires mkdocs and dependencies)
python generate_benchmark_docs.py
mkdocs serve

Individual Test Commands

If you want to benchmark a specific wallet type or seed recovery mode on your system, you can copy and paste any of the commands below. Each runs a --performance test that will execute for a short time and report your system's recovery speed.

Password Recovery

# Bitcoin Core (BDB)
python btcrecover.py --performance --wallet ./btcrecover/test/test-wallets/bitcoincore-wallet.dat --no-eta --no-dupchecks --dsw

# Bitcoin Core (SQLite)
python btcrecover.py --performance --wallet ./btcrecover/test/test-wallets/bitcoincore-0.21.1-wallet.dat --no-eta --no-dupchecks --dsw

# Bitcoin Core with GPU acceleration (the only wallet type that supports --enable-gpu)
python btcrecover.py --performance --wallet ./btcrecover/test/test-wallets/bitcoincore-wallet.dat --no-eta --no-dupchecks --dsw --enable-gpu

# Electrum 2.8+ Passphrase
python btcrecover.py --performance --wallet ./btcrecover/test/test-wallets/electrum28-wallet --no-eta --no-dupchecks --dsw

# Blockchain.com (v0)
python btcrecover.py --performance --wallet ./btcrecover/test/test-wallets/blockchain-v0.0-wallet.aes.json --no-eta --no-dupchecks --dsw

# Blockchain.com (v2)
python btcrecover.py --performance --wallet ./btcrecover/test/test-wallets/blockchain-v2.0-wallet.aes.json --no-eta --no-dupchecks --dsw

# Blockchain.com (v3)
python btcrecover.py --performance --wallet ./btcrecover/test/test-wallets/blockchain-v3.0-MAY2020-wallet.aes.json --no-eta --no-dupchecks --dsw

# MultiBit Classic
python btcrecover.py --performance --wallet ./btcrecover/test/test-wallets/multibit-wallet.key --no-eta --no-dupchecks --dsw

# MultiBit HD
python btcrecover.py --performance --wallet ./btcrecover/test/test-wallets/mbhd.wallet.aes --no-eta --no-dupchecks --dsw

# MetaMask (Chrome)
python btcrecover.py --performance --wallet ./btcrecover/test/test-wallets/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn --no-eta --no-dupchecks --dsw

# Coinomi (Android)
python btcrecover.py --performance --wallet ./btcrecover/test/test-wallets/coinomi.wallet.android --no-eta --no-dupchecks --dsw

# Ethereum Keystore (scrypt)
python btcrecover.py --performance --wallet ./btcrecover/test/test-wallets/utc-keystore-v3-scrypt-myetherwallet.json --no-eta --no-dupchecks --dsw

# BIP39 Passphrase (CPU)
python btcrecover.py --performance --bip39 --mpk xpub6D3uXJmdUg4xVnCUkNXJPCkk18gZAB8exGdQeb2rDwC5UJtraHHARSCc2Nz7rQ14godicjXiKxhUn39gbAw6Xb5eWb5srcbkhqPgAqoTMEY --mnemonic "certain come keen collect slab gauge photo inside mechanic deny leader drop" --no-eta --no-dupchecks --dsw

# BIP39 Passphrase with OpenCL acceleration
python btcrecover.py --performance --bip39 --mpk xpub6D3uXJmdUg4xVnCUkNXJPCkk18gZAB8exGdQeb2rDwC5UJtraHHARSCc2Nz7rQ14godicjXiKxhUn39gbAw6Xb5eWb5srcbkhqPgAqoTMEY --mnemonic "certain come keen collect slab gauge photo inside mechanic deny leader drop" --no-eta --no-dupchecks --dsw --enable-opencl

# SLIP39 Passphrase (CPU)
python btcrecover.py --performance --slip39 --slip39-shares "hearing echo academic acid deny bracelet playoff exact fancy various evidence standard adjust muscle parcel sled crucial amazing mansion losing" "hearing echo academic agency deliver join grant laden index depart deadline starting duration loud crystal bulge gasoline injury tofu together" --addrs bc1q76szkxz4cta5p5s66muskvads0nhwe5m5w07pq --addr-limit 2 --no-eta --no-dupchecks --dsw

# SLIP39 Passphrase with OpenCL acceleration
python btcrecover.py --performance --slip39 --slip39-shares "hearing echo academic acid deny bracelet playoff exact fancy various evidence standard adjust muscle parcel sled crucial amazing mansion losing" "hearing echo academic agency deliver join grant laden index depart deadline starting duration loud crystal bulge gasoline injury tofu together" --addrs bc1q76szkxz4cta5p5s66muskvads0nhwe5m5w07pq --addr-limit 2 --no-eta --no-dupchecks --dsw --enable-opencl

# BIP38 Encrypted Key (CPU)
python btcrecover.py --performance --bip38-enc-privkey 6PnM7h9sBC9EMZxLVsKzpafvBN8zjKp8MZj6h9mfvYEQRMkKBTPTyWZHHx --no-eta --no-dupchecks --dsw

# BIP38 Encrypted Key with OpenCL acceleration
python btcrecover.py --performance --bip38-enc-privkey 6PnM7h9sBC9EMZxLVsKzpafvBN8zjKp8MZj6h9mfvYEQRMkKBTPTyWZHHx --no-eta --no-dupchecks --dsw --enable-opencl

# Raw Private Key
python btcrecover.py --performance --rawprivatekey --addrs 1EDrqbJMVwjQ2K5avN3627NcAXyWbkpGBL --no-eta --no-dupchecks --dsw

Seed Recovery

# BIP39 12-word Seed (CPU)
python seedrecover.py --performance --wallet-type bip39 --mnemonic-length 12 --language en --dsw --no-eta --no-dupchecks --addr-limit 1 --bip32-path "m/44'/0'/0'" --addrs 17GR7xWtWrfYm6y3xoZy8cXioVqBbSYcpU

# BIP39 24-word Seed (CPU)
python seedrecover.py --performance --wallet-type bip39 --mnemonic-length 24 --language en --dsw --no-eta --no-dupchecks --addr-limit 1 --bip32-path "m/44'/0'/0'" --addrs 17GR7xWtWrfYm6y3xoZy8cXioVqBbSYcpU

# BIP39 12-word Seed with OpenCL acceleration
python seedrecover.py --performance --wallet-type bip39 --mnemonic-length 12 --language en --dsw --no-eta --no-dupchecks --addr-limit 1 --bip32-path "m/44'/0'/0'" --addrs 17GR7xWtWrfYm6y3xoZy8cXioVqBbSYcpU --enable-opencl

# BIP39 24-word Seed with OpenCL acceleration
python seedrecover.py --performance --wallet-type bip39 --mnemonic-length 24 --language en --dsw --no-eta --no-dupchecks --addr-limit 1 --bip32-path "m/44'/0'/0'" --addrs 17GR7xWtWrfYm6y3xoZy8cXioVqBbSYcpU --enable-opencl

# Electrum Seed (CPU)
python seedrecover.py --performance --wallet-type electrum2 --mnemonic-length 12 --language en --dsw --no-eta --no-dupchecks --addr-limit 1 --bip32-path "m/0'" --addrs 17GR7xWtWrfYm6y3xoZy8cXioVqBbSYcpU

# Electrum Seed with OpenCL acceleration
python seedrecover.py --performance --wallet-type electrum2 --mnemonic-length 12 --language en --dsw --no-eta --no-dupchecks --addr-limit 1 --bip32-path "m/0'" --addrs 17GR7xWtWrfYm6y3xoZy8cXioVqBbSYcpU --enable-opencl

# Aezeed (LND) Seed (CPU)
python seedrecover.py --performance --wallet-type aezeed --mnemonic-length 24 --language en --dsw --no-eta --no-dupchecks --addr-limit 1 --addrs 1Hp6UXuJjzt9eSBa9LhtW97KPb44bq4CAQ

# SLIP39 Seed Share (CPU)
python seedrecover.py --performance --wallet-type slip39seed --mnemonic-length 20 --dsw --no-eta --no-dupchecks