FM-39 · Seed phrase concealmentDistribution: unlimited. Copy freely.
Bitcoin Seed BookSelf-custody field manual

Hide a seed in a photo

Home » Resources » Hide a seed in a photo

The idea is older than bitcoin. Every pixel in a photo is three numbers, red, green and blue, each from 0 to 255. Change the last binary digit of each number and the colour shifts by a step no eye can see. Those last digits, the least significant bits, are free space: a 12-megapixel photo has 36 million of them, and a twelve-word seed needs 132. The seed goes in, the photo looks the same, and the file sits in a folder of holiday pictures.

It is a good trick. It fails in one way, and that way is almost guaranteed on a phone.

Hiding is not encrypting. Anyone who suspects a photo and has the tool you used can pull the bits out and test them against the BIP-39 checksum. Put a passphrase on the wallet and keep it away from the photo. Then the photo alone opens nothing.

How the bits go in

The tools take a cover image and a message and write the message into the low bits in some order: left to right, or scattered by a password. Steghide, the most cited open-source tool, takes JPEG, BMP, WAV and AU files as covers and encrypts the message with a passphrase before embedding it, so a stranger who finds the file still needs the passphrase to read it. Other tools do the same with PNG. The output is a file the same size and shape as the input.

For a seed, the message is short. The example phrase on this site:

pizza educate fat kiss domain venue … (this phrase is public: never use it for real funds)

is under a hundred bytes as text, and smaller still as twelve eleven-bit numbers. It fits in the first row of pixels.

We will never ask for a seed word or a passphrase, and you should never type one into this site or any tool it links to. If you try a steganography tool, try it with the public example, on a computer that is not connected to anything.

How the bits come out, by accident

The low bits are the first thing any image processing throws away, because they are the part nobody can see. Every one of the following rewrites them:

  1. Saving as JPEG. JPEG keeps what the eye notices and discards the rest. Re-saving a stego PNG as JPEG, or opening a stego JPEG in an editor and saving it again, recomputes the pixels and the low bits with them. The message is gone and the picture looks identical.
  2. Sharing from a phone. Messaging apps re-encode photos to save bandwidth. The copy that arrives is not the file you sent. Email attachments usually survive; "send as photo" usually doesn't.
  3. Uploading anywhere public. Social networks strip metadata and re-encode every upload. Instagram, Facebook, X and WhatsApp all produce a new file on their side. The one you download later is theirs, not yours.
  4. Cloud photo libraries. A library set to save space ("storage saver", "optimise storage") recompresses what you upload. The original is gone from the cloud and, after the phone frees space, from the phone too.
  5. Screenshots, crops, rotations, filters. Anything that touches the pixels touches the low bits. A screenshot of the photo is a new rendering, scaled to the screen.

None of these fail loudly. The photo opens, it looks right, and the seed is not in it. You find out when you need it.

What survives

A lossless file (PNG, BMP, TIFF), copied as a file, byte for byte. A USB stick, a file-level backup, an email attachment, a zip. Treat the stego image the way you would treat an executable: never let anything "helpful" open it and save it back.

The practical rules:

  • Keep the stego file in a lossless format and never convert it.
  • Keep two or three copies, made with a file copy, and check them with a hash (sha256sum on Linux and Mac, Get-FileHash on Windows). Identical hashes mean identical bits.
  • Keep the clean original somewhere else, so you can tell the two apart.
  • Write down which tool and which version you used. Tools change their embedding order between versions, and a message hidden with one may not extract with the next.
  • Test the extraction on a fresh copy before you fund anything, and again once a year.

The other failure: being found

A stego image is invisible to the eye and visible to statistics. Steganalysis tools look at the distribution of low bits in a file, and a natural photo has a different distribution from one that has had a message written into it. The difference is small for a short message, and a seed is a short message, so detection is unlikely. But a single PNG in a folder of JPEGs, with a date that matches your hardware wallet purchase, is not invisible at all. Hide the file among others of its kind, and give the folder a reason to exist.

The stronger fix is to hide numbers rather than words. Run the seed through one of the ciphers first. A photo that gives up twelve numbers between 5432 and 7479 gives the attacker a second puzzle instead of a wallet.

Is it worth it?

For a copy you need to carry across a border on a phone, maybe. See carrying a seed across a border for what that trip actually involves. For a backup at home, metal and paper are simpler and don't vanish when a family member taps "optimise storage". The image method is one more place a copy can live, with the strict rule that the file is never opened by anything that saves.

Sources