5 ms·
One interesting idea: make a png compressor that doesn't change the image at all; instead, it encodes the torrent's data in the decisions made by the DEFLATE co
by DarkShikari 17y ago
One interesting idea: make a png compressor that doesn't change the image at all; instead, it encodes the torrent's data in the decisions made by the DEFLATE compressor, so a stenographic image merely looks like it was encoded with a slightly suboptimal DEFLATE implementation.
Simple example: you're coding a match against a previous block and can choose one of two previous blocks to match against. If the bit of the torrent file to be encoded is "0", you use the closer of the two blocks, if it's "1" you use the farther.
All you have to do decoder-side to emulate this is to decode the whole PNG, then go "encode" it again and see what decisions were made in the original PNG file and one by one decode the bits to an output torrent file.
You'd probably need a pretty big PNG file (at least a few hundred kilobytes, if not a meg).
- gizmo 17y agoI think a better solution is to adjust the color slightly. You can easily get 3 or 4 bits of encoded data for every pixel in the image. Just take the least significant bit of the red, green and blue colors. You go from 16.7 million to 2 million colors, but that shouldn't be a problem. The human eye cannot see the difference anyway. Only in perfect gradients that kind of difference can maybe be noticed, so then the solution is to pick grainy pictures. Photos (especially of poorly lit environments) should be perfect. They're very grainy by nature, so it will be especially difficult to trace where the data resides. Because you can hide so much data in the image, you can get very creative with where and how you do the encoding.
- stcredzero 17y agoHow about a filter that takes ordinary images, but turns them into low-light photos? Or just turns them into grainy photos? The grain can then be shifted around for purposes of the encoding.
- GavinB 17y agoI was actually thinking about this last night as a means of hiding text or pictures. I would just round each pixel's R, G, and B values off to either even or odd. Even stands for 0, odd for 1. That gives you three bits per pixel and hopefully would be very hard to detect visually with, for example, a nature photograph. Then you just encode another image in 8-tone grayscale at the same size. That's what I was after, I haven't done the calculation for how large an image you'd need to encode real files.
- fauigerzigerk 17y agoSo it will be difficult to detect visually, but isn't this rather trivial to find algorithmically? Not that I know much about cryptoanalysis, but it seems to me that this is a very weak form of steganography.
- khafra 17y agoIt's reasonably hard to detect if just the least significant bit is random, but if you do the last three significant bits you don't even need an algorithm--you can see the jagged, broken histogram.
- torressr3 17y agoYeah but you still would need the original picture to compare with.
- sp332 17y agoSpore actually does this with the PNG files from the "Sporepedia". You can actually import an image of the creature you want from the Sporepedia webpage and the playable 3D creature will appear in the game! http://news.ycombinator.com/item?id=703719 http://news.ycombinator.com/item?id=703719