snow is a program for concealing messages in text files by appending tabs and spaces on the end of lines, and for extracting messages from files containing hidden messages. Tabs and spaces are invisible to most text viewers, hence the steganographic nature of this encoding scheme.
The data is concealed in the text file by appending sequences of up to 7 spaces, interspersed with tabs. This usually allows 3 bits to be stored every 8 columns. An alternative encoding scheme, using alternating spaces and tabs to represent zeroes and ones, was rejected because, although it used fewer bytes, it required more columns per bit (4.5 vs 2.67).
The start of the data is indicated by an appended tab character, which allows the insertion of mail and news headers without corrupting the data.
snow provides rudimentary compression, using Huffman tables optimised for English text. However, if the data is not text, or if there is a lot of data, the use of the built-in compression is not recommended, since an external compression program such as compress or gzip will do a much better job.
Encryption is also provided, using the ICE encryption algorithm in 1-bit cipher-feedback (CFB) mode. Because of ICE's arbitrary key size, passwords of any length up to 1170 characters are supported (since only 7 bits of each character are used, keys up to 1024-bytes are supported).
If a message string or message file are specified on the command-line, snow will attempt to conceal the message in the file infile if specified, or standard input otherwise. The resulting file will be written to outfile if specified, or standard output if not.
If no message string is provided, snow attempts to extract a message from the input file. The result is written to the output file or standard output.
The following command will conceal the message "I am lying" in the file infile, with compression, and encrypted with the password "hello world". The resulting text will be stored in outfile.
snow -C -m "I am lying" -p "hello world" infile outfile
snow -C -p "hello world" outfile
Note that the resulting message will not be terminated by a newline.
To prevent line wrap if text with concealed whitespace is likely to be indented by mail or news readers, a line length of 72 or less can be used.
snow -C -l 72 -m "I am lying" infile outfile
The approximate storage capacity of a file can be determined with the -S option.
snow -S -l 72 infile