-
Notifications
You must be signed in to change notification settings - Fork 12
Description
This is a pretty interesting project and while I am no researcher, after stumbling on your video about it was I curious and had a look!
I think there's currently two main issues that may break your plausible deniability goal in some situations.
1. Sequential Headers
The headers and messages are encoded in the way they are provided. This can cause an issue if the "real" message is the first one.
When decoding we know which header was decoded - if we decode and it wasn't header one, we know there are other messages hidden by all the headers prior to the one we decoded.
Possible Solution:
Shuffle around the order of data and headers so that no assumptions can be made.
2. Data Length
The data length is defined "first secret ciphertext buffer length * 2 rounded to nearest upper increment of 64 bytes". This can be an issue because we can reverse this default data length to get a range for the length of the first message.
The data IV is always 12 bytes and the auth tag is 16 bytes. Given a data length, we can guess the length l of the first message to be in the following range:
0.5 * (d - 120) < l <= 0.5 * (d - 56)
So lets say we have block with a data length of 256 and an unknown number of messages.
Given the data length is 256 we can assume the length of the first message will be in the range 68 < l <= 100.
If the block is decoded and we get a message shorter than 68 bytes then we can assume this wasn't the first message in the block.
This would still be clear from issue 1 since we wouldn't decode header 1, but even if that is fixed, we know there is at least one other message hidden with the expected size constraint.
Possible Solution:
Honestly, not overly sure about this one.