I first saw this implementation from a Harvard paper back when LLM's were still just a novelty[0]. Glad to see they got their demo site back up. Always thought it was a cool idea.
I wish I'd heard about it when it was first published, it is super cool! Especially the timeline, given that it predates things like ts_zip/LLMZip (which is why I figured someone had already worked on something in the area), while being fundamentally the same mechanism. Makes sense why compression ended up being a more compelling use case though.
It's as much of an art project as it is a programming project. The images that it generates are visual representations of binary code translated from the text you enter. If you enable encryption it converts it to a hash. You can download the image, send to someone along with the password and they'll be able to decrypt it by uploading it to the app. Or you can post it to the time line and send them the link. All messages are truly private. No raw text text is sent to the server.
It's not vibe coded, I made it with typescript React. The app has a link to the github repo if you want to look under the hood.
The "as much of an art project, as an applied cryptography exercise" take resonates a lot!
Just earlier this week I've released https://github.com/kirushik/paternoster (and even won Berlin Hack and Tell with it) — and it totally came from the idea "in that state-enforced Max messenger there so much surveillance you can only praise the authorities and pray in there. What if there was a way to hide messages into the text of Church Slavonic prayers?"
I've even added TTS (where supported) to it, just for the giggles of getting the "TRUMP" dictionary thorough it.
It's still a pretty solid X25519+AES-GCM encrypted messaging design under the hood, and I'm happy with it — but it still a bit of an afterthough tbh...
The justice system claims to be anti-axe murderer, yet axes were involved in the construction of nearly every courthouse in the nation! How can this be?
for anyone who wants to try a consumer grade stegongraphy in browser. I built some thing here. Its free and loads a static page with a wasm binary. Once the page loads everything is handled in the browser.
You provide a carrier file (currently .mp4, .pdf, .jpeg or .png ) and impregnate it with an entire encrypted file system with a full viewer and gallery mode. Also supports streaming, so you can actually encrypt a a full blueray movie and run range requests.
Does this actually embed the data using stenography, or does it just append it (encrypted) to an area of the file that the carrier format doesn't care about? The advantage of stenography is that it should be difficult for a middleman to know that there even is any data embedded.
I wonder if you can construct a function between the encoder and decoder such that for any given input, both the raw and manipulated embeddings decode to plausible meanings that are guaranteed to be different.
Some days I wonder if the most effective way to hide a message at this point in history is to simply write it out, as clearly as possible, in plain English. For some reason, many people have trouble reading (or even detecting) this.
Damn. Should have written this up and posted it two days ago; it would have made a great April Fools gag.
Ha! I've been thinking of this exact thing, and was curious how natural-looking the end result would be / how much you could compress the tokens by choosing less and less likely ones until it became obvious gibberish. I'm kinda surprised that it just sounds like normal slop at that density. Seems viable to use with "just" two bots chattering away at each other, and also occasionally sending meaningful packets.
In principle the output is arbitrarily natural-looking. The arithmetic coding procedure effectively turns your secret message into a stream of bits that is statistically indistinguishable from random, the same as you pull out of your PRNG in normal generation.
Yes, with a few gotchas, especially related to end handling. If the government extracts the hidden bits from possibly stego-streams, and half of the ones theyv encounter give an "unexpected end of input" error, but yours never give that error, they will know that your hidden bit streams likely contain some message.
You can avoid it by using a bijective arithmetic encoder, which by definition never encounters an "unexpected end of stream error", and any bit string decodes to a different message. That's the cool way.
The boring practical way is to just encrypt your bits.
> offending the kind of person that seems to always be complaining about other people being offended.
I sort of resemble this remark, but to be fair, I'm only mildly offended by people who claim they're scandalously offended on behalf of others who... themselves aren't particularly bothered at all.
Pro-tip from unfrozen caveman lawyer: "Your honor. My client want hide thing from t-rex lang mo-del. He have big brain. So he not put thing on Al Gore device with series of tubes. (Unlike many on modern-day BBS called Haxer News.) T-rex not eat what t-rex not find."
I first saw this implementation from a Harvard paper back when LLM's were still just a novelty[0]. Glad to see they got their demo site back up. Always thought it was a cool idea.
[0] https://github.com/harvardnlp/NeuralSteganography
I wish I'd heard about it when it was first published, it is super cool! Especially the timeline, given that it predates things like ts_zip/LLMZip (which is why I figured someone had already worked on something in the area), while being fundamentally the same mechanism. Makes sense why compression ended up being a more compelling use case though.
I built a steganography app that embeds encrypted messages into images.
It lives here: https://stegg.alifeinbinary.com
It's as much of an art project as it is a programming project. The images that it generates are visual representations of binary code translated from the text you enter. If you enable encryption it converts it to a hash. You can download the image, send to someone along with the password and they'll be able to decrypt it by uploading it to the app. Or you can post it to the time line and send them the link. All messages are truly private. No raw text text is sent to the server.
It's not vibe coded, I made it with typescript React. The app has a link to the github repo if you want to look under the hood.
Steganography is (hopefully invisibly) hiding information in an image, not creating an image that so obviously encodes information.
The "as much of an art project, as an applied cryptography exercise" take resonates a lot!
Just earlier this week I've released https://github.com/kirushik/paternoster (and even won Berlin Hack and Tell with it) — and it totally came from the idea "in that state-enforced Max messenger there so much surveillance you can only praise the authorities and pray in there. What if there was a way to hide messages into the text of Church Slavonic prayers?"
I've even added TTS (where supported) to it, just for the giggles of getting the "TRUMP" dictionary thorough it.
It's still a pretty solid X25519+AES-GCM encrypted messaging design under the hood, and I'm happy with it — but it still a bit of an afterthough tbh...
Even as someone extremely firmly on the other side of the AI debate, I must appreciate the craft.
Now, to give Claude the steganogravy skill...
Maybe call it steakanography so it stands out from mere steganogravy.
I always mispell it stenography by accident, just commenting so I can find this awesome post in search later when I inevitably type it wrong!
OMFG the cognitive dissonance necessary to vibe code a project with the stated goal of preventing AI scrapers. What has happened to your brain.
I believe you may have missed my initial note at the top (you are correct in that it is nonsense).
The concern for my brain is valid though, my thoughts and dreams now only materialize as Markdown task lists.
The justice system claims to be anti-axe murderer, yet axes were involved in the construction of nearly every courthouse in the nation! How can this be?
> author's note
> the following justification is nonsense, i just thought the idea of encoding data in recipe blogs was fun and silly.
> What has happened to your brain
presumably TDS based on the secret message
What's TDS?
for anyone who wants to try a consumer grade stegongraphy in browser. I built some thing here. Its free and loads a static page with a wasm binary. Once the page loads everything is handled in the browser.
You provide a carrier file (currently .mp4, .pdf, .jpeg or .png ) and impregnate it with an entire encrypted file system with a full viewer and gallery mode. Also supports streaming, so you can actually encrypt a a full blueray movie and run range requests.
https://hidefile.app
Does this actually embed the data using stenography, or does it just append it (encrypted) to an area of the file that the carrier format doesn't care about? The advantage of stenography is that it should be difficult for a middleman to know that there even is any data embedded.
You can save the resulting carrier file and open it any default file viewer of your OS. including ios, macos, windows etc.
Regarding being detected, like anything else in security it is always a cat and mouse game.
I wonder if you can construct a function between the encoder and decoder such that for any given input, both the raw and manipulated embeddings decode to plausible meanings that are guaranteed to be different.
Great way to hide your alchemical texts.
Really enjoyed the design/theme of this site!
Thank you very much for saying that, it's taken me many iterations to create something I generally assumed few others than me would ever enjoy haha.
Some days I wonder if the most effective way to hide a message at this point in history is to simply write it out, as clearly as possible, in plain English. For some reason, many people have trouble reading (or even detecting) this.
Damn. Should have written this up and posted it two days ago; it would have made a great April Fools gag.
Ha! I've been thinking of this exact thing, and was curious how natural-looking the end result would be / how much you could compress the tokens by choosing less and less likely ones until it became obvious gibberish. I'm kinda surprised that it just sounds like normal slop at that density. Seems viable to use with "just" two bots chattering away at each other, and also occasionally sending meaningful packets.
In principle the output is arbitrarily natural-looking. The arithmetic coding procedure effectively turns your secret message into a stream of bits that is statistically indistinguishable from random, the same as you pull out of your PRNG in normal generation.
Yes, with a few gotchas, especially related to end handling. If the government extracts the hidden bits from possibly stego-streams, and half of the ones theyv encounter give an "unexpected end of input" error, but yours never give that error, they will know that your hidden bit streams likely contain some message.
You can avoid it by using a bijective arithmetic encoder, which by definition never encounters an "unexpected end of stream error", and any bit string decodes to a different message. That's the cool way.
The boring practical way is to just encrypt your bits.
> offending the kind of person that seems to always be complaining about other people being offended.
I sort of resemble this remark, but to be fair, I'm only mildly offended by people who claim they're scandalously offended on behalf of others who... themselves aren't particularly bothered at all.
Pro-tip from unfrozen caveman lawyer: "Your honor. My client want hide thing from t-rex lang mo-del. He have big brain. So he not put thing on Al Gore device with series of tubes. (Unlike many on modern-day BBS called Haxer News.) T-rex not eat what t-rex not find."
Ah! Finally I get it! Trump is talking steganography!
now to decode the blog post’s hidden message