Publimark 0.1.4

How does it work | Documentation | Download | References

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.

how does it work

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 [1]. It is based on two phases. The sender chooses a random key, denoted seed. It is encoded with the public key – i.e. se = encode(seed, pub) – and transmitted. The second step consists in transmitting the message using an efficient private key steganographic algorithm (authors use SCS [2]), 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.

Initialization step
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:
$ ./configure
$ make
$ 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
Hi Bob!


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 version 1.8.10.


[1] P. Guillon, T. Furon and P. Duhamel. Applied public-key steganography, in Proc. SPIE, San Jose, CA, USA, Jan. 2002. Download PDF
[2] J. J. Eggers, R. Baml, R. Tzschoppe and B. Girod. Scalar Costa scheme for information embedding, IEEE Trans. on Signal Processing, Apr. 2003. Download PDF