ForgotWalletPassword.com

Reference · version history

How wallet password encryption changed over time.

The same wallet name can hide very different encryption depending on the version — and the version decides how fast (or whether) recovery works. This page is the quick reference for what changed, when, and why it matters for your file.

By Robbert Bink · ~5 min read · Published 9 August 2026 · Last reviewed: 14 August 2026

Illustration of a balance scale weighing the odds of password recovery
The headline

Version first, tool second. A 2013 wallet.dat and a 2021 wallet.dat both call themselves wallet.dat — but one can test ~4× faster per guess. The same is true for Electrum, MultiBit and Blockchain.com files. This timeline shows the encryption changes that matter, so you can pin your file to its era before choosing a tool.

The timeline at a glance

Wallet / formatEraEncryption / KDFWhat it means for recovery
Bitcoin Core wallet.dat2009–2011No built-in encryptionA wallet from this era was usually never encrypted — the password you remember may be irrelevant.
Bitcoin Core wallet.dat0.4 (2011) – 0.20AES-256-CBC + iterated SHA-512 (EVP_BytesToKey), ~25,000-round baseline, machine-tuned at encryption timeOld files often have fewer rounds — faster to test. The count is stored in the file, not fixed by the version.
Bitcoin Core wallet.dat0.21 (2021) – presentSame KDF; descriptor wallets use the SQLite backend (experimental in 0.21–22, default from 23.0) — legacy BDB wallets remainSame encryption, typically higher rounds; hashcat mode 11300 unchanged.
Electrum1.x (2011–2014)Double-SHA-256-based key schemeVery weak by today’s standards — old Electrum files test fast.
Electrum2.0–2.7 (2015–early 2017)Legacy keystore, double-SHA-256 familySame weak family; extraction picks the salt type.
Electrum2.8+ (2017–present)PBKDF2-SHA512 1,024 + ECC (BIE1 keystore)Slower per guess; hashcat modes 21700/21800 by salt type.
MultiBit Classic2011–2016.key backup: 3×MD5 · .wallet file: scrypt N=16,384The .key backup is ~1,000× faster per guess — the classic “wrong file” trap.
MultiBit HD2014–2016scrypt N=16,384 r=8 p=1Much harder; the 12–24-word phrase restores without the password.
Ethereum keystore v32016–presentscrypt or PBKDF2-HMAC-SHA256; parameters stored in the file's kdfparams (geth commonly uses scrypt N=262,144, but lighter/non-default configurations exist)Both slow; the JSON header names the KDF (hashcat 15700 vs 15600) — read the actual parameters before estimating speed.
MetaMask Extension — legacy vaults2016–present (legacy layout)PBKDF2-HMAC-SHA256, 10,000 iterations fixed (hashcat 26600)Fast per guess; the phrase is the faster path whenever you have it.
MetaMask Extension — newer vaultsNewer vault layouts (dynamic iteration counts)PBKDF2-HMAC-SHA256, iteration count stored in the vault metadata — read the actual parameters instead of assuming 10,000 (dynamic-count mode 26610; 26620 only in newer/development hashcat builds)Speed depends on the stored count — a 600,000-iteration vault is roughly 60× slower per guess than a 10,000 one; the phrase is the faster path whenever you have it.
MetaMask MobileMobile app vaultsSeparate vault format — PBKDF2-based with its own parameters (hashcat 31900)Not the same as the extension vault — use the mobile-specific extraction and mode rather than applying extension parameters.
Blockchain.comv0 (2011) / v2 / v3 (2020+)PBKDF2-SHA1 at 10 / 10,000 / 5,000 iterationsThe earliest exports are effectively unprotected; v2/v3 still crackable with clues.
BIP38 paper keys2012–presentscrypt N=16,384 r=8 p=8Memory-hard — tens of guesses per second; clues decide.
BIP39 passphrase2013–presentPBKDF2-HMAC-SHA512, 2,048 iterations; candidates verified by deriving target addressesThe “25th word” is a password problem, and a recoverable one with clues.

Why the version decides your odds

Two passwords of identical length can sit in completely different recovery universes purely because of when the wallet was encrypted. The master list shows the current KDF per wallet, the benchmarks page shows the measured speeds, and the feasibility guide turns both into a verdict. The one thing this timeline adds is time: the era of your file is often the first and most reliable clue about its encryption.

How to find your version

  • Bitcoin Core: the wallet version is visible in the client’s debug log and the wallet header; the wallet.dat guide explains the file versions.
  • Electrum: let electrum2john.py detect the wallet format — for fully encrypted 2.8+ wallets it processes the encrypted container (base64 BIE1 prefix), not the JSON. The mode follows the generated $electrum$N prefix: 1/2/3 → 16600, 4 → 21700, 5 → 21800. Since 2.8, the whole wallet file can be ECIES-encrypted on top of the internally encrypted seed — the extractor handles that layer.
  • Blockchain.com: the export filename and JSON structure identify v0/v2/v3.
  • Not sure at all? The wallet-file identifier routes by extension and app first.

Sources & references

  1. Bitcoin Core — wallet source (KDF and version history)
  2. Electrum — source (keystore and version history)
  3. hashcat — example hashes (mode and KDF reference)
  4. BIP38 — passphrase-protected private keys
  5. BIP39 — mnemonic code
Missing something, or spot an error? Tell us — every correction is checked and applied.
Was this guide helpful?

Keep going — it’s all free

Not sure what you lost or what’s possible?

Take the quick diagnosis for a first verdict — it stops early when the answer is already clear — then work the search checklist. Everything here is informative, runs offline, and is free to use.