# Would this image steganography technique be effective at avoiding detection?

I've observed that when you view only the LSB of an image it is typically random looking, but often has areas that correlate with the over all structure of the image. It's common for there to be large sections of the image that are solid 1s or 0s. There are often blocky patterns. Complete randomness of the LSB would therefor be a potential indicator that steganography is present.

I am considering a simple block based technique. Consider a grayscale image. Divide the image into 2x2 pixel blocks, LSB only. There are 16 possible permutations, which are grouped into sets of twos. Blocks that match the first set (four white pixels, or four black pixels) are ignored. Blocks that match the other seven sets will encode our ciphertext. One of two possible patterns is chosen based on the bit of the ciphertext we are storing. Optionally, we may look at neighboring blocks (up, down, left, right) and if they are of the four solid pixel variety then we also ignore this block. For color images you could do this separately for each color channel.

This would essentially only store bits of ciphertext in parts of the image that appear random. Every block that stores a bit of ciphertext is only ever replaced with a block that is a flipped version of itself, so the number of 1s and 0s always remains the same.

Can someone more mathematically inclined and familiar with steganography weigh in on how effective this approach might be?

On the one hand, I think that this could be considered a first step into the direction of adaptive steganography, because you do not use some blocks that you think that are easy to detect. In adaptive steganography we modify only the pixels of the image that are more difficult to model statistically and, consequently make the detection harder.

On the other hand, you use a $$2\times 2$$ block for hiding one bit so you are reducing the capacity. And for doing this, in some cases you need to make two changes! Two changes for hiding a bit is far from being optimal.

Currently steganography is much more advanced than this. You have cost functions that tell you which are appropriate zones of the image to hide information (the state of the art in spatial domain is the HILL [1] cost function), and matrix embedding techniques [4] that allows you to hide a lot of information modifying very few pixels. There is also a field that deals with Wet Paper Codes[2, 3], that makes possible reading a message without knowing which pixels have been modified. This gives you a lot of flexibility for building systems where you don't want to modify some kind of pixels.

[1]. A new cost function for spatial image steganography. Bin Li; Ming Wang; Jiwu Huang; Xiaolong Li. 2014 IEEE International Conference on Image Processing (ICIP), Paris, 2014, pp. 4206-4210. https://projet.liris.cnrs.fr/imagine/pub/proceedings/ICIP-2014/Papers/1569891955.pdf

[2]. Writing on Wet Paper, J. Fridrich, M. Goljan, P. Lisonek, and D. Soukal, IEEE Trans. on Sig. Proc., Special Issue on Media Security, Eds. T. Kalker and P. Moulin, vol. 53, pp. 3923-3935, October 2005. http://www.ws.binghamton.edu/fridrich/Research/WPC_TransactionsJournal1.pdf

[3]. Minimizing Embedding Impact in Steganography Using Trellis-Coded Quantization, J. Fridrich, T. Filler and J. Judas, Proc. SPIE, Electronic Imaging, Media Forensics and Security XII, San Jose, CA, January 17–21, pp. 05-01 - 05-14, 2010. http://www.ws.binghamton.edu/fridrich/Research/tcq_v3.pdf

[4]. Steganography in Digital Media (Principles, Algorithms, and Applications). Cambridge University Press. 2009. ISBN: 9781139192903.