gifshuffle(1)


NAME

   gifshuffle - GIF colourmap steganography program

SYNOPSIS

   gifshuffle  [  -CQS1  ]  [  -p  passwd  ]  [  -f  file | -m message ] [
   infile.gif [ outfile.gif ]]

DESCRIPTION

   gifshuffle is a program  for  concealing  messages  in  GIF  images  by
   shuffling  the colourmap. A shuffled image is visibly indistinguishable
   from the original. gifshuffle works  with  all  GIF  images,  including
   those with transparency and animation.

   Consider  a  pack  of 52 cards. There are 52 factorial ways to sort the
   pack, which means  that  any  particular  ordering  of  the  cards  can
   represent  a  number  in  the range [0, 52!-1]. In other words, given n
   cards, you can store approximately log2(n!) bits of  information  based
   on their ordering.

   GIF  images  contain a colourmap with up to 256 entries, resulting in a
   maximum storage capacity of 1675 bits. The image itself consists  of  a
   compressed  array  of indices into this colourmap. To conceal a message
   within a GIF image the following steps take place.

   1.     Start with the message you want to  conceal,  specified  on  the
          command  line  or  in a file. Optionally compress and/or encrypt
          this message. You are then left with a sequence of 1's and 0's.

   2.     Prepend a 1 to this sequence,  giving  you  a  binary  number  m
          (probably quite large).

   3.     Next  take  a look at the GIF image that you want to conceal the
          message in.  Count the number of unique colours  in  the  image,
          and  call  the  value  n.   If  m > n!-1 then the message is too
          large, and the procedure will be aborted.

   4.     The colours  in  the  colourmap  are  first  sorted  into  their
          "natural"  order  (except  when  encryption  is being used - see
          details below).  Each RGB colour is assigned the  value  (red  *
          65536  +  green  *  256  +  blue),  and  the  colours are sorted
          according to these values. Any duplicate colours are removed.

   5.     Iterate i through  the  values  1  ..  n.  Each  colour  i-1  is
          allocated a target position (m mod i), then m is divided by i.

   6.     Each colour is then in turn inserted into a new colourmap at its
          target  position.  Colours  previously  occupying   the   target
          position and above are moved up one place.

   7.     If  the  size  of  the  colourmap  is greater than the number of
          unique colours, then the colourmap will be padded with the  last
          colour from the original colourmap.

   8.     The  image component of the GIF is then uncompressed, the colour
          indices are re-mapped to the new colourmap, and the image is re-
          compressed. For animated GIFs this is repeated for each image.

   Extracting  a  hidden  message  follows  a  similar  procedure,  but in
   reverse.  The ordering of the colourmap is used to construct  a  binary
   number,  which  is  then  optionally  decrypted and uncompressed before
   being output.

   gifshuffle  provides  rudimentary  compression,  using  Huffman  tables
   optimised  for  English  text.  However, if the data is not text, or if
   there is a lot of data, the use of  the  built-in  compression  is  not
   recommended,  since an external compression program such as compress or
   gzip will do a much better job.

   Encryption is also provided, using  the  ICE  encryption  algorithm  in
   1-bit   cipher-feedback   (CFB)   mode   to  encrypt  the  data  (after
   compression).  Because of ICE's arbitrary key size,  passwords  of  any
   length  up  to 1170 characters are supported (since only 7 bits of each
   character are used, this means keys up to 1024-bytes are supported).

   As of gifshuffle 2.0 encryption is also applied to the ordering of  the
   colours  in  the  colourmap. Instead of using their "natural" ordering,
   the ordering of their encrypted hash is used. This has the  benefit  of
   making  colourmaps  look random even when there is only a small message
   concealed. To disable this feature (which is incompatible with  version
   1 of gifshuffle) use the -1 option.

   If  a message string or message file are specified on the command-line,
   gifshuffle will attempt to conceal the message in the  file  infile.gif
   if  specified, or standard input otherwise.  The resulting file will be
   written to outfile.gif if specified, or standard output if not.

   If no message string is provided,  gifshuffle  attempts  to  extract  a
   message  from  the input file. The result is written to the output file
   or standard output.

OPTIONS

   -C     Compress the data if concealing, or uncompress it if extracting.

   -Q     Quiet mode. If not set, the program reports statistics  such  as
          compression  percentages  and  amount of available storage space
          used.

   -S     Report on the amount of space available for  hidden  message  in
          the  GIF colourmap. This is calculated from the number of unique
          colours in the image.

   -1     Retain compatibility with version 1 of  gifshuffle  by  ordering
          colours  using  their  "natural"  ordering,  rather  than  their
          encrypted ordering. This is  only  relevant  if  a  password  is
          specified.

   -p password
          If  this  is  set, the data will be encrypted with this password
          during concealment, or decrypted during extraction.

   -f message-file
          The contents of this file will be concealed  in  the  input  GIF
          image.

   -m message-string
          The  contents  of this string will be concealed in the input GIF
          image.  Note that, unless a newline is somehow included  in  the
          string,  a  newline  will  not  be  printed  when the message is
          extracted.

EXAMPLES

   The following command will conceal the message "Meet me at  6"  in  the
   file  infile.gif,  with  compression,  and  encrypted with the password
   "hello world". The resulting text will be stored in outfile.gif.

          gifshuffle -C -m "Meet me at  6"  -p  "hello  world"  infile.gif
          outfile.gif

   To extract the message, the command would be

          gifshuffle -C -p "hello world" outfile.gif

   Note that the resulting message will not be terminated by a newline.

   The storage capacity of a file can be determined with the -S option.

          gifshuffle -S infile.gif

AUTHOR

   This  application  was  written  by Matthew Kwan, who can be reached at
   mkwan@darkside.com.au





Opportunity


Personal Opportunity - Free software gives you access to billions of dollars of software at no cost. Use this software for your business, personal use or to develop a profitable skill. Access to source code provides access to a level of capabilities/information that companies protect though copyrights. Open source is a core component of the Internet and it is available to you. Leverage the billions of dollars in resources and capabilities to build a career, establish a business or change the world. The potential is endless for those who understand the opportunity.

Business Opportunity - Goldman Sachs, IBM and countless large corporations are leveraging open source to reduce costs, develop products and increase their bottom lines. Learn what these companies know about open source and how open source can give you the advantage.





Free Software


Free Software provides computer programs and capabilities at no cost but more importantly, it provides the freedom to run, edit, contribute to, and share the software. The importance of free software is a matter of access, not price. Software at no cost is a benefit but ownership rights to the software and source code is far more significant.


Free Office Software - The Libre Office suite provides top desktop productivity tools for free. This includes, a word processor, spreadsheet, presentation engine, drawing and flowcharting, database and math applications. Libre Office is available for Linux or Windows.





Free Books


The Free Books Library is a collection of thousands of the most popular public domain books in an online readable format. The collection includes great classical literature and more recent works where the U.S. copyright has expired. These books are yours to read and use without restrictions.


Source Code - Want to change a program or know how it works? Open Source provides the source code for its programs so that anyone can use, modify or learn how to write those programs themselves. Visit the GNU source code repositories to download the source.





Education


Study at Harvard, Stanford or MIT - Open edX provides free online courses from Harvard, MIT, Columbia, UC Berkeley and other top Universities. Hundreds of courses for almost all major subjects and course levels. Open edx also offers some paid courses and selected certifications.


Linux Manual Pages - A man or manual page is a form of software documentation found on Linux/Unix operating systems. Topics covered include computer programs (including library and system calls), formal standards and conventions, and even abstract concepts.