What Is a Checksum Error? The Crypto Detection Guide
A checksum error means data failed a math test. In crypto, that test is much weaker than most users assume. Ethereum's EIP-55 catches roughly one typo in four thousand. Bitcoin's Base58Check is about a thousand times stronger. Bech32 is stronger still. Yet none of those checksums protect a wallet against the attack that actually drained $713 million from personal wallets in 2025, because the malicious address sitting in the clipboard or in transaction history is itself a valid, checksum-passing string. This is what a checksum error is, why crypto wallets show one, and why a clean pass is no proof of safety.
The short answer on checksum errors in crypto
A checksum error tells the user that an address, a file, or a seed phrase did not match its built-in integrity test. The wallet, exchange, or installer is refusing to act because a bit flipped, a character was typed wrong, or the data was tampered with. In crypto, the error catches typos and accidental corruption. It does not catch a perfectly typed address that the attacker controls. The largest documented 2025 wallet loss, $50 million in USDT in December, came from a victim copying an address with a perfectly valid checksum, and the address simply belonged to a scammer.
What a checksum actually is (and isn't)
Think of a checksum as a tiny receipt for a much larger package, a block of data hashed down to a few bytes by a known calculation. The sender attaches the original checksum. The receiver runs the same calculation, gets a new checksum, and compares. Match means data integrity held. Mismatch means data corruption somewhere: a flipped bit in RAM, a download cut off early, a mistyped character. The mismatch is what wallets and installers flag as a checksum error. The computed checksum values failed to match the expected value attached to the original data (the stored value the sender published). No data errors got past, because basic error detection and integrity checks fired.
Mechanically, classic checksums are arithmetic, not cryptography. The simplest variant chops the data into words and runs one's complement addition (the "1's complement" trick used in the venerable internet TCP/IP checksum from 1988). Slightly fancier are longitudinal parity, Fletcher's algorithm, and CRCs (cyclic redundancy checks), all close cousins of each other. A cyclic redundancy check is fast and good for transmission errors. For modern file integrity, the dominant choice is Adler-32 (fast, no cryptography) or MD5 or SHA (slower, much stronger). Software tools like `sha256sum`, `md5sum`, and HashCheck are how most users actually run a verification.
Here is the boundary. A checksum can prove data was not accidentally corrupted or tampered with at the byte level. Nothing more. It cannot prove who created the data. SHA-256, a cryptographic hash, is much stronger than a CRC. It still does not prove authorship; for that the publisher signs the hash with a private key. Crypto users mix the two up all the time. "The address passed checksum validation" is not the same as "the address belongs to the right person." Anyone can generate a valid Ethereum or Bitcoin address. Only the holder of the private key controls the funds. Checksum verification confirms the address is well-formed. Whose wallet it points to? That is a different question, with a different answer.

How crypto checksum algorithms work: EIP-55, Base58Check, Bech32
Three real schemes dominate retail crypto, and each was designed with a different priority.
EIP-55 is Ethereum's mixed-case checksum. Vitalik Buterin and Alex Van de Sande proposed it on January 14, 2016. It works by lowercasing the address, hashing the lowercased string with Keccak-256, and then re-capitalising the hex letters (A–F) according to the bits of that hash. Only the 15 hex letters in a typical address can have their case flipped, giving the scheme roughly 15 effective check bits. EIP-1191, proposed in March 2018, extends EIP-55 with the chain ID so that an address checksum on Ethereum and on a fork chain like Rootstock do not collide.
Base58Check is Bitcoin's legacy scheme. It appends a 4-byte checksum to the end of the encoded address, computed as the first 4 bytes of the double-SHA-256 of the version byte plus the payload. The "1" prefix on a P2PKH address corresponds to a 0x00 version byte; the "3" prefix on a P2SH address corresponds to 0x05. The Base58 alphabet itself drops the visually-confusing 0, O, I, and l. Implementing checksum logic for Base58Check is a single SHA-256 call followed by a 4-byte comparison.
Bech32 (BIP-173) is the SegWit address scheme from Pieter Wuille and Greg Maxwell, dated 2017. Its 6-character BCH code guarantees detection of every error affecting up to four characters and keeps the undetected error rate below one in a billion for longer corruptions. A subtle 2020 finding (that inserting or deleting a 'q' before a final 'p' can preserve the checksum) motivated BIP-350 Bech32m, which Taproot (witness version 1) now uses.
| Scheme | Year | Address example | Check size | Typical typo detection |
|---|---|---|---|---|
| EIP-55 / EIP-1191 | 2016 / 2018 | `0xAbCd...EfGh` | ~15 bits | ~99.97% (1 in 4,000 misses) |
| Base58Check (P2PKH) | 2009 | `1A1zP1...` | 32 bits | ~99.99999998% |
| Base58Check (P2SH) | 2012 | `3J98t1...` | 32 bits | ~99.99999998% |
| Bech32 (SegWit v0) | 2017 | `bc1q...` | ~30 bits | ≥99.999999999% on 4-char errors |
| Bech32m (Taproot) | 2020 | `bc1p...` | ~30 bits | same, fixes qp insertion |
The table is the article's most important pair of numbers. Treat them as design budgets, not security guarantees.
Why EIP-55 catches just 1 typo in 4,000
The EIP-55 specification quotes the failure rate explicitly: the probability that a random typo in an Ethereum address passes the checksum is 0.0247 percent, or about one in 4,049. That is not a bug. It is what 15 effective check bits buy you. The scheme was a 2016 retrofit, designed to be backward-compatible with the existing 40-character hex address format. Compatibility cost detection strength.
For practical wallet flows that is usually fine. A user who types or pastes the address once is overwhelmingly likely to be caught if they slip. A user who pastes the same poisoned address ten times in a row will pass the checksum every time, because the address is valid. The thousand-fold gap to Bitcoin's Base58Check, and the further step up to Bech32, is the reason serious wallet UX treats Ethereum address verification as the user's responsibility rather than the protocol's.
Checksum errors outside crypto: WinRAR, BIOS, firmware, hard drive
Most people who type "checksum error" into Google are not crypto users. They are staring at WinRAR, or a stuck PC boot screen, or a nervous NAS. Same vocabulary. Wildly different stakes.
WinRAR is the classic one. You download a .rar, you extract it, you get a CRC mismatch popup. The archive is corrupt. Usually the cause is mundane: an interrupted download, a flaky Wi-Fi handover, a bad sector on the disk, occasionally malware that touched the file in flight. Re-download from the source. Run CHKDSK. If you absolutely must salvage what's there, WinRAR's "keep broken files" option will extract a partial copy of the contents.
A BIOS or CMOS checksum error on PC boot is almost always the CR2032 coin-cell on the motherboard going flat. Sometimes a failed firmware update clobbered NVRAM. Sometimes the user yanked a stick of RAM and the stored hardware fingerprint no longer matches. Replace the battery. Load defaults. The machine boots.
ZFS and Btrfs raise checksum errors when a hard drive hands back a block that does not match the stored hash. Those errors are literally the design intent: silent bitrot finally getting surfaced.
The one that should make a crypto user nervous is a firmware checksum error on a hardware wallet. Trezor's bootloader re-verifies the firmware signature on every boot. Ledger's secure element does the same. "Invalid signature" or Ledger's "Unknown error (0x6984)" at install time is the device telling you, loudly, that the firmware it sees does not match what its root key expects. Stop. Unplug. Re-download from the vendor URL you can recite from memory. Anyone who clicks past that warning has just walked through the front door of a supply-chain attack.
When a checksum error means tampering — and when it doesn't
The load-bearing insight in this article. Checksums detect random corruption well. They do nothing against an attacker who chose a valid address on purpose.
Chainalysis's 2026 Crypto Crime Report puts overall 2025 crypto theft at $3.4 billion, with $1.5 billion from the single Bybit hack. Personal wallets lost $713 million across roughly 80,000 victims in about 158,000 incidents. Almost none of those losses came from typo-induced invalid checksums, because exchanges and wallets bounce those at the input field. They came from two attacks that valid checksums cannot stop.
The first is address poisoning. The attacker sends a tiny dust transaction from a freshly generated address engineered to share the first and last several characters of a victim's frequent counterparty. The next time the victim copies an address from transaction history, the spoofed one is sitting at the top of the list. The address has a perfectly valid checksum. The wallet shows green. The funds go to the attacker. A Carnegie Mellon-cited Chainalysis figure puts the number of address-poisoning attempts in 2025 at 270 million, targeting 17 million potential victims. The December 20, 2025 incident in which a trader lost $50 million in USDT happened roughly 26 minutes after the victim sent a small test transaction; the test did not save them, because the poisoned address had already been seeded into history.
The second is clipboard hijackers. Malware like the GitVenom campaign documented by Kaspersky silently swaps any crypto address copied to the clipboard for an attacker-controlled one. Estimated losses from GitVenom alone reached roughly $485,000 in late 2024 across victims in Brazil, Turkey, and Russia. Again, the substituted address has a valid checksum. The wallet has nothing to flag. Critical data, the destination of a large transfer, slips past the integrity layer because it was never altered or corrupted; it was replaced by something equally valid.
| 2025 attack | Mechanism | Did checksum stop it? |
|---|---|---|
| Address poisoning ($50M USDT, Dec 20, 2025) | Spoofed-lookalike address in transaction history | No — the spoofed address has a valid EIP-55 checksum |
| Clipboard hijackers (GitVenom, ~$485k) | Malware substitutes copied address | No — substituted address is valid |
| ChatGPT-themed MEV bot scams (>30 ETH, >100 victims) | AI-recommended contract drains the wallet | No — checksum has nothing to verify the contract intent |
| AI-assisted scams broadly | 4.5× more profitable than traditional schemes | No — relies on social engineering, not address typos |
A green checksum means the address is well-formed. It does not mean it is yours. That distinction is the single most important thing a crypto user can take away from this article.
BIP-39 seed phrase: why valid words still fail the checksum
BIP-39 seed phrases also have a checksum, and it surprises people during recovery. The scheme encodes the last few bits of SHA-256 over the wallet entropy into the final word of the phrase. A 12-word seed carries only 4 checksum bits. A 24-word seed carries 8. For 12 words, that means only about one random last-word pick in sixteen will pass validation. "I'm certain my seed is correct but the wallet rejects it" is overwhelmingly a typo earlier in the phrase, or the wrong word from the 2,048-word BIP-39 list.
The hardware side is stricter. Trezor and Ledger re-verify firmware signatures on every boot via secure-element code, not at the host. A signature mismatch is treated as tampering and the firmware will refuse to run. That is the correct behaviour. Anyone who sees a firmware checksum or signature error from a hardware wallet should treat it as an alarm, not a glitch.

How to verify and fix a checksum error: best practices
The checklist is short. Same across most wallets and exchanges.
Ethereum address. Copy from the counterparty's verified channel (their published profile, not a Telegram DM). Paste. Let the wallet validate. Send $1 as a test transaction. Wait for confirmation. Then send the full amount. Kraken stores every saved ETH address in EIP-55 form by default. Binance and Coinbase bounce invalid-checksum input at the submit step, before any broadcast hits the chain. MetaMask defaults to EIP-55 and shows a warning on manually edited addresses; historically it accepted all-lowercase too, which several open GitHub issues complained about for years.
Bitcoin address. Prefer Bech32 (`bc1...`) over the legacy `1...` and `3...` formats when the counterparty supports it. The error-detection strength is meaningfully higher and the address format is harder to misread.
File download. Wallet binary, hardware-wallet firmware image, Linux ISO. Compute the SHA-256 hash locally. Compare to the publisher's signed value, not the copy printed beside the download link. A man-in-the-middle who controls the download page can swap both. Keep a backup of any verified file you actually rely on. Detecting errors later is much easier when a known-good copy is sitting on a USB stick or a paper printout.
Hardware wallet firmware checksum or signature error. Do not bypass. Re-download from the vendor's documented URL. Try a different cable. Try a different USB port. Restart Ledger Live or Trezor Suite. If the error persists, email vendor support. Searching "fix Ledger 0x6984" on third-party forums is where attackers wait.
One sentence to remember. A passing checksum proves the data was not accidentally corrupted. It does not prove the data is what you wanted to send to.