There is a less naive steganography tool in the Debian repos named steghide. According to the manual:<p><pre><code>       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  fol‐
       lows:  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.
</code></pre>
I wonder how hard it would be to detect (not decode) content hidden by steghide.