StegIbiza: Steganography in Club Music Implemented in Python
Extracted source text · arXiv 1705.07788
%% bare_conf.tex
%% V1.4b
%% 2015/08/26
%% by Michael Shell
%% See:
%% http://www.michaelshell.org/
%% for current contact information.
%%
%% This is a skeleton file demonstrating the use of IEEEtran.cls
%% (requires IEEEtran.cls version 1.8b or later) with an IEEE
%% conference paper.
%%
%% Support sites:
%% http://www.michaelshell.org/tex/ieeetran/
%% http://www.ctan.org/pkg/ieeetran
%% and
%% http://www.ieee.org/
%%*************************************************************************
%% Legal Notice:
%% This code is offered as-is without any warranty either expressed or
%% implied; without even the implied warranty of MERCHANTABILITY or
%% FITNESS FOR A PARTICULAR PURPOSE!
%% User assumes all risk.
%% In no event shall the IEEE or any contributor to this code be liable for
%% any damages or losses, including, but not limited to, incidental,
%% consequential, or any other damages, resulting from the use or misuse
%% of any information contained here.
%%
%% All comments are the opinions of their respective authors and are not
%% necessarily endorsed by the IEEE.
%%
%% This work is distributed under the LaTeX Project Public License (LPPL)
%% ( http://www.latex-project.org/ ) version 1.3, and may be freely used,
%% distributed and modified. A copy of the LPPL, version 1.3, is included
%% in the base LaTeX documentation of all distributions of LaTeX released
%% 2003/12/01 or later.
%% Retain all contribution notices and credits.
%% ** Modified files should be clearly indicated as such, including **
%% ** renaming them and changing author support contact information. **
%%*************************************************************************
% *** Authors should verify (and, if needed, correct) their LaTeX system ***
% *** with the testflow diagnostic prior to trusting their LaTeX platform ***
% *** with production work. The IEEE's font choices and paper sizes can ***
% *** trigger bugs that do not appear when using other class files. *** ***
% The testflow support page is at:
% http://www.michaelshell.org/tex/testflow/
\documentclass[conference]{IEEEtran}
% Some Computer Society conferences also require the compsoc mode option,
% but others use the standard conference format.
%
% If IEEEtran.cls has not been installed into the LaTeX system files,
% manually specify the path to it like:
% \documentclass[conference]{../sty/IEEEtran}
% *** CUSTOM PACKAGES ***
\usepackage{tikz}
\usetikzlibrary{shapes.geometric, arrows,decorations.pathreplacing}
\definecolor{red}{gray}{0.1}
\definecolor{green}{gray}{0.6}
\definecolor{blue}{gray}{0.3}
\definecolor{yellow}{gray}{0.6}
\definecolor{violet}{gray}{0.5}
\definecolor{orange}{gray}{0.9}
\tikzstyle{startstop} = [rectangle, rounded corners, minimum width=3cm, minimum height=0.75cm,text centered, draw=black, fill=red!30]
\tikzstyle{io} = [trapezium, trapezium left angle=70, trapezium right angle=110, minimum width=3cm, minimum height=0.75cm, text centered, draw=black, fill=blue!30]
\tikzstyle{process} = [rectangle, minimum width=3cm, minimum height=0.75cm, text centered, text width=3cm, draw=black, fill=orange!30]
\tikzstyle{decision} = [diamond, minimum width=3cm, minimum height=0.75cm, text centered, draw=black, fill=green!30]
\tikzstyle{arrow} = [thick,->,>=stealth]
% Some very useful LaTeX packages include:
% (uncomment the ones you want to load)
% *** MISC UTILITY PACKAGES ***
%
%\usepackage{ifpdf}
% Heiko Oberdiek's ifpdf.sty is very useful if you need conditional
% compilation based on whether the output is pdf or dvi.
% usage:
% \ifpdf
% % pdf code
% \else
% % dvi code
% \fi
% The latest version of ifpdf.sty can be obtained from:
% http://www.ctan.org/pkg/ifpdf
% Also, note that IEEEtran.cls V1.7 and later provides a builtin
% \ifCLASSINFOpdf conditional that works the same way.
% When switching from latex to pdflatex and vice-versa, the compiler may
% have to be run twice to clear warning/error messages.
% *** CITATION PACKAGES ***
%
\usepackage{cite}
% cite.sty was written by Donald Arseneau
% V1.6 and later of IEEEtran pre-defines the format of the cite.sty package
% \cite{} output to follow that of the IEEE. Loading the cite package will
% result in citation numbers being automatically sorted and properly
% "compressed/ranged". e.g., [1], [9], [2], [7], [5], [6] without using
% cite.sty will become [1], [2], [5]--[7], [9] using cite.sty. cite.sty's
% \cite will automatically add leading space, if needed. Use cite.sty's
% noadjust option (cite.sty V3.8 and later) if you want to turn this off
% such as if a citation ever needs to be enclosed in parenthesis.
% cite.sty is already installed on most LaTeX systems. Be sure and use
% version 5.0 (2009-03-20) and later if using hyperref.sty.
% The latest version can be obtained at:
% http://www.ctan.org/pkg/cite
% The documentation is contained in the cite.sty file itself.
% *** GRAPHICS RELATED PACKAGES ***
%
\ifCLASSINFOpdf
%\usepackage[pdftex]{graphicx}
% declare the path(s) where your graphic files are
\graphicspath{{./figures/}{../jpeg/}}
% and their extensions so you won't have to specify these with
% every instance of \includegraphics
\DeclareGraphicsExtensions{.pdf,.jpeg,.png}
\else
% or other class option (dvipsone, dvipdf, if not using dvips). graphicx
% will default to the driver specified in the system graphics.cfg if no
% driver is specified.
% \usepackage[dvips]{graphicx}
% declare the path(s) where your graphic files are
% \graphicspath{{../eps/}}
% and their extensions so you won't have to specify these with
% every instance of \includegraphics
% \DeclareGraphicsExtensions{.eps}
\fi
% graphicx was written by David Carlisle and Sebastian Rahtz. It is
% required if you want graphics, photos, etc. graphicx.sty is already
% installed on most LaTeX systems. The latest version and documentation
% can be obtained at:
% http://www.ctan.org/pkg/graphicx
% Another good source of documentation is "Using Imported Graphics in
% LaTeX2e" by Keith Reckdahl which can be found at:
% http://www.ctan.org/pkg/epslatex
%
% latex, and pdflatex in dvi mode, support graphics in encapsulated
% postscript (.eps) format. pdflatex in pdf mode supports graphics
% in .pdf, .jpeg, .png and .mps (metapost) formats. Users should ensure
% that all non-photo figures use a vector format (.eps, .pdf, .mps) and
% not a bitmapped formats (.jpeg, .png). The IEEE frowns on bitmapped formats
% which can result in "jaggedy"/blurry rendering of lines and letters as
% well as large increases in file sizes.
%
% You can find documentation about the pdfTeX application at:
% http://www.tug.org/applications/pdftex
% *** MATH PACKAGES ***
%
\usepackage{amsmath}
% A popular package from the American Mathematical Society that provides
% many useful and powerful commands for dealing with mathematics.
%
% Note that the amsmath package sets \interdisplaylinepenalty to 10000
% thus preventing page breaks from occurring within multiline equations. Use:
%\interdisplaylinepenalty=2500
% after loading amsmath to restore such page breaks as IEEEtran.cls normally
% does. amsmath.sty is already installed on most LaTeX systems. The latest
% version and documentation can be obtained at:
% http://www.ctan.org/pkg/amsmath
% *** SPECIALIZED LIST PACKAGES ***
%
%\usepackage{algorithmic}
% algorithmic.sty was written by Peter Williams and Rogerio Brito.
% This package provides an algorithmic environment fo describing algorithms.
% You can use the algorithmic environment in-text or within a figure
% environment to provide for a floating algorithm. Do NOT use the algorithm
% floating environment provided by algorithm.sty (by the same authors) or
% algorithm2e.sty (by Christophe Fiorio) as the IEEE does not use dedicated
% algorithm float types and packages that provide these will not provide
% correct IEEE style captions. The latest version and documentation of
% algorithmic.sty can be obtained at:
% http://www.ctan.org/pkg/algorithms
% Also of interest may be the (relatively newer and more customizable)
% algorithmicx.sty package by Szasz Janos:
% http://www.ctan.org/pkg/algorithmicx
% *** ALIGNMENT PACKAGES ***
%
%\usepackage{array}
% Frank Mittelbach's and David Carlisle's array.sty patches and improves
% the standard LaTeX2e array and tabular environments to provide better
% appearance and additional user controls. As the default LaTeX2e table
% generation code is lacking to the point of almost being broken with
% respect to the quality of the end results, all users are strongly
% advised to use an enhanced (at the very least that provided by array.sty)
% set of table tools. array.sty is already installed on most systems. The
% latest version and documentation can be obtained at:
% http://www.ctan.org/pkg/array
% IEEEtran contains the IEEEeqnarray family of commands that can be used to
% generate multiline equations as well as matrices, tables, etc., of high
% quality.
% *** SUBFIGURE PACKAGES ***
%\ifCLASSOPTIONcompsoc
% \usepackage[caption=false,font=normalsize,labelfont=sf,textfont=sf]{subfig}
%\else
% \usepackage[caption=false,font=footnotesize]{subfig}
%\fi
% subfig.sty, written by Steven Douglas Cochran, is the modern replacement
% for subfigure.sty, the latter of which is no longer maintained and is
% incompatible with some LaTeX packages including fixltx2e. However,
% subfig.sty requires and automatically loads Axel Sommerfeldt's caption.sty
% which will override IEEEtran.cls' handling of captions and this will result
% in non-IEEE style figure/table captions. To prevent this problem, be sure
% and invoke subfig.sty's "caption=false" package option (available since
% subfig.sty version 1.3, 2005/06/28) as this is will preserve IEEEtran.cls
% handling of captions.
% Note that the Computer Society format requires a larger sans serif font
% than the serif footnote size font used in traditional IEEE formatting
% and thus the need to invoke different subfig.sty package options depending
% on whether compsoc mode has been enabled.
%
% The latest version and documentation of subfig.sty can be obtained at:
% http://www.ctan.org/pkg/subfig
% *** FLOAT PACKAGES ***
%
%\usepackage{fixltx2e}
% fixltx2e, the successor to the earlier fix2col.sty, was written by
% Frank Mittelbach and David Carlisle. This package corrects a few problems
% in the LaTeX2e kernel, the most notable of which is that in current
% LaTeX2e releases, the ordering of single and double column floats is not
% guaranteed to be preserved. Thus, an unpatched LaTeX2e can allow a
% single column figure to be placed prior to an earlier double column
% figure.
% Be aware that LaTeX2e kernels dated 2015 and later have fixltx2e.sty's
% corrections already built into the system in which case a warning will
% be issued if an attempt is made to load fixltx2e.sty as it is no longer
% needed.
% The latest version and documentation can be found at:
% http://www.ctan.org/pkg/fixltx2e
%\usepackage{stfloats}
% stfloats.sty was written by Sigitas Tolusis. This package gives LaTeX2e
% the ability to do double column floats at the bottom of the page as well
% as the top. (e.g., "\begin{figure*}[!b]" is not normally possible in
% LaTeX2e). It also provides a command:
%\fnbelowfloat
% to enable the placement of footnotes below bottom floats (the standard
% LaTeX2e kernel puts them above bottom floats). This is an invasive package
% which rewrites many portions of the LaTeX2e float routines. It may not work
% with other packages that modify the LaTeX2e float routines. The latest
% version and documentation can be obtained at:
% http://www.ctan.org/pkg/stfloats
% Do not use the stfloats baselinefloat ability as the IEEE does not allow
% \baselineskip to stretch. Authors submitting work to the IEEE should note
% that the IEEE rarely uses double column equations and that authors should try
% to avoid such use. Do not be tempted to use the cuted.sty or midfloat.sty
% packages (also by Sigitas Tolusis) as the IEEE does not format its papers in
% such ways.
% Do not attempt to use stfloats with fixltx2e as they are incompatible.
% Instead, use Morten Hogholm'a dblfloatfix which combines the features
% of both fixltx2e and stfloats:
%
% \usepackage{dblfloatfix}
% The latest version can be found at:
% http://www.ctan.org/pkg/dblfloatfix
% *** PDF, URL AND HYPERLINK PACKAGES ***
%
%\usepackage{url}
% url.sty was written by Donald Arseneau. It provides better support for
% handling and breaking URLs. url.sty is already installed on most LaTeX
% systems. The latest version and documentation can be obtained at:
% http://www.ctan.org/pkg/url
% Basically, \url{my_url_here}.
% *** Do not adjust lengths that control margins, column widths, etc. ***
% *** Do not use packages that alter fonts (such as pslatex). ***
% There should be no need to do such things with IEEEtran.cls V1.6 and later.
% (Unless specifically asked to do so by the journal or conference you plan
% to submit to, of course. )
% correct bad hyphenation here
\hyphenation{op-tical net-works semi-conduc-tor}
\begin{document}
%
% paper title
% Titles are generally capitalized except for words such as a, an, and, as,
% at, but, by, for, in, nor, of, on, or, the, to and up, which are usually
% not capitalized unless they are the first or last word of the title.
% Linebreaks \\ can be used within to get better formatting as desired.
% Do not put math or special symbols in the title.
\title{StegIbiza: Steganography in Club Music\\ Implemented in Python}
% author names and affiliations
% use a multiple column layout for up to three different
% affiliations
\author{
\IEEEauthorblockN{Krzysztof Szczypiorski}
\IEEEauthorblockA{Warsaw University of Technology, Warsaw, Poland\\
Cryptomage SA, Wroclaw, Poland\\
Email: ksz@tele.pw.edu.pl}
\and
\IEEEauthorblockN{Wojciech Zydecki}
\IEEEauthorblockA{Warsaw University of Technology, Warsaw, Poland\\
Email: w.zydecki@gmail.com}}
%\and
%\IEEEauthorblockN{James Kirk\\ and Montgomery Scott}
%\IEEEauthorblockA{Starfleet Academy\\
%San Francisco, California 96678--2391\\
%Telephone: (800) 555--1212\\
%Fax: (888) 555--1212}}
% conference papers do not typically use \thanks and this command
% is locked out in conference mode. If really needed, such as for
% the acknowledgment of grants, issue a \IEEEoverridecommandlockouts
% after \documentclass
% for over three affiliations, or if they all won't fit within the width
% of the page, use this alternative format:
%
%\author{\IEEEauthorblockN{Michael Shell\IEEEauthorrefmark{1},
%Homer Simpson\IEEEauthorrefmark{2},
%James Kirk\IEEEauthorrefmark{3},
%Montgomery Scott\IEEEauthorrefmark{3} and
%Eldon Tyrell\IEEEauthorrefmark{4}}
%\IEEEauthorblockA{\IEEEauthorrefmark{1}School of Electrical and Computer Engineering\\
%Georgia Institute of Technology,
%Atlanta, Georgia 30332--0250\\ Email: see http://www.michaelshell.org/contact.html}
%\IEEEauthorblockA{\IEEEauthorrefmark{2}Twentieth Century Fox, Springfield, USA\\
%Email: homer@thesimpsons.com}
%\IEEEauthorblockA{\IEEEauthorrefmark{3}Starfleet Academy, San Francisco, California 96678-2391\\
%Telephone: (800) 555--1212, Fax: (888) 555--1212}
%\IEEEauthorblockA{\IEEEauthorrefmark{4}Tyrell Inc., 123 Replicant Street, Los Angeles, California 90210--4321}}
% use for special paper notices
%\IEEEspecialpapernotice{(Invited Paper)}
% make the title area
\maketitle
% As a general rule, do not put math, special symbols or citations
% in the abstract
\begin{abstract}
This paper introduces the implementation of steganography method called StegIbiza, which uses tempo modulation as hidden message carrier. With the use of Python scripting language, a bit string was encoded and decoded using WAV and MP3 files. Once the message was hidden into a music files, an internet radio was created to evaluate broadcast possibilities. No dedicated music or signal processing equipment was used in this StegIbiza implementation.
\end{abstract}
% no keywords
%\emph{\textbf{Keywords: StegIbiza, club music, information hiding, audio steganography, music steganography, python}}
% For peer review papers, you can put extra information on the cover
% page as needed:
% \ifCLASSOPTIONpeerreview
% \begin{center} \bfseries EDICS Category: 3-BBND \end{center}
% \fi
%
% For peerreview papers, this IEEEtran command inserts a page break and
% creates the second title. It will be ignored for other modes.
\IEEEpeerreviewmaketitle
\section{Introduction}
% no \IEEEPARstart
Steganography was used by human kind through out the history in many ways. We find first known examples in ancient Greece \cite{ancient_greece} and, as technology and culture progressed, new methods of steganography were developed. In the age of Internet major attention is paid to applications of steganography in image \cite{steg_image} and network \cite{steg_network} as it is currently best platform for covert communication, which pushes the construction of new image and network steganography methods. Recent years have shown usage growth of internet radio and music streaming services \cite{internet_radio_increase}, which provides plenty of room for new audio steganography methods.
In this paper, an implementation of new music steganography method called StegIbiza (Steganographic Ibiza) \cite{stegibiza} is introduced and used to share hidden information over an internet radio and other internet services. Implementation was done in Python programming language and was later used on pack of MP3 music files which were added to the internet radio station. The whole process was done using regular PC with out any special sound or signal processing equipment. The idea behind StegIbiza is to encode a message by increasing or decreasing the music tempo by small percent to keep it inaudible to humans. Music tempo is measured in beats per minute (bpm) and needs to be constant for the StegIbiza to work.
The paper is structured as follows: Section II briefly describes the art of steganography. Section III focuses on the idea of StegIbiza method and how it can be used. Section IV presents the limits which were discovered during the implementation process. Section V explains and presents the Python implementation of StegIbiza. Section VI shows usage of the implementation on different songs. Section VII presents possible broadcast sources like internet radio and other services. Section VIII concludes our work and describes our future efforts.
% You must have at least 2 lines in the paragraph with the drop letter
% (should never be an issue)
%I wish you the best of success.
%\hfill mds
%\hfill August 26, 2015
\section{Art of Steganography}
Steganography is the practice of concealing information and communication. The word steganography combines two Greek words steganos, meaning "concealed" and graphein meaning "writing".
First documented examples of steganography usage are dated to 440 BC where a message was sent by tattooing it on slave head and concealed by regrown hair. As the time passed, many new steganography methods were used throughout the history like writing message on a back of a stamp placed on a postcard, or shrinking whole text to a size of a dot \cite{steg_history}.
In nowadays the biggest communication channel for steganography is the internet and the all the services it provides. Major effort is put, into detection and prevention of any kind of concealed communication over the Internet \cite{steg_detecting}, in order to stop any terrorist groups from using steganagraphy to communicate.
The current state of the art in audio steganography is briefly presented in section II of our previous work \cite{stegibiza} on StegIbiza.
\section{StegIbiza}
Idea behind StegIbiza method is based on music tempo modulation. Using a song with constant tempo, a message is hidden by lowering and rising the tempo. In the initial StegIbiza implementation described in \cite{stegibiza} messages were encoded using adopted Morse code, where "dot was replaced with "+" and "dash was left as it is using "minus" symbol. The "plus" sing indicated a change +$\Delta$ for a period of $\Phi$ beats and the "minus" meant a change of -$\Delta$ for a period of $\Phi$ beats. Original tempo was marked as 0 and was taken as a reference. An example usage is presented in Figure \ref{fig_stegibiza}.
\begin{figure}[!t]
\centering
\begin{tikzpicture}
% horizontal axis
\draw[arrow] (0,0) -- (7,0) node[anchor=west] {time} node[anchor=north west] {beats};
% ranges
\draw (3,2) node{{Tempo $X$}};
% vertical axis
\draw[arrow] (0,0) -- (0,3) node[anchor=east] {tempo} node[anchor=north east] {[bpm]};
\draw (-0.5,1.5) node{{\small$X$}};
% tempo line
\draw[thick,dashed] (0,1.5) -- (6.5,1.5);
%braces
\draw[decorate,decoration={brace,amplitude=3pt,mirror}] (0,-0.3) -- (2,-0.3);
\draw[decorate,decoration={brace,amplitude=3pt,mirror}] (2,-0.3) -- (4,-0.3);
\draw[decorate,decoration={brace,amplitude=3pt,mirror}] (4,-0.3) -- (6,-0.3);
\node at (1,-0.75){beat};
\node at (3,-0.75){beat};
\node at (5,-0.75){beat};
\draw[dotted] (0,-0.3) -- (0,0);
\draw[dotted] (2,-0.3) -- (2,0);
\draw[dotted] (4,-0.3) -- (4,0);
\draw[dotted] (6,-0.3) -- (6,0);
\end{tikzpicture}
\begin{tikzpicture}
%rectangle
\fill[gray!25!white] (2,0.3) rectangle (6,2.3);
% horizontal axis
\draw[arrow] (0,0) -- (7,0) node[anchor=west] {time} node[anchor=north west] {beats};
% ranges
\draw (1,1.75) node{{0}}
(3,1.75) node{{$+\Delta$}}
(5,1.75) node{{$-\Delta$}};
\draw (3.5,2.5) node{{Steganogram - $\Phi$ = 1 beat, $\Delta$ = 1 bpm }};
% vertical axis
\draw[arrow] (0,0) -- (0,3) node[anchor=east] {tempo} node[anchor=north east] {[bpm]};
\draw (-0.5,1.5) node{{\small$X$}};
\draw (-0.5,2) node{{\small$X+\Delta$}};
\draw (-0.5,1) node{{\small$X-\Delta$}};
% tempo line
\draw[thick,dashed] (0,1.5) -- (2,1.5);
\draw[thick,dashed] (2,1.5) -- (2,2);
\draw[thick,dashed] (2,2) -- (4,2);
\draw[thick,dashed] (4,2) -- (4,1);
\draw[thick,dashed] (4,1) -- (6,1);
\draw[thick,dashed] (6,1) -- (6,1.5);
\draw[thick,dashed] (6,1.5) -- (6.5,1.5);
%braces
\draw[decorate,decoration={brace,amplitude=3pt,mirror}] (0,-0.3) -- (2,-0.3);
\draw[decorate,decoration={brace,amplitude=3pt,mirror}] (2,-0.3) -- (4,-0.3);
\draw[decorate,decoration={brace,amplitude=3pt,mirror}] (4,-0.3) -- (6,-0.3);
\node at (1,-0.75){$\Phi$};
\node at (3,-0.75){$\Phi$};
\node at (5,-0.75){$\Phi$};
\draw[dotted] (0,-0.3) -- (0,0);
\draw[dotted] (2,-0.3) -- (2,0);
\draw[dotted] (4,-0.3) -- (4,0);
\draw[dotted] (6,-0.3) -- (6,0);
\end{tikzpicture}
\caption{Explanation of StegIbiza method ($\Phi$ = 1 beat, $\Delta$ = 1 bpm), hidden two symbols: "+" and "-"}
\label{fig_stegibiza}
\end{figure}
StegIbiza was evaluated on a group of testers in order to estimate the values of $\Phi$ and $\Delta$, that make tempo change inaudible for humans. In the evaluation 5 different songs were played to 20 testers, aged between 25 and 45 and without any hearing impairments. Tempo was increased by different values with constant $\Phi = 1$ beat. Seven of the testers had professional music background (graduated from musical school) and three of them worked as professional musicians. The evaluation has shown that the 1\% change in tempo was indiscoverable for anyone from the testing group. Changes above 1\% but below 2\% were noticeable only for professional musicians. With changes above 2\% but below 3\% around 50\% (9) of testers noticed the difference. With a change of 3\% and above all testers have detected the StegIbiza.
\section{Implementation Revelations}
Before implementing StegIbiza in Python, a research was made in order to find best solution and tools for the task. Most important part of the StegIbiza implementation was accurate tempo measurement and error free message decoding. For this three libraries were tested:
\begin{itemize}
\item Aubio \cite{aubio}: free and opensource library written in C to label music and sounds.
\item SoundTouch \cite{soundtouch}: opensource audio processing library for modifying tempo, pitch and playback rates of audio steams and files.
\item madmom \cite{madmomIEEE}: audio signal processing library written in Python.
\end{itemize}
In the test, a song was divided into parts where $\Phi\in\{10,15,20\}$ seconds. Tempo of each part was measured and compared with the original one. Finally "madmom" was chosen due to providing best method of measuring tempo value in a song file. In comparison to other libraries, "madmom" had a constant error value, while measurements with "Aubio" and "SoundTouch" presented errors within $+/-1\%$ range. In addition to "madmom" for tempo reading, "SoundTouch" library is used for tempo modulation and brought to Python using a wrapper "pysoundtouch".
When it came to measurement accuracy, none of the libraries could correctly detect tempo change that was lower than 2,75\%. At first this seemed like an big issue, because the goal was to read $+/-1\%$ tempo changes, so that StegIbiza stays inaudible. However in the end there is no need for accurate change measurement, as long as the results allow us to determine if the tempo was increased or decreased. Measurement results from "madmom" are presented as an array of BPM values and beat strength. Example measurement results of two files is presented in Figure \ref{fig_madmom}. First array on the left contains results of unchanged tempo measurement of first 10 seconds of the song. Array on the right presents tempo measurement results from 10 till 20 seconds of the same song with its tempo increased by 1\%. When we compare the results we can notice small changes in some values and identify the increase.
\begin{figure}[!t]
\centering
\includegraphics[width=3.5in]{madmom.png}
\caption{Example of madmom measurement. Array on the left presents the unchanged tempo of song starting from 0 to 10 seconds. The right side presents the tempo increased by 1\% starting from 10 to 20 seconds.}
\label{fig_madmom}
\end{figure}
The process of implementation has also shown that lowest possible value of $\Phi = 10$ seconds. It turned out that for decent tempo measurement result, one needs at least 9 seconds of a song, which would make constant $\Phi = 9$ seconds, however when we increase or decrease the tempo, we also change the length of the $\Phi$ parts. When reading the encoded value with $\Phi = 9$ we might read a small part of the previous or next song part with different tempo. This will lead to an error and will most likely end in reading wrong value. To avoid that we cut 5\% of the beginning and end of each song part while reading, hence $\Phi = 10 = 9 + 10*5\% + 10*5\%$. The implementation is presented in Figure \ref{fig_stegibiza_imp}.
For $\Phi = 10$, with average song time of 3 minutes we can only hide 17 bits - $3*60/10 - 1$ (we subtract 1 bit as it is used for original tempo reference). By the cost of songs data capacity, we can increase the $\Phi$ value to 15 or 20 seconds which will lower the probability of an error and StegIbiza detection.
\begin{figure}[!t]
\centering
\begin{tikzpicture}
% horizontal axis
\draw[arrow] (0,0) -- (7,0) node[anchor=north] {time [s]};
% ranges
\draw (1,2.5) node{{0}}
(3,2.5) node{{$+\Delta$}}
(5,2.5) node{{$-\Delta$}};
% vertical axis
\draw[arrow] (0,0) -- (0,3) node[anchor=east] {tempo} node[anchor=north east] {[bpm]};
\draw (-0.5,1.5) node{{\small$X$}};
\draw (-0.5,2) node{{\small$X+\Delta$}};
\draw (-0.5,1) node{{\small$X-\Delta$}};
% nominal speed
\draw[dotted] (1.9,0) -- (1.9,3);
\draw[dotted] (2.1,0) -- (2.1,3);
\draw[decorate,decoration={brace}] (1.9,3) -- (2.1,3) node[anchor=south] {$10\%\Phi$};
\draw[dotted] (3.9,0) -- (3.9,3);
\draw[dotted] (4.1,0) -- (4.1,3);
\draw[decorate,decoration={brace}] (3.9,3) -- (4.1,3) node[anchor=south] {$10\%\Phi$};
% tempo line
\draw[thick,dashed] (0,1.5) -- (2,1.5);
\draw[thick,dashed] (2,1.5) -- (2,2);
\draw[thick,dashed] (2,2) -- (4,2);
\draw[thick,dashed] (4,2) -- (4,1);
\draw[thick,dashed] (4,1) -- (6,1);
\draw[thick,dashed] (6,1) -- (6,1.5);
\draw[thick,dashed] (6,1.5) -- (6.5,1.5);
%braces
\draw[decorate,decoration={brace,amplitude=3pt,mirror}] (0,-0.3) -- (2,-0.3);
\draw[decorate,decoration={brace,amplitude=3pt,mirror}] (2,-0.3) -- (4,-0.3);
\draw[decorate,decoration={brace,amplitude=3pt,mirror}] (4,-0.3) -- (6,-0.3);
\node at (1,-0.85){$\Phi$};
\node at (3,-0.85){$\Phi$};
\node at (5,-0.85){$\Phi$};
\draw[dotted] (0,-0.3) -- (0,0);
\draw[dotted] (2,-0.3) -- (2,0);
\draw[dotted] (4,-0.3) -- (4,0);
\draw[dotted] (6,-0.3) -- (6,0);
\end{tikzpicture}
\caption{Explanation of StegIbiza implementation ($\Phi$ - time in seconds, $\Delta$ - 1\% of default tempo), hidden two symbols "+" and "-"}
\label{fig_stegibiza_imp}
\end{figure}
\section{StegIbiza Python Implementation}
The implementation takes WAV or MP3 type music file and slices it into $\Phi=10$ second parts by default. First part remains untouched as it is used as a reference for original tempo value. The tempo of the remaining parts is modified accordingly to bits of the hidden message. Time of the last part of the song file is always lower than $\Phi$ therefor it remains untouched as it is very likely to produce errors when decoding a message. After the encoding all parts are put back together into one file. For long messages it is possible to provide several music files for increased storage capacity. Figure \ref{flowchart_stegibiza} presents simplified flowchart of StegIbiza python implementation.
\begin{figure}[!t]
\centering
\begin{tikzpicture}[node distance=1.5cm, thick, scale=0.6, every node/.style={scale=0.6}]
% Specification of nodes (position, etc.)
\node (start) [startstop] {StegIbiza starts};
\node (in1) [io, below of=start] {Input files};
\node (read) [process, below of=in1] {Read input parameters};
\node (processMessage) [process, below of=read] {Convert message into bit string};
\node (tmpDirs) [process, below of=processMessage] {Create temporary directories};
\node (openFile) [process, below of=tmpDirs] {Open 1st music file};
\node (sliceFile) [process, below of=openFile] {Slice music into pieces};
\node (process) [process, below of=sliceFile] {Process song pieces};
\node (output) [io, below of=process] {Output file};
\node (dec) [decision, below of=output, yshift=-0.5cm] {\small{Files remain?}};
\node (nextfile) [process, right of=dec, xshift=2.5cm] {Open next file};
\node (stop) [startstop, below of=dec, yshift=-0.75cm] {StegIbiza stops};
{onPause()};
% with aditional nodes for description
\draw [arrow] (start) -- (in1);
\draw [arrow] (in1) -- (read);
\draw [arrow] (read) -- (processMessage);
\draw [arrow] (processMessage) -- (tmpDirs);
\draw [arrow] (tmpDirs) -- (openFile);
\draw [arrow] (openFile) -- (sliceFile);
\draw [arrow] (sliceFile) -- (process);
\draw [arrow] (process) -- (output);
\draw [arrow] (output) -- (dec);
\draw [arrow] (dec) -- node[anchor=east] {no} (stop);
\draw [arrow] (dec) -- node[anchor=south] {yes} (nextfile);
\draw [arrow] (nextfile) |- (sliceFile);
\end{tikzpicture}
\caption{Flowchart of StegIbiza implementation.}
\label{flowchart_stegibiza}
\end{figure}
When decoding a message, the file is split into $\Phi - 10\%\Phi$ parts. Here we cut the beginning and end by $5\%$ of $\Phi$ of each part in order to eliminate overlapping with neighboring parts. Once the file is divided, we start reading the message by comparing the tempo of each file with the first one and qualify it if has increased or decreased tempo. Same as before, time of the last part of the song file is always lower than $\Phi$ therefor it remains untouched.
In order to classify the measured sample tempo as +1\% or -1\% a simple classifier is used. In order to obtain attributes of the sample, each tempo value from the reference song slice is compared with each tempo value of the analyzed sample and saved as difference in \%. Then all obtained attributes with mean value larger than 4\% are discarded. Remaining features are summed and classified as +1\% if the sum is larger than 0 or as -1\% otherwise.
\section{Implementation Results}
The implementation was tested on 10 different songs obtained from "Free Music Archive" \cite{freemusicarchive}. The test results are presented in Table \ref{table_results}. The bit string used in test is composed of 21 bits, therefor requires $21*10s = 3min \& 30s$ for the message to be fully encoded. Some songs used in the test were shorter than the time required for the whole message to be encoded and the missing bits are represented as "x" in the table.
Songs numbered from 1 till 6 are categorized as electronic music and they have constant tempo. Form the results we see that songs from 1 to 5 are error free. Song number 6 presents interesting result as it is inverted from the original bit string. This was caused by 5 seconds silence in the beginning of the song, which led to bad tempo reference sample and caused reverted results.
Songs numbered 7 and 8 are classified as instrumental indie-rock. Those songs produce some errors when decoding hidden message due to small tempo changes in some parts.
Songs 9 and 10 do not have constant tempo and produce large number of errors. In this case there is no way to use StegIbiza in current form. The only possibility here would be to compare each part of the song with equivalent part from the original song version.
\begin{table*}[!t]
%% increase table row spacing, adjust to taste
\renewcommand{\arraystretch}{1.3}
% if using array.sty, it might be a good idea to tweak the value of
% \extrarowheight as needed to properly center the text within the cells
\caption{Results of message encoding and decoding using StegIbiza implementation in Pyhton}
\label{table_results}
\centering
%% Some packages, such as MDW tools, offer better commands for making tables
%% than the plain LaTeX2e tabular which is used here.
\begin{tabular}{|c|c|c|c|c|}
\hline
\textbf{\#} & \textbf{Artist and Song Name} & \textbf{Original Duration} & \textbf{Decoded Bit String} & \textbf{\#Errors}\\
\hline
\hline
\textbf{0} & \textbf{Original Bit String} & 3:30 & 1 1 0 1 1 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 & X\\
\hline
\hline
1 & Broke For Free - Night Owl \cite{night_owl} & 3:14 & 1 1 0 1 1 0 1 1 1 1 0 0 1 1 1 1 0 x x x x & 0\\
\hline
2 & FLASERS - Amsterdam \cite{amsterdam} & 3:42 & 1 1 0 1 1 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 x & 0\\
\hline
3 & Lobo Loco - Muscle Body Man (ID 534) \cite{muscle_body_man} & 5:57 & 1 1 0 1 1 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 & 0\\
\hline
4 & Tours - Enthusiast \cite{enthusiast} & 2:51 & 1 1 0 1 1 0 1 1 1 1 0 0 1 1 1 x x x x x x & 0\\
\hline
5 & Black Ant - Fater Lee \cite{fater_lee}& 2:23 & 1 1 0 1 1 0 1 1 1 1 0 0 x x x x x x x x x & 0\\
\hline
6 & Candlegravity - Tomie\'s Bubbles \cite{tomies_bubbles} & 6:21 & \textbf{0 0 1 0 0 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0} & 21\\
\hline
7 & Jahzzar - Siesta \cite{siesta} & 2:20 & 1 1 0 1 1 0 1 1 1 \textbf{0 1 1} x x x x x x x x x & 3\\
\hline
8 & Gillicuddy - Springish \cite{springish} & 2:23 & 1 1 \textbf{1} 1 \textbf{0} 1 1 1 1 \textbf{0} 0 x x x x x x x x x x & 3\\
\hline
9 & Podington Bear - Pick Up The Tempo \cite{pick_up_the_tempo} & 2:40 & 1 1 0 1 \textbf{0} 1 \textbf{0 0 0 0 1 1 0 0} x x x x x x x & 9\\
\hline
10 & The Kyoto Connection - Hachiko (The Faithtful Dog) \cite{hachiko} & 3:05 & 1 1 0 1 1 0 \textbf{0 0 0} 1 0 \textbf{1} 1 1 \textbf{0 1} x x x x x & 6\\
\hline
\end{tabular}
\end{table*}
\section{StegIbiza Broadcast Applications}
The easiest approach to broadcast information using StegIbiza is to simply upload the music files to a public website as a playlist and allow the receiver to download them and decode the message. Any other random person to download the playlist or any song in it, would not recognize any tempo changes by simply listening to it.
Another simple way is to put the songs with hidden message on popular video service like YouTube \cite{youtube}. Then the receiver can extract song file from the video and decode the hidden message.
Slightly harder solution is to setup an internet radio using SouthCast \cite{southcast} or other tools. Then we can setup automatic broadcast of previously prepared playlist with a hidden message. Each song should be separated by a proper separator like few seconds of silence or some other sound mark that will indicate new song. Later to extract message from each song, the stream can be easily recorded and split into song files using the separators.
There is always a possibility of using StegIbiza in regular radio, however messages are most likely to be unreadable due to bad quality recordings caused by bad reception and interferences.
Besides hiding messages in music, idea of tempo changing from StegIbiza can be used to control variety of equipment in clubs or music festivals. Lighting, screens and many others devices can be wirelessly controlled by reacting to music tempo changes.
% An example of a floating figure using the graphicx package.
% Note that \label must occur AFTER (or within) \caption.
% For figures, \caption should occur after the \includegraphics.
% Note that IEEEtran v1.7 and later has special internal code that
% is designed to preserve the operation of \label within \caption
% even when the captionsoff option is in effect. However, because
% of issues like this, it may be the safest practice to put all your
% \label just after \caption rather than within \caption{}.
%
% Reminder: the "draftcls" or "draftclsnofoot", not "draft", class
% option should be used if it is desired that the figures are to be
% displayed while in draft mode.
%
%\begin{figure}[!t]
%\centering
%\includegraphics[width=2.5in]{myfigure}
% where an .eps filename suffix will be assumed under latex,
% and a .pdf suffix will be assumed for pdflatex; or what has been declared
% via \DeclareGraphicsExtensions.
%\caption{Simulation results for the network.}
%\label{fig_sim}
%\end{figure}
% Note that the IEEE typically puts floats only at the top, even when this
% results in a large percentage of a column being occupied by floats.
% An example of a double column floating figure using two subfigures.
% (The subfig.sty package must be loaded for this to work.)
% The subfigure \label commands are set within each subfloat command,
% and the \label for the overall figure must come after \caption.
% \hfil is used as a separator to get equal spacing.
% Watch out that the combined width of all the subfigures on a
% line do not exceed the text width or a line break will occur.
%
%\begin{figure*}[!t]
%\centering
%\subfloat[Case I]{\includegraphics[width=2.5in]{box}%
%\label{fig_first_case}}
%\hfil
%\subfloat[Case II]{\includegraphics[width=2.5in]{box}%
%\label{fig_second_case}}
%\caption{Simulation results for the network.}
%\label{fig_sim}
%\end{figure*}
%
% Note that often IEEE papers with subfigures do not employ subfigure
% captions (using the optional argument to \subfloat[]), but instead will
% reference/describe all of them (a), (b), etc., within the main caption.
% Be aware that for subfig.sty to generate the (a), (b), etc., subfigure
% labels, the optional argument to \subfloat must be present. If a
% subcaption is not desired, just leave its contents blank,
% e.g., \subfloat[].
% An example of a floating table. Note that, for IEEE style tables, the
% \caption command should come BEFORE the table and, given that table
% captions serve much like titles, are usually capitalized except for words
% such as a, an, and, as, at, but, by, for, in, nor, of, on, or, the, to
% and up, which are usually not capitalized unless they are the first or
% last word of the caption. Table text will default to \footnotesize as
% the IEEE normally uses this smaller font for tables.
% The \label must come after \caption as always.
%
%\begin{table}[!t]
%% increase table row spacing, adjust to taste
%\renewcommand{\arraystretch}{1.3}
% if using array.sty, it might be a good idea to tweak the value of
% \extrarowheight as needed to properly center the text within the cells
%\caption{An Example of a Table}
%\label{table_example}
%\centering
%% Some packages, such as MDW tools, offer better commands for making tables
%% than the plain LaTeX2e tabular which is used here.
%\begin{tabular}{|c||c|}
%\hline
%One & Two\\
%\hline
%Three & Four\\
%\hline
%\end{tabular}
%\end{table}
% Note that the IEEE does not put floats in the very first column
% - or typically anywhere on the first page for that matter. Also,
% in-text middle ("here") positioning is typically not used, but it
% is allowed and encouraged for Computer Society conferences (but
% not Computer Society journals). Most IEEE journals/conferences use
% top floats exclusively.
% Note that, LaTeX2e, unlike IEEE journals/conferences, places
% footnotes above bottom floats. This can be corrected via the
% \fnbelowfloat command of the stfloats package.
\section{Conclusion}
This article presented StegIbiza implementation and application on different music tracks. It showed that StegIbiza can be applied using regular personal computer without any special music or signal processing hardware. Implementation has also revealed its constrains in terms of tempo change limits and song capacity for data. The implementation was tested on 10 different songs and proven to work with 1\% tempo change, with 1 bit saved in each 10 seconds of the song. Article has also presented simple ways to secretly share information hidden by StegIbiza using internet services.
In this implementation there is a lot of space for improvements and the future work will focus on lowering the tempo change to lowest possible values and increasing songs data capacity by lowering the minimum time value needed to read the tempo.
% conference papers do not normally have an appendix
% use section* for acknowledgment
\section*{Acknowledgment}
The authors would like to thank all the people that helped in StegIbiza research or developed tools that made this implementation possible.
This is an independent publication and has not been authorized, sponsored, or otherwise approved by Google, SouthCast or Free Music Archive.
% trigger a \newpage just before the given reference
% number - used to balance the columns on the last page
% adjust value as needed - may need to be readjusted if
% the document is modified later
%\IEEEtriggeratref{8}
% The "triggered" command can be changed if desired:
%\IEEEtriggercmd{\enlargethispage{-5in}}
% references section
% can use a bibliography generated by BibTeX as a .bbl file
% BibTeX documentation can be easily obtained at:
% http://mirror.ctan.org/biblio/bibtex/contrib/doc/
% The IEEEtran BibTeX style support page is at:
% http://www.michaelshell.org/tex/ieeetran/bibtex/
%\bibliographystyle{IEEEtran}
% argument is your BibTeX string definitions and bibliography database(s)
%\bibliography{IEEEabrv,../bib/paper}
%
% <OR> manually copy in the resultant .bbl file
% set second argument of \begin to the number of references
% (used to reserve space for the reference number labels box)
\begin{thebibliography}{1}
\bibitem{ancient_greece}
Petitcolas, FAP; Anderson RJ; Kuhn MG (1999). "Information Hiding: A survey" (pdf). Proceedings of the IEEE (special issue). 87 (7): 1062–78. doi:10.1109/5.771065. Retrieved 11th of May 2017.
\bibitem{steg_image}
J. Fridrich, “Steganography in Digital Media: Principles, Algorithms, and Applications”, Cambridge University Press; 1 edition, December 2009
\bibitem{steg_network}
W. Mazurczyk, S. Wendzel, S. Zander, A. Houmansadr, K. Szczypiorski, “Information Hiding in Communication Networks: Fundamentals, Mechanisms, Applications, and Countermeasures”, Wiley-IEEE Press; 1 edition, February 2016
\bibitem{internet_radio_increase}
P. Sikka, "Why we're seeing increased Internet Radio usage", 7th July 2014, (last visited: 11th of May 2017)
\bibitem{stegibiza}
K. Szczypiorski, "StegIbiza: New Method for Information Hiding in Club Music", 2016 2nd International Conference on Frontiers of Signal Processing, 15-17 Oct. 2016
\bibitem{steg_history}
H. L. Perera, "History of Steganography", http://hareenlaks.blogspot.it/2011/04/history-of-steganography.html, 2nd April 2011, (last visited: 11th of May 2017)
\bibitem{steg_detecting}
N. Provos, P. Honeyman, "Detecting Steganographic Content on the Internet", ISOC NDSS'02, San Diego, CA, February 2002.
\bibitem{IEEEhowto:kopka}
H.~Kopka and P.~W. Daly, \emph{A Guide to \LaTeX}, 3rd~ed.\hskip 1em plus
0.5em minus 0.4em\relax Harlow, England: Addison-Wesley, 1999.
\bibitem{aubio}
Aubio library, http://aubio.org, (last visited: 11th of May 2017)
\bibitem{soundtouch}
SoundTouch Audio Processing Library, http://www.surina.net/soundtouch/index.html, (last visited: 11th of May 2017)
\bibitem{madmomIEEE}
S. Böck, F. Korzeniowski, J. Schlüter, F. Krebs, G. Widmer, "madmom: a new Python Audio and Music Signal Processing Library", <Coś tu jeszcze trzeba wpisać>, 23 May 2016
\bibitem{freemusicarchive}
Interactive library of legal audio downloads founded by legendary freeform radio station WFMU, http://freemusicarchive.org, (last visited: 17th of May 2017)
\bibitem{night_owl}
Broke For Free, "Night Owl", http://freemusicarchive.org/music/Broke\\\_For\_Free/Directionless\_EP/Broke\_For\_Free\_-\_Directionless\_EP\_-\_01\_Night\_Owl, Released 18th January 2011, (last visited: 17th of May 2017)
\bibitem{tomies_bubbles}
Candlegravity, "Tomie's Bubbles", http://freemusicarchive.org/music/\\Candlegravity/Junpei/07\_Tomies\_Bubbles, Released 11th April 2013, (last visited: 17th of May 2017)
\bibitem{amsterdam}
LASERS, "Amsterdam", http://freemusicarchive.org/music/LASERS/\\LASERS\_EP/01\_LASERS\_-\_Amsterdam, Released 4th June 2012, (last visited: 17th of May 2017)
\bibitem{springish}
Gillicuddy, "Springish", http://freemusicarchive.org/music/gillicuddy/\\Plays\_Guitar/05-springish, Released 5th Febuary 2012, (last visited: 17th of May 2017)
\bibitem{siesta}
Jahzzar, "Siesta", http://freemusicarchive.org/music/Jahzzar/Travellers\\\_Guide/Siesta, Uploaded 21st March 2012, (last visited: 17th of May 2017)
\bibitem{muscle_body_man}
Lobo Loco, "Muscle Body Man (ID 534)", http://freemusicarchive.org/music/Lobo\_Loco/Phenomenon/Muscle\_Body\\\_Man\_ID\_534, Uploaded 28th April 2017, (last visited: 17th of May 2017)
\bibitem{pick_up_the_tempo}
Podington Bear, "Pick Up The Tempo", http://freemusicarchive.org/music/Podington\_Bear/Building\\/PickUpTheTempo, Uploaded 3rd April 2017, (last visited: 17th of May 2017)
\bibitem{hachiko}
The Kyoto Connection, "Hachiko (The Faithtful Dog)", http://freemusicarchive.org/music/The\_Kyoto\_Connection/Wake\_Up\_1957\\/09\_Hachiko\_The\_Faithtful\_Dog, Released 27th May 2013, (last visited: 17th of May 2017)
\bibitem{enthusiast}
Tours, "Enthusiast", http://freemusicarchive.org/music/Tours/Enthusiast/\\Tours\_-\_Enthusiast, Released 30th August 2011, (last visited: 17th of May 2017)
\bibitem{fater_lee}
Black Ant, "Fater Lee", http://freemusicarchive.org/music/Black\_Ant/\\Free\_Beats\_Sel\_3/Fater\_Lee, Uploaded 25th January 2010, (last visited: 17th of May 2017)
\bibitem{youtube}
Free video hosting and streaming service, https://www.youtube.com, (last visited: 20th of May 2017)
\bibitem{southcast}
Free internet radio broadcasting tools, https://www.shoutcast.com, (last visited: 20th of May 2017)
\end{thebibliography}
% that's all folks
\end{document}
\grid