Tech · Crypto

Alice and Bob are now lawfully under surveillance by the three-letter agency

or: why encryption alone is not enough and how to hide data in plain sight while keeping it accessible

June 3, 2026, 3:47 AM UTC · 9 min read
This article is also available auf Deutsch.
Alice and Bob are now lawfully under surveillance by the three-letter agency

When people think about encryption, many have something like this on their inner screen:

kiQrUWZvE8pSlIf jYX6aIPR4Bdeb4v rdNIQgn6iM3eQGs PWhzX6VLqH7kLcC lShGPil74GdIQpu
UXQYZTCvFLkU4jH IzCQCKQ0eEdvXlY nNIo3htBpIHIIbR k5v1voNnhbfM3np 9tMXgS8djXX9Ne8
wyvs76vvT3ikDbs uM9KmzVjF0fySRj ZNWkkQC8K9zT7tI STluC8Os04rTpUr 7Cg18LLjTNFkrhf
mdZuiFtrcvalc7A l66VcHEgjgnfLBQ X7Re9poriz1Mxsy RmeKSrwucTLiSpF yLOa01ghjKiAoqx
6cYF5eIshRkyzLh UJkP0DcDGJsYCBk B0tQeMVeDEGCb7m e4rqqtn5Dt6i1Fo XGyX8W8v5M5Tf7w
tqkdQAtxj2fmjQz oYz4J6tbsCgnuKS 18O9kQEcaOUmkky TJVmsaEbxb5V1DC kYz9v3Fjj4chFB8
GVaOrgQidClzqzL 0nMizteyL6iDN3P EpWKh1SHP7MW3Sv j3wxx2sSD1t6WbI 6CESpTiVpbUUH3T
WtPiSsIRlAT0x1Z p05yypaTNu4J4FN PnhVKYECgGhUpky B9BTufQ8M83jpeC RSTM2e3KozhIlkd
5UHeSs9bWo1Iw3 ZGIu6s36NhjVKVu WB0nfQsRXIBIMeK 5p58AWEOXksLSjc tZqI0aJ8TRr3YhC
GgoD6BlNRxRTRf9 traMe2griqOihCH K3zesRCir4Xhvaf aoNYtioWWOyQg0P FNwV3gGDJk0t5xT
Q95jNAhOxciRxMR bhSQfhW6ng70J7j bRmG9BY4gqCaajO I4pnF8iGOlgPIhL tAHC1B0LNzsjVwC

Suspicious Behavior

Experience shows that when people see something like this, many (and sometimes even we ourselves) assume that whoever wrote such a string has something to hide. Yes, she does! But why is she hiding it? What is the secret in her message? It must be something bad. There is a lot of criminal energy involved in using such strong encryption for a message. The sender and receiver are probably part of some secret conspiracy, terrorists maybe, or mafia. Only criminals need encryption this strong. Why doesn't Alice just write her message so we can check whether there is something bad in it? These two, they are probably criminals! They are probably whispering too! And the other day she was wearing sunglasses in the evening! Better keep an eye on them, gather some metadata, see who they hang out with, where they go, and who they even are. Alice and Bob are now on the list! We are watching these two. These subversive encryptors!

Dudes and Dudinas, I just want to write privately to someone. Why do I become suspicious when I exercise my right to privacy in public digital space? What is wrong with us? What business is it of ours what Alice writes to Bob?

If the encrypted message were in an envelope that we could not see through and were not allowed to open, Alice and Bob would never have been suspected and never ended up on the list. So what is to be done? Give up on privacy altogether? That cannot be right either. Use actual envelopes again and hope nobody opens them? The BND was already reading paper mail during the Cold War. We need more. But what? If only I could obscure or hide the encrypted data!

There was something like that, what was it called again? Something with a dinosaur! Stegosaurus, no, but something like that! Oh right, it was the...

Steganography

That is it! Not the dinosaur. The Stegosaurus had armor that covered and protected it. The science is called steganography, from the Greek words steganos (covered) and graphein (writing). Covert writing.

And the idea is almost as old as the dinosaur, well, almost. In antiquity the approach was: shave a slave's head, tattoo the message onto the scalp, wait for the hair to grow back, then send or sell the slave to the recipient. The recipient shaved the slave's head again and could read the message. I would rather not go into how the message was deleted. But: no suspicious envelope, no encrypted gibberish. Nothing to see here, move along.

The principle today is the same, only digital. You hide the message not under a haircut, but inside a digital image.

Specifically: a digital image consists of millions of pixels, and each pixel has a color value. This color value corresponds to a number. That number, stored in binary code, consists of bits. The last bit represents the smallest value, or has the least significance for the color value. We therefore call it the Least Significant Bit (LSB). If you overwrite only this one nearly meaningless bit in a standard RGB 8-bit color value, the color changes by exactly 1 out of 256 possible values. The human eye cannot see the difference. Zero. Nada. Nothing.

