Icicles hanging from tree branches in Winter

Using Steganography (with steghide) to Embed a Copyright Notice in Multimedia Files

As my regular readers will know, I've been having some trouble with minting and sharing NFT versions of my digital artwork (in both audio and visual form). I decided that I would go the traditional/Web2 route of publishing it (through BMC and Patreon). However, that raised the issue of being able to claim and prove intellectual property and/or ownership rights on it if it makes the rounds on the Internet. That was a bit of a poser for me, particularly since I don't want to put watermarks on the originals I intend to sell. I looked into digitally signing the files, but came to the conclusion that that would have the same results as adding watermarks, so that's no good as an approach. Steganography is clearly the way to go here, so I went looking for tools.

I'm familiar with steghide on *NIX systems, but wasn't sure if I could also use it on Windows. Fortunately, I can. That's just as well, since I initially downloaded rSteg (because of the goal of coping with scaling/down-sampling) from GitHub. Unfortunately, the released *.jar file would not locate and use the required argparse4j library, so I compiled it from source. That at least gave me usage text when supplied incorrect or no arguments. However, it doesn't support PNG images, so is no good to me. Even when I did supply a PNG, it gave me an ArrayIndexOutOfBounds error and stack trace, which didn't go away when I reduced the size of the image. I haven't got time to debug someone else's code; I need something that "just works".

On to steghide, then. I downloaded it from Sourceforge, followed the usage instructions in the "quick start" guide and viola, one text file embedded in an image. Fortunately, steghide seems to support embedding any file type within another, so that should serve my purposes. (I've yet to test it with audio content or how well it copes if I resize/down-sample the image, though). One of the cool things about it is that it requires a password for encryption, so even if somebody knows you've used steghide to hide sensitive information in a particular file, they won't be able to extract that without knowing the password you used (and it doesn't display it in the CLI interface).

Screenshot of steghide usage Screenshot of steghide usage on Windows

"This multimedia content is the intellectual property of the artist known as Great White Snark (AKA Jizzy Rascal), whom reserves the right to be identified as its creator, originator and copyright holder in perpetuity until death. Any altering of this content (other than compression/downsampling/scaling) is strictly prohibited!"

Having done a quick visual comparison of the files, the only apparent difference is that the file with the hidden message occupies slightly less space on my HD than the original. Presumably, it uses greater compression and/or is of slightly lower quality than the original, but that's probably only noticeable under high magnification. (You can have a look for yourself, at the below image, titled "Test Icicles"for the LoLs. It clearly has no watermark on it, yet has the copyright notice embedded in it. I've not yet downloaded it from this post and seen if I can still extract the copyright notice file from it.)

Icicles hanging from tree branches in Winter Test Icicles

Right, having done that, I'm finally ready to begin embedding the copyright notice and putting my digital art up for sale on Patreon and BMC. That's probably going to take me some time (on the scale of weeks to months), since there is a lot of it. It's probably not a bad idea to even embed the notice in such content that one does intend to turn in to NFTs, just to be on the safe side.

Thumbnail image: Test image generated by AI and containing the hidden and encrypted copyright notice.

How do you rate this article?


Great White Snark
Great White Snark

I'm currently seeking fixed employment as a S/W & Web developer (C# & ASP .NET MVC, PHP 8+, Python 3), hoping to stash the farmed fiat and go full Crypto, quit the 07:30-18:00 grind. Unsigned music producer; snarky; white; balding; smashes Patriarchy.

Return to the Source
Return to the Source

Use the Force; read the source! This blog is mostly a collection of study notes on ASM, ASP .NET, Blender, BASIC, C/C++, C#, ChucK, Computer Architecture, Computer Literacy, CSS, Digital Logic, Electronics, F#, GIMP, GTK+, Haskel, Java, Julia, JavaScript (ES6+) & JSON, LISP, Nim, OOP, Photoshop, PLAD, Python, Qt, Ruby, Scheme, SQL (MySQL & SQLite), Super Collider, UML, Verilog, VHDL, WASM, XML. If I can learn it and make notes on it, I'll write about it. || Blog images copyright Markus Spiske and Pixabay

Send a $0.01 microtip in crypto to the author, and earn yourself as you read!

20% to author / 80% to me.
We pay the tips from our rewards pool.