-
Notifications
You must be signed in to change notification settings - Fork 0
Methods
The general idea is presented in this paper.
This method does work by encoding secret bits line-by-line into the cover text. In each pass, it does encode three bits using smaller encoders. You can say it is a combination of the so-called Random Whitespace, Line Extend, and Trailing Whitespace methods.
So the first bit is encoded by putting double ASCII whitespace (the hex equivalent of 0x20) between randomly selected two words in the line. The next one is embedded by using the so-called pivot, which determines the line length. It boils down to extending the line length above the pivot when the encoder receives bit 1. The last bit is encoded by simply putting the ASCII whitespace (the 0x20) at the end of the line - it is worth noting that such whitespace does not count as a line extension.
As this is a kind of classic steganography method, it does work mostly by security through obscurity. The first thing is the usage of double whitespace in randomly selected words - the attacker might want to find the pattern, so it can make this method more obscure and therefore more enduring.
Write more about the pivot security and different models of the attack
It builds upon the foundation made by the Extended Line algorithm, but it does change one thing - the trailing whitespace method. Instead of using one character at the line end, it does stretch the set of possible line endings by incorporating several other invisible or wider whitespace characters defined by Unicode. See the source code for the available sets, if you wish.
The number of encoded bits is tied to the size of the whitespace set and is equal to the binary logarithm of the aforementioned size. Is it good to note that the size of the whitespace set should be a power of 2, so we always get the integer number.
So the first bit is encoded by putting double ASCII whitespace (the hex equivalent of 0x20) between randomly selected two words in the line. The next one is embedded by using the so-called pivot, which determines the line length. It boils down to extending the line length above the pivot when the encoder receives bit 1. The last n-bits are encoded by selecting the concrete character from the used set. For example, let's assume we encode 5 bits per pass:
- if the bits 0b00000 are received, no character is appended,
- if the bits 0b00010 are received, the character having index equal to 1 is selected and appended at the end of the line.
TBD