Publimark is a command line tool to secretly embed text in an audio file.
Like cryptography, it uses a pair of keys: the public one can be shared,
whereas the private one must be kept secret. Anybody can send a
steganographic message, but only the private key owner will be
able to read it. Marked audio files are still playable without any noticeable difference.
Publimark has been released on Freshmeat.
It exists a lot of steganographic schemes. Some of them are very efficient
(i.e. they can transmit a large amount of data without making stego-file
suspicious), but they are based on a private key. Before any secret communication,
you must transmit the secret key, which is often unsecured. If someone intercepts the private key, they will be able
to read the secret communication.
Publimark does not need this confidential key-sharing process. Like advanced cryptographic
algorithms, it uses a pair of keys. The first one – the public key – must be
shared, whereas the private one must be kept secret. Everybody can then send you a
secret message (if he knows the public key, of course), but only the secret key owner
– you – can read it.
A first practical attempt to make an efficient public key steganographic scheme was done
by P. Guillon and T. Furon . It is based on two phases. The sender
chooses a random key, denoted seed. It is encoded with the public key – i.e.
encode(seed, pub) – and transmitted.
The second step consists in transmitting the message
using an efficient private key steganographic algorithm (authors use SCS ),
with private key seed.
The main problem is the first step. How a key can be transmitted without any statistical
artifact on host data? Authors discovered that such a transmission is possible for uniformly
distributed cover data. They then use a compressor (to transform a given p.d.f. to a uniform one).
This framework (two phases) is also used by Publimark. But it uses a TCQ-like space partitioning
to transmit seed. It works for any p.d.f. (whereas compressor is designed for only one case) and
is much easier to implement. Here is an article that explains how it works.
Fig. 1. Embedding for initialization step using TCQ space partitioning and Monte Carlo.
Since Publimark sources are provided through a standard GNU package, you can compile
and install it with the three well-known steps:
$ make install
The configure script will check if your C++ compiler is powerful enough,
and will check if Audiofile and Botan libraries are correctly installed on your system.
Go to the download section to get them.
When done, you can begin to secretly communicate. A short help is obtained using
the help option.
$ publimark --help
First, you need to generate your own pair of cryptographic keys. It is done using
the -K flag.
$ publimark -K pub_key.txt prv_key.txt
Then, you can send and receive secret texts using Publimark. To avoid suspicion,
you'd better use 16-bit audio files (a CD track for example). Publimark can
read a lot of audio file format (see the Audio
File library page for a complete list). To send a secret message to Bob:
$ echo "Hi Bob!" | publimark track.wav marked_track.wav
The file marked_track.wav can then be sent to Bob (using the Internet or burning a CD).
To extract a message from a received audio file:
$ publimark marked_track.wav --key=my_private_key.txt
Latest version is 0.1.4. Sources are packaged in a TAR file
(about 100 Ko).
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
Publimark uses the Audiofile library, a nice API for
audio I/O (tested with
version 0.2.6 but works with more recent releases, e.g. tested with 0.2.7).
It also needs Botan, that implements various cryptographic
algorithms. Publimark has been tested with
P. Guillon, T. Furon and P. Duhamel.
Applied public-key steganography, in Proc. SPIE,
San Jose, CA, USA, Jan. 2002.
J. J. Eggers, R. Baüml, R. Tzschoppe and B. Girod. Scalar Costa scheme for information embedding,
IEEE Trans. on Signal Processing, Apr. 2003.