Sunday, October 09, 2011

Information on Audio Steganography

    In the following post, I am giving some guidelines and info about the Final Year Project that I did for my Engineering course. The information provided here is solely intended for educational purposes.

    What is Steaganography? Simply put, it is the art and science of writing hidden messages in such a way that no one, apart from the sender and intended recipient, suspects the existence of the message. Its like passing secret information right under people's noses, but no one has a clue that it contains secret information. This is unlike an encrypted file / information where people can suspect that there is a secret information.

    Anyway, there is a long history and types of Steganography that you can get from following this wikipedia link. What I am going to concentrate is hiding an encrypted file inside an audio file (*.wav). We have chosen wave format because of its simplicity and its simple structure and is based on the RIFF File Format. Why not use MP3, you may have a question? We need the Source audio file to be large enough to accomodate the encrypted contents of the file that we are going to hide and I haven't researched it, any licensing issues for using MP3 format.

    First of all, get a hold of the WAV file format specifications. The WAVE file header is 44 bytes long. You should not modify any data here, because if you do, the file will become unusable (i.e; cannot be played back in a media player software). 

   Since we decided to use the Java Programming Language to implement this, you would like to look into ByteArrayOutputStream, and byte Arrays to have access to each lower level bit of the files that you would be dealing with. So read the source file into a byte array, skip the header part, (44 bytes). Using an LSB replacement algorithm, we will add our data to this file.

LSB Audio Steganography Method


     What happens is we will replace the 2 least significant bits of each byte of the source file with bits from our secret message. You also need a method to know how much data you have to read back. You can use a marker text at the end, or keep the length of the message at the beginning which is what we did. The reason for changing the LSB is that, since they are the Least Significant (duh!), a listener cannot detect that much loss in information about the file.

    As stated in the FAQ,  I cannot post the source code for my project. I guess I have explained what goes on in a short post. You can figure out how to do all these with some simple Google Searches. I would suggest using the Eclipse IDE for development, splitting the project into a number of classes in nice packages :) and add any other features that you can think of. The complex part is encoding the message, and that will be just a few lines of code. 

    We had a user management module with a database for managing users, a log writer module for writing out a log, some extra UI libraries to make the app look unlike a java project, encrypt the message using any Encryption algorithm etc...

No comments: