What is the most used Algorithm/Technique in Steganography? I made some research about the algorithm/technique and I think Least Significat Bit(LSB) is the most used algorithm, is there any more efficient algorithm/technique that can be use for Steganography aside from LSB?
-
2$\begingroup$ The be truly on-topic here, I think steganography must be per Kerchoffs's principle; that is, there must be a public algorithm with a secret key involved (at least on the decoding end) allowing to determine if there is steganographically encoded data, and decipher it. There are a few techniques for this, using still image, video, sound, even code..., in various formats, as the carrying medium; and making it seriously hard to demonstrate without the key that any content is embedded. I hope someone will have time to give pointers. $\endgroup$– fgrieu ♦Commented Feb 22, 2013 at 17:49
-
$\begingroup$ Some of the steganography schemes listed at crypto.stackexchange.com/questions/6058/… are more efficient, in the sense of requiring a smaller file to send the same number of ciphertext bits. $\endgroup$– David CaryCommented Feb 23, 2013 at 11:05
2 Answers
I'm assuming you're referring only to static image manipulation, as that's the common fear these days (terrorists are hiding data in eBay images!) But it's a mistake to think that images are the only potential carriers of hidden data. Data can hide wherever information moves, including audio files, DNS requests, TCP port knocking, error codes, URLs, Unicode, spam, anywhere.
LSB is often used in stego demonstrations because it's a simple and understandable example of the idea, but it has a lot of weaknesses that make it less than perfect for real world use. For one thing, it works directly on bitmaps, but not compressed images. If the message is short and modifies only the first half of the picture, the top of the image will have a "static" appearance that magically cleans up in the bottom half. Also, BMPs may themselves be suspicious, as most people use compressed formats such as JPG or PNG.
Using LSB on an ordinary GIF would give you crazy incorrect colors, but you could use a modified palette with 128 duplicated colors to hide the data invisibly.
Both of these are easy experiments to perform and demonstrate to an audience. You can show them a before and after picture. You can show them a photo of a clear blue sky over the ocean, then mar the top third with an LSB stego message. Then show them how a photo of a forest of autumn leaves or a field of wheat makes the effects of LSB stego almost invisible. Show them how LSB messes with GIF images, then show them a reduced palette image followed by the same image with an LSB stego message.
Messing with JPEG and TIFF formats is technically much more difficult, but in the real world would probably do a better job of remaining hidden. But they're still detectable to someone looking for them. Each camera and image manipulation software package uses a custom "quantization table" that says how a block of pixels will be encoded. Canon's are distinct from Nikon's. Both are distinct from Adobe's, GIMP's, ImageMagick's, etc. If your image has some quantized blocks that match those from Canon, but others that aren't recognizable, an eavesdropper might determine it was tampered with. For a start to more information, see http://www.imagemagick.org/Usage/quantize/
A long time ago, the program OutGuess did a good job at spotting steganographically altered images encoded in many different image formats, but as far as I know the author never released the source.
-
1$\begingroup$ You're right in saying that lossy formats like JPG are not suitable, but PNG is actually a (typically) lossless bitmap format, ideal for steganography - and it's used very commonly on the internet - unlikely to draw attention. The 'static' you refer to would not appear if you're only modifying the LSB. Modifying even the 2nd or 3rd least significant bits would only result in a difference that is difficult to discern with the human eye (depending on the image). Also, it's common to space out encoded information uniformly across an image, so as to be less conspicuous. $\endgroup$– hunterCommented Feb 26, 2013 at 0:41
-
$\begingroup$ @hunter, I've seen data LSB stegoed into lossless (bitmap) images, and visibility depends entirely on the subject of the picture. The example I gave above of a clear blue sky was of a real example, and the artifacts in it were painfully visible. If you're going to try it, you'll have to figure out which bytes should have LSBs modified. Even then, a picture with LSB modifications has a different statistical profile than an un-stegoed picture, and they are detectable. $\endgroup$ Commented Mar 4, 2013 at 16:00
-
$\begingroup$ Of course, there are lots variables, and results are subjective to the image. However, I've created my own steganographic app and modifying the LSB does not result in a discernable change to the image, even on flat-color such as a blue sky. Assume each pixel contains 3 color values, R, G and B. Each value is between 0 and 255. Modifying the LSB might (assuming the value you're encoding is 1 or 0) result in a change of 1. You're not going to notice a change of 1/255, especially when it's only in 1 of the 3 color channels. Of course, I'm talking about visual inspection, not computational. $\endgroup$– hunterCommented Mar 4, 2013 at 16:44
Your question is really too general - and perhaps off-topic, as steganography is quite a different field to cryptography.
That being said, the answer to your question really depends on many things. Steganography is the art of hiding information in plain-sight. This information could be hidden in either; analogue or digital media, on the internet or in a newspaper, text or photos (or many other file-types like audio or video files, to name a few).
Information can be encoded into the pixels of an image, hidden in the metadata of a file, published in the classified-announcements section of a newspaper, etc.
You're asking about efficient techniques, but efficiency is relative to requirements. What are you trying to achieve? How much data are you trying to hide? In what medium? Might the people you're hiding information from know your protocols?
Encoding information in the least significant bit of pixel data is a common approach, yes, but keep in mind that Steganography works because it's esoteric. It provides (perceived) security because the information being hidden is not apparent to the majority of people who see it. Using the most common techniques might result in the easy discovery of your protocol. Unlike cryptography, you don't really have to play by the rules when using steganography, so you should get creative and experiment with your own protocols.
One alternative to LSB is to encode a hex encoded message into the alpha channel of a PNG image. Assuming the alpha value of all pixels in a png file is 255 (fully opaque), offsetting this constant value by a value between 0 and 16 (possible values in hex encoding) would not be perceivable by the human eye, but is a clean and deterministic approach to hiding data.
-
2$\begingroup$ There's also a lot more to steganography, including: it needs to be resistant to statistical analysis on the carrier (your alpha value scheme would instantly fail here), and it needs to be resistant to transformations, meaning the payload should be able to be preserved to some extent if the image ends up compressed, resized, or otherwise altered on a reasonable scale (probably via redundancy). But it depends how much secrecy you really need. Ultimately, given enough samples and a specific carrier distribution, any steganographic scheme can be detected, you want to make it very hard to do so. $\endgroup$– ThomasCommented Jul 30, 2013 at 12:11