PGD Home

P-159: Steganographic Obfuscator

by on Apr.12, 2015, under Concepts, Software and Games

I wasn’t sure what to name this project for a while, I eventually settled on “Steganographic Obfuscator”, even though it is slightly redundant. This is a very quick concept test of an idea I had recently.

I wanted to create a program capable of hiding a message within a message, purely using text. I didn’t want to use manipulation of digital images, or any kind of bitwise operations, I wanted the text generated by the program to be usable without a computer, ie, it should be possible to write down the original message and send it in a letter, and still be able to recover the hidden message from it.

This idea developed from an idea I had to use some kind of encryption algorithm with two separate keys, each one  providing a different, but still readable, text output.

The way P159 works is very simple, and as such, relies on “security through obscurity”. It would not stand up to a concerted attempt to recover the original message if the attacker knew that a message was present.

P159 requires two inputs: a plaintext message, to be used as a “cover” for the hidden message, and the hidden message itself. Like in most similiar algorithms, the plaintext message must be longer than the hidden message.

P159 will iterate through each character in the hidden message and the plain text message at the same time, searching for a “match”, a place where the same letter appears in both text strings. These can be in no particular order, and in fact, later version of the program will begin the search in random locations to increase obfuscation. The program will then store the position in the plaintext string where the match occurred, and move on to the next character in the hidden message.

Eventually, all character in the hidden message will have been “merged” with the original message, and an integer value will be stored for each one, corresponding to its location in the plaintext string, for example:

Plain text:

T h i s  i  s a  t   e  s   t

1 2 3 4  5 6 7 8 9 10 11
Hidden text:


The letters “A” and “T” occur at positions 7 and 1 in the plain text string. This is the integer string.

So now, I have an integer string corresponding to the message, but, if I simply put that at the end of the plain text message, people will very easily figure out what the hidden message is.

What happens next is a little unique.

In computer, random number generators are not truly random, they are “pseudo” random. This means that the string of numbers that they output can be reproduced if the initial “seed” value is known. What I do in P159 is I work backwards. Instead of using a seed to generate random numbers, I use the string if random integers corresponding to the hidden message as input, and I get a seed back from the random number generator which will produce that same string of ints every time it is input to the random function.

This requires “cracking” the random number generator. Thankfully, this appears to be very easy to do, (Many random number generators, including, I believe, the one used in C++, are what are known as “Linear Congruential Generators” and are very easy to crack”).

This leaves me with the whole message essentially encoded in one little int, which I can conceal in the plain text message relatively easily, such as in a date, or a time, or some other subtle way.

This project is not yet completed, but initial concept tests look very promising.





Comments are closed.

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!