NAME
steghide - a steganography program
SYNOPSIS
steghide command [ arguments
]
DESCRIPTION
Steghide is a steganography program that
is able to hide data in various kinds of image- and audio-files.
The color- respectivly sample-frequencies are not changed thus
making the embedding resistant against first-order statistical
tests.
Features include the compression of the embedded data,
encryption of the embedded data and automatic integrity checking
using a checksum. The JPEG, BMP, WAV and AU file formats are
supported for use as cover file. There are no restrictions on the
format of the secret data.
Steghide uses a graph-theoretic approach to steganography. You
do not need to know anything about graph theory to use steghide and
you can safely skip the rest of this paragraph if you are not
interested in the technical details. The embedding algorithm
roughly works as follows: At first, the secret data is compressed
and encrypted. Then a sequence of postions of pixels in the cover
file is created based on a pseudo-random number generator
initialized with the passphrase (the secret data will be embedded
in the pixels at these positions). Of these positions those that do
not need to be changed (because they already contain the correct
value by chance) are sorted out. Then a graph-theoretic matching
algorithm finds pairs of positions such that exchanging their
values has the effect of embedding the corresponding part of the
secret data. If the algorithm cannot find any more such pairs all
exchanges are actually performed. The pixels at the remaining
positions (the positions that are not part of such a pair) are also
modified to contain the embedded data (but this is done by
overwriting them, not by exchanging them with other pixels). The
fact that (most of) the embedding is done by exchanging pixel
values implies that the first-order statistics (i.e. the number of
times a color occurs in the picture) is not changed. For audio
files the algorithm is the same, except that audio samples are used
instead of pixels.
The default encryption algorithm is Rijndael with a key size of
128 bits (which is AES - the advanced encryption standard) in the
cipher block chaining mode. If you do not trust this combination
for whatever reason feel free to choose another algorithm/mode
combination (information about all possible algorithms and modes is
displayed by the encinfo command). The checksum is
calculated using the CRC32 algorithm.
COMMANDS
In this section the commands for steghide are
listed. The first argument must always be one of these commands.
You can supply additional arguments to the embed,
extract and info commands. The other commands to not
take any arguments.
- embed, --embed
- Embed secret data in a cover file thereby creating a stego
file.
- extract, --extract
- Extract secret data from a stego file.
- info, --info
- Display information about a cover or stego file.
- encinfo, --encinfo
- Display a list of encryption algorithms and modes that can be
used. No arguments required.
- version, --version
- Display short version information. No arguments required.
- license, --license
- Display steghide's license. No arguments required.
- help, --help
- Display a help screen. No arguments required.
EMBEDDING
You should use the embed command if you
want to embed secret data in a cover file. The following arguments
can be used with the embed command:
- -ef, --embedfile filename
- Specify the file that will be embedded (the file that contains
the secret message). Note that steghide embeds the original file
name in the stego file. When extracting data (see below) the
default behaviour is to save the embedded file into the current
directory under its original name. If this argument is omitted or
filename is -, steghide will read the secret data
from standard input.
- -cf, --coverfile filename
- Specify the cover file that will be used to embed data. The
cover file must be in one of the following formats: AU, BMP, JPEG
or WAV. The file-format will be detected automatically based on
header information (the extension is not relevant). If this
argument is omitted or filename is -, steghide will
read the cover file from standard input.
- -sf, --stegofile filename
- Specify the name for the stego file that will be created. If
this argument is omitted when calling steghide with the
embed command, then the modifications to embed the secret
data will be made directly to the cover file without saving it
under a new name.
- -e, --encryption algo [ mode ] |
mode [ algo ]
- Specify encryption parameters. This option must be followed by
one or two strings that identify an encryption algorithm and/or
mode. You can get the names of all available algorithms and
supported modes with the encinfo command. The default
encryption is rijndael-128 (AES) in the cbc mode. If
you do not want to use any encryption, use -e none.
- -z, --compress level
- Specify the compression level. The compression level can be any
number in 1...9 where 1 means best speed and 9 means best
compression.
- -Z, --dontcompress
- Do not compress the secret data before embedding it.
- -K, --nochecksum
- Do not embed a CRC32 checksum. You can use this if the secret
data already contains some type of checksum or if you do not want
to embed those extra 32 bits needed for the checksum.
- -N, --dontembedname
- Do not embed the file name of the secret file. If this option
is used, the extractor needs to specify a filename to tell steghide
where to write the embedded data.
EXTRACTING
If you have received a file that contains a
message that has been embedded with steghide, use the
extract command to extract it. The following arguments can
be used with this command.
- -sf, --stegofile filename
- Specify the stego file (the file that contains embedded data).
If this argument is omitted or filename is -,
steghide will read a stego file from standard input.
- -xf, --extractfile filename
- Create a file with the name filename and write the data
that is embedded in the stego file to it. This option overrides the
filename that is embedded int the stego file. If this argument is
omitted, the embedded data will be saved to the current directory
under its original name.
GETTING INFORMATION ABOUT A COVER/STEGO FILE
You can use
the info command to get some information about a cover or
stego file (for example the capacity). You might want to use this
if you have received a file and you are not sure if it contains an
embedded message or if you consider using a certain file as cover
file and want to find out its capacity.
The command line steghide info <filename>
will print information about <filename> and then ask
you if you would like to get information about data that is
embedded in that file. If you answer with yes you have to supply
the passphrase that was used to embed the data in that file.
You can also supply the -p, --passphrase argument (see
below) to the info command which has the effect that
steghide will automatically try to get information about the data
that has been embedded using the given passphrase.
COMMON OPTIONS
The following options can be used with all
commands (where it makes sense).
- -p, --passphrase
- Use the string following this argument as the passphrase. If
your passphrase contains whitespace, you have to enclose it in
quotes, for example: -p "a very long passphrase".
- -v, --verbose
- Display detailed information about the status of the embedding
or extracting process.
- -q, --quiet
- Supress information messages.
- -f, --force
- Always overwrite existing files.
FILE NAME OPTIONS
All file name arguments (-cf,
-ef, -sf, -xf) also accept - as a
filename which makes steghide use standard input or standard output
(whichever makes sense). Omitting the corresponding file name
argument will have the same effect as using - with two
exceptions: If -sf is omitted for the embed command, then
the modifications will be done directly in the cover file. If
-xf is omitted for extraction, then the embedded data will
be saved under the file name that is embedded in the stego file. So
when you want to be sure that standard input/output is used, use
- as filename.
EXAMPLES
The basic usage is as follows:
$ steghide embed -cf picture.jpg -ef secret.txt
Enter passphrase:
Re-Enter passphrase:
embedding "secret.txt" in "picture.jpg"... done
This command will embed the file secret.txt in the cover file
picture.jpg.
After you have embedded your secret data as shown above you can
send the file picture.jpg to the person who should receive the
secret message. The receiver has to use steghide in the following
way:
$ steghide extract -sf picture.jpg
Enter passphrase:
wrote extracted data to "secret.txt".
If the supplied passphrase is correct, the contents of the
original file secret.txt will be extracted from the stego file
picture.jpg and saved in the current directory.
If you have received a file that contains embedded data and you
want to get some information about it before extracting it, use the
info command:
$ steghide info received_file.wav
"received_file.wav":
format: wave audio, PCM encoding
capacity: 3.5 KB
Try to get information about embedded data ? (y/n) y
Enter passphrase:
embedded file "secret.txt":
size: 1.6 KB
encrypted: rijndael-128, cbc
compressed: yes
After printing some general information about the stego file
(format, capacity) you will be asked if steghide should try to get
information about the embedded data. If you answer with yes you
have to supply a passphrase. Steghide will then try to extract the
embedded data with that passphrase and - if it succeeds - print
some information about it.
RETURN VALUE
Steghide returns 0 on success and 1 if a
failure occured and it had to terminate before completion of the
requested operation. Warnings do not have an effect on the return
value.
AUTHOR
Stefan Hetzl <shetzl@chello.at>