The idea of steganography is to hide messages within other information so that no one notices your communications. The word itself comes from a Latin-Greek combination meaning “covered writing”, from earlier physical methods that apparently included tattooing a message on a messenger’s head before letting him grow his hair back to hide it. In the case of digital steganography, it is all done in the math...The technique is explained in detail at the link, and is way over my head, but some of you may understand it.
Amazingly, it is possible to hide another, larger, full-color picture within this image and get it back again with about a dozen lines of Mathematica code. The key to the whole process is to use the least significant bit in each color channel of each pixel as a place to hide information...
In a sufficiently complex image, the human eye doesn’t see the loss of information. The fact that one color channel on a particular pixel might or might not be darker by 1/256 than before cannot be noticed…
09 July 2010
Secret information is encoded in this photo via steganography
It looks like an innocent photo of a chicken that might be emailed by anyone to anyone, or posted on a website with some banal commentary. In fact, this photo has a message encoded it in. I have heard of such processes before; the Wolfram Blog explains how the effect is achieved:
It's actually very simple, and fascinating.
ReplyDeleteAny 24-bit image has 8 bits each of red, blue and green per pixel, allowing values of 0-255 for each color of each pixel.
In the technique explained, the author removes the least significant bit of each color from the image (so you have 7 bits of each color instead of 8) No one can really see any difference in the two images. I played around in my image editor and discovered I could remove the first 2 bits (leaving 6 for each color) and still not see a difference.
Those extra bits add up quickly in an image (3 bits per pixel in an 800x600 image = 180k bytes of information). You just need a program to encode your file of any type into those lower bits, and another to extract those bits and reassemble them.
For fun I did a test using my paint program and a carrier image and an image I wanted to encode. It worked beautifully, and was undetectable. So cool!
Of course, I have no practical use at all for the information :)