2 ms·
This is different to the other stego programs out there in that it allows the user to choose how many LSB (Least significant bits) they want to use. This is imp
by VenomSwitch 6y ago
This is different to the other stego programs out there in that it allows the user to choose how many LSB (Least significant bits) they want to use. This is important because if you use 4LSB an image can store more data but it is more obvious in the output, with 1LSB it is less obvious but you can store 1/4 as much data. My program also allows you to input text OR image into a cover image. If you are unfamiliar with steganography - I have tried to explain it simply on the github readme. ANY feedback on the program or the repo would be greatly appreciated!
-J
- lun4r 6y agoI made one years ago (https://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=28747&lngWId=1 https://www.planet-source-code.com/vb/scripts/ShowCode.asp?t...). Had a quick look at your code and I could be mistaken, but it looks like you modify the pixels from top left to bottom right. You can make it harder to detect by selecting the pixels pseudorandomly, seeding your prng with the encryption key.
- VenomSwitch 6y agoAh nice, I'll check it out! Yeah, at the minute they're from left to right but I've been doing some research into a graph-theoretic approach which looks pretty interesting.
- auxym 6y agoIf the hidden data is encrypted anyways, then wouldn't it be indistinguishable from truely random data? What would then be the point of distributing it randomly or in order?
- deleted 6y ago[deleted]
- jstanley 6y agoIf the cover image is a solid block of colour, you can detect the presence of the steganography by noting that the first N pixels vary slightly, and the rest are solid. Similarly, if you have a clean reference of the source image, you could observe that the first N pixels are modified and the rest are not, and conclude that something is hidden in them. If the pixels are selected at random, this analysis is less conclusive. Ideally you'd hide a random value in every pixel so that all pixels are manipulated equally.
- betterunix2 6y agoActually, the thermal noise of a camera is biased so a uniform random distribution of low-order bits will be easy to detect. You need to preserve as much of the thermal noise as possible and try to choose pixels from high frequency regions of the image (where the thermal noise is harder to separate from the image itself).
- berdon 6y agoSo maybe the best approach would be to use a filter/transformation to exclude hard-lined regions (edges) and only embed data within variations/gradations?
- betterunix2 6y agoOther way around: edges are a good place to try to hide stegotext because of the high frequency components (the edge effect, which is also why JPEG artifacts are worse along sharp edges).
- betterunix2 6y agoModern steganography does more than just use the LSBs of the image. For example, the watermarks used for SDMI (audio, not image data, but same logic applies) used techniques from communications systems like spread spectrum carriers (similar to what you might see with a digital radio system). For images you can also try to place the stegotext along edges and other high-frequency regions where there is more "noise" available to hide what you are doing. If you need to maintain secrecy, you can combine steganography with cryptography e.g. use a PRNG to select carrier frequencies (IANAL but you probably should beware of ITAR issues if you distribute such a thing). You should also give thought to how robust you want the stegosystem to be to image filtering, downsampling, etc. The MPAA uses watermarks on movies to determine which theaters are the source of camrips, and those watermarks have to be as robust as possible (they must survive both the camera's inherent reduction in quality and possible transcoding/editing by the pirates). Not all stegosystems need to be robust, for example SDMI used one robust and one weak in an effort to identify downsampled copies of the audio (the RIAA assumed that downloaded music would always be significantly downsampled).