But into these invisible last positions of millions of pixels fits quite a lot of data. So Alice sends Bob a completely unsuspicious photo of her cat Mimimi, having previously hidden her actual message inside it. No cryptobabble, no suspicious string, no reason for the three-letter agency to look more closely. Nothing to see here, move along.

Is a cat just a cat? Who suspects a cat photo?

That is the essence of steganography. The message is not made unreadable. The existence of the message is made invisible. Look how cute my cat is.

But There Is a Catch

If Alice and Bob are already on the list, they are already being watched. Communications intercepted and analyzed. And there are powerful tools for that.

The problem with steganography is that once someone knows or even just suspects that an image contains more than image data, it can be checked.

Attack 1: Statistical analysis

Natural images are not random. The color values of neighboring pixels are correlated, textures follow patterns, the distribution of bits obeys statistical laws that nature provides. When someone overwrites thousands of LSBs with message bits, this changes that distribution, subtly, but measurably by a machine.

A chi-squared test sometimes suffices: if the distribution of the least significant bits is too uniform, too random, then something likely is not right. Natural images do not look like that. Tools like zsteg or StegExpose run exactly these tests automatically, in seconds, across thousands of images simultaneously.

The three-letter agency does not need to know what is inside Mimimi. It is enough to know that something is inside Mimimi.

Attack 2: Knowing the tool means knowing how to reverse it

Most people who use steganography use standard tools. There is Steghide, OpenStego, DeepSound. These are good tools. But they are public, their code is known, and they leave characteristic patterns in files. Specific headers, certain padding structures, typical byte sequences.

Steganalysis frameworks have databases of these fingerprints. It is like someone running their home router on the documented default admin password. Anyone who knows the manufacturer and the documentation has full access in no time.

A few lines of code:

from PIL import Image

img = Image.open("mimimi.png")
bits = []
for pixel in img.getdata():
    for channel in pixel[:3]:
        bits.append(channel & 1)  # extract last bit
# reassemble bits, read message

Done. No effort. No supercomputer. No drama.

So What Now?

The only robust answer is to combine steganography with cryptography, and to avoid standard tools. Encrypt the message first, then hide it. Analysis might still reveal that the image of sweet Mimimi is not a normal cat photo, but without a fingerprint in the database it becomes much harder to get to the payload, and even if it can be extracted, what is inside is still encrypted and secret.

May I introduce you to Stegofile-Concealer. A standalone browser tool, private, offline-capable, zero dependencies.

How Stegofile-Concealer works

Alice uploads a PNG image. She types her message, or selects a file she wants to hide. She enters a PIN and a password. That is it.

Why is a PIN mandatory? This is the first line of defense, and one that is not immediately obvious. The PIN is not stored in the image. Instead, Stegofile-Concealer computes a SHA-256 hash of the PIN and takes the first four bytes as a magic sequence, a kind of fingerprint or identifier that sits at the very beginning of the embedded data. When extracting, the tool checks: do these four bytes match the expected value for this PIN? If not, no data found. Done.

This has an elegant consequence: plausible deniability. If Alice sends the image to Bob and someone forces Alice to demonstrate the extraction, she simply enters the wrong PIN. The tool honestly responds: no data found. No cat photo in the world can prove otherwise. Technically speaking, it is even true. For this PIN there really is nothing inside.

Optional encryption comes with a password: the message is encrypted with AES-GCM-256 before being embedded. The key is derived via PBKDF2 from PIN and password, 100,000 iterations, no brute-force fun. Even if someone knows that something is in the image and extraction succeeds: without PIN and password they read noise.

PNG only. JPEG is lossy. Compression changes pixel values when saving, and with them the embedded bits are gone. PNG is lossless. The image that comes out looks pixel-perfect like the original. Byte for byte, bit for bit.

Capacity. Each pixel has three color channels (red, green, blue) and one bit fits into each. For a typical 1920x1080 image that is around 777 KB of hideable data. A photo from the last party, and inside it fits a complete document.

What Stegofile-Concealer protects (and what not)

Honesty first.

Stegofile-Concealer does not do adaptive embedding. It distributes bits evenly across all pixels, from top left to bottom right. That means a skilled steganalyst with the right tools can statistically detect that something is hidden in the image. Anyone running highly sensitive communications and assuming their images are actively being analyzed for hidden content needs more than Stegofile-Concealer.

But for everything else:

The PIN-based magic bytes mean: no standard fingerprint that steganalysis databases know. No "tool recognized, known method, extraction trivial". Attack 2 does not apply.

The AES-GCM encryption means: even successful extraction without PIN and password yields meaningless noise. The trivial Python extraction delivers garbage.

The plausible deniability means: wrong PIN, no data. The tool does not lie. For that PIN that is true.

Alice sends Bob a cat photo. Mimimi. Inside, with the right PIN and optional password, is the actual message. Without both: a cat photo.

Cat and mouse. As always. But this time with a bit more cat on the right side.

Peace out Alexander