# Is a steganographic technique which has a universal decoder novel/secure? [closed]

I've come up with an approach to steganography which needs review of both its cryptography and its math. There's a complete working implementation at https://github.com/bramcohen/DissidentX and the explanation below is taken from the documentation files, which contain much more detail, but this covers the core idea.

This scheme is divided into three layers, which go together like this:

encode(pack(encrypt()))

The most novel part is the encode layer. It takes a key, plaintext with possible alternates, and value to encode. Intuitively, if the key and plaintext are used as the keys to a stream cipher, then it will probably be possible to make the output of that stream cipher begin with a desired value if the number of alternates is more than the number of bits in the value. Unfortunately that would require time exponential on the number of bits to find the encoding. This scheme uses a very specifically designed stream cipher which makes it possible to compute which alternates to use to get the desired value in a polynomial amount of time. Specifically, it uses each contiguous section of sixteen bytes for a stream cipher (AES in OFB mode) and xors the outputs together, and makes sure that alternates have at least fifteen fixed bytes between them. The result is that flipping an alternate always xors the output by a specific value, independently from flipping other alternates, so it's possible to calculate which alternates are needed by row reduction.

There's lots more details in the documentation, not inlined here due to sheer volume.

The specific use case this is intended for is as follows. My question is, is it possible to attack this protocol under these circumstances, either by making fake messages, or by reading messages an attacker doesn't have the key to?

The primary use case for DissidentX is encoding messages in files on the web. There should be a utility which scans all objects the user's web browser downloads (html files, images, css files, etc.) for messages using all of the keys the user has entered. Someone sending messages to that person provides a web service where users who have widely viewed web sites can upload their files and get back slightly modified version with messages steganographically added. The web users should not be able to read what the messages are, and it should be possible for the service doing the encoding to not have to keep messages in plaintext.

-
I'm just still not quite sure what the steganographic aspect of the idea is. You can hide messages in an encrypted data stream, it's not very hard - the difficulty is doing it in plain sight without being detected (for instance in a scenario where a proxy may reject anything he doesn't understand, so no encryption allowed). I'm probably just misunderstanding the concept, could you elaborate a bit more? – Thomas Jan 15 at 3:08
Ok. You may want to review your Explanation.txt file where the terms plaintext and ciphertext are also used, possibly in a confusing way. Aside from the terminology, I feel like there are still quite a few details missing. You mention a "custom stream cipher" but only give a very broad description. You describe the three layers as "encode(pack(encrypt())))" , but give only the coarsest description of each (even in the Description.txt), e.g. the arguments to encrypt aren't specified. – mhum Jan 16 at 5:59
Your question asks for a review of the "cryptography" and "math" of your method but I'm not sure there is enough information here to provide that. Is the intent for us to infer this from the source code directly? I fear that you may not receive adequate response if that is the case. A typical presentation of cryptographic methods starts with a full description of the algorithm (often in pseudocode), an outline of the various design choices (choice of constants, why n rounds and not n+1 rounds, etc...), and your own cryptanalysis of the method (what attacks have you tried, etc...). – mhum Jan 16 at 6:04
@BramCohen Yes. But what is easy for some is not necessarily easy for all (eg: Mac OS X requires Xcode for a C compiler which is required for PyCrypto). Every minute installing software is a minute not analyzing. Given the level of detail you've provided here and in the text files in your repo, is it also your intent that your Python code should be the primary documentation for your method? I worry that this would limit cryptanalysis only to those conversant in Python. I do not think you have provided enough information in text for me to reproduce (and analyze) your algorithm on my own. – mhum Jan 17 at 21:11
I closed this question as even after 5 days of discussion and two months of waiting it is still not clear what this scheme actually does. – Paŭlo Ebermann Mar 18 at 18:30

## closed as not a real question by Paŭlo Ebermann♦Mar 18 at 18:28

It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, see the FAQ.