Take a photo of your bookshelf. To every app, every cloud service, every person who ever sees it, it’s a photo of a bookshelf. But in its pixels, invisibly, it can carry your seed phrase, your password vault, a document — encrypted with the same standard governments use, recoverable only by you.

Here is that claim, made concrete. Both images below are real. One is an ordinary photo. The other carries a 12-word recovery phrase, AES-256-encrypted. They are the actual input and output of our command-line tool:

Two identical-looking photos of a harbor; the right one carries an AES-256-encrypted seed phrase, differing by 0.01% of pixels each by one bit
Left: the original JPEG. Right: the same scene as a PNG carrying an encrypted Shamir share. Measured difference: 0.01% of pixels, each changed by exactly 1 in its least significant bit.

That’s steganography plus cryptography. This post walks through what actually happens to your secret, step by step, and — just as important — the honest list of ways hidden data can be destroyed if you use the technique carelessly.

SECRETseed phraseplaintextAES-256encryptciphertextSHAMIR3-of-5 split5 sharesPNGLSB embedlooks normalencrypt first, hide second — two independent layers
The full pipeline: your secret is encrypted, optionally split into Shamir shares, then hidden in the least significant bits of one or more PNGs.

Step 0: Why hiding alone is not enough

Classic steganography tools from the 2000s made a mistake that still haunts tutorials today: they hid plaintext. If anyone extracted the payload, they had the secret.

The correct order is encrypt first, hide second:

  1. Encryption protects the content — extracted bytes are useless ciphertext without your passphrase.
  2. Steganography protects the existence — nobody looks twice at a photo of a bookshelf.

These are independent layers. An attacker has to know the image carries data, extract it, and break AES-256. Each layer covers the other’s weakness: encryption alone announces “here is a secret worth attacking” (a vault.enc file is a target); a hidden but unencrypted payload is one extraction away from disclosure. Together, there’s nothing to see and nothing to read.

Step 1: Your secret becomes ciphertext (AES-256)

Before touching any image, StegoSafe encrypts your data with AES-256 in CBC mode:

  • Your passphrase is run through PBKDF2 with 100,000+ iterations — deliberately slow key derivation, so brute-forcing passphrases costs an attacker centuries, not seconds.
  • A random IV (initialization vector) is generated for every operation — encrypting the same secret twice produces completely different ciphertext.
  • The output is indistinguishable from random noise. That property matters in the next step.

Step 2 (optional): The ciphertext splits across multiple images (Shamir)

For high-stakes secrets — a crypto seed phrase, a master password, estate documents — a single hiding place is a single point of failure. Lose the image, lose the secret. Someone finds the image, they have the whole ciphertext to attack.

Shamir Secret Sharing fixes both failure modes at once. You pick a threshold — StegoSafe’s command-line tool splits 3-of-5 by default, and the apps let you choose (2-of-3, 3-of-5, and so on):

  • The ciphertext’s key is mathematically split into shares (polynomial interpolation over finite fields — the same construction used in enterprise key escrow), one embedded per image.
  • Enough shares recover the secret. Meeting the threshold in one place is convenience; any single image lost is a non-event.
  • Any 1 share alone reveals nothing. Not “less of the secret” — mathematically nothing. A share without its threshold is random data.
YOUR SECRETencrypted once🖼photo 1share 1🖼photo 2share 2🖼photo 3share 3🖼photo 4share 4🖼photo 5share 5ANY 3 of 5 → full recoverylose 2 to fire / theft — still safeANY 1 alone → nothinga thief with one photo learns zero
A 3-of-5 split (StegoSafe's default for the CLI): five ordinary photos, any three of which rebuild the secret — while any single photo, in the wrong hands, is just a photo.

Practical shape of this: photos spread across your phone, a USB drive at a relative’s house, and cloud storage. A house fire, a stolen phone, or a nosy cloud provider each encounter fewer shares than the threshold — so each learns nothing.

Step 3: The bytes disappear into pixels (LSB)

Each pixel in an image stores color as numbers — for example red 183, green 201, blue 148. Change 183 to 182 and no human, and no casual software, can tell the difference.

LSB (Least Significant Bit) steganography writes your ciphertext into exactly those final bits, spread across the image. Because AES output looks like random noise, the modified bits look like ordinary sensor noise — there’s no plaintext structure sitting in the pixels.

Capacity is real but finite: roughly one bit per color channel per pixel. A normal 12-megapixel photo can comfortably carry documents’ worth of data; StegoSafe analyzes each cover image and tells you what fits.

Step 4: The photo lives its normal life

The output is a standard PNG — it opens in every viewer, uploads anywhere, sits in your camera roll looking exactly like what it is: a photo. The secret travels wherever the photo travels, and recovery needs three things only you control: the image(s), the passphrase, and — if you split — enough shares to meet your threshold.

The honest part: what can destroy hidden data

Every steganography vendor should publish this list. Most don’t.

ActionSurvives?Why
Copying, moving, renaming the fileBytes untouched
Email attachment, file upload, USB, cloud syncBytes untouched
Sending as a document/file in messaging appsApps transmit files verbatim
Sending as an inline photo in apps that compressRecompression rewrites pixels — LSB data is gone
Screenshots of the imageNew pixels, no payload
Cropping, resizing, filters, “enhance”Pixel surgery destroys the embedding
Converting PNG → JPEGLossy compression discards exactly the bits carrying data

Two rules cover almost everything: keep it PNG, send it as a file. If a platform gives you a “send as document / original quality” option, that’s the one you want. (We’ll publish per-app test results — which messengers preserve files bit-for-bit — in an upcoming post.)

Where this actually matters

Abstract security is boring; threat models make it concrete. In coming posts we’ll walk through real cases:

  • Seed phrase backup — why photographing your recovery words is the worst common practice, and how threshold splitting across ordinary photos beats both paper and metal plates on the failure modes that actually happen (fire, theft, discovery).
  • Sensitive files in hostile environments — journalists and travelers crossing borders where a secrets.enc file invites questions a family photo album doesn’t.
  • Private photos that stay private — protecting intimate or personal images from cloud-leak exposure without trusting any provider.
  • Digital inheritance — leaving your family access to what matters without leaving it lying around while you’re alive.

Every one of them runs on the same four steps you just read.


StegoSafe implements this entire pipeline — AES-256 with PBKDF2, optional Shamir k-of-n splitting, LSB embedding to PNG — locally on your device. No cloud, no accounts, works fully offline. The CLI core is open source on GitHub.

Frequently asked questions

Is steganography the same as encryption?
No, and you should never rely on steganography alone. Encryption scrambles a message so it can’t be read without a key; steganography hides the fact that a message exists at all. StegoSafe always encrypts first (AES-256) and then hides the encrypted bytes inside the image — so even if someone suspects a photo and extracts the payload, they get ciphertext, not your secret.
Can someone tell a photo has hidden data in it?
To the human eye, no — changing the least significant bit of pixel values is far below what anyone can see. Specialized statistical analysis (steganalysis) can sometimes flag images with embedded data, which is exactly why the payload is encrypted first: detection is not the same as disclosure. For most threat models — casual snooping, leaked cloud photos, a stolen laptop — a normal-looking PNG on top of AES-256 is two independent layers an attacker has to beat.
Will sending the image through WhatsApp or Instagram destroy the hidden data?
If the app recompresses the image, yes — LSB data does not survive JPEG recompression. That’s why StegoSafe outputs PNG (lossless) and why you should send stego images as files/documents rather than inline photos in apps that compress. Sending the original file, e.g. as a document attachment, preserves every byte.
What happens if I lose one of the images after splitting my secret?
That’s what threshold splitting is for. With Shamir Secret Sharing you choose k-of-n — for example 3-of-5: the secret is split across five images and any three are enough to recover it. Lose one or two images entirely and nothing is lost; an attacker who finds fewer than three learns nothing.
Does StegoSafe upload my images or secrets anywhere?
No. All encryption, splitting, and embedding happens locally on your device — the core application works completely offline, with no cloud storage and no data collection.

StegoSafe hides AES-256-encrypted secrets inside ordinary images — and can split them across multiple photos with Shamir Secret Sharing. Runs fully offline on iOS, macOS, Windows, and Linux.

Get StegoSafe →