Download Latest Version Cyberbit (2.7 MB)
Email in envelope

Get an email when there's a new version of Cyberbit

Home
Name Modified Size InfoDownloads / Week
cyberbit_1_1.zip 2013-04-19 2.7 MB
cyberbit_1_1.tar 2013-04-19 3.4 MB
README.txt 2013-03-18 9.2 kB
cyberbit_1_0.tar.gz 2013-03-10 2.6 MB
cyberbit_1_0.zip 2013-03-10 2.6 MB
Totals: 5 Items   11.4 MB 0
INTRODUCTION

Cyberbit lets you transmit a secret message to an intended person in an interesting manner.
The secret message is an 1-bit deep black & white image. The message can contain 
written text, a drawing, a secret code etc. Using Visual Cryptography the
application splits the secret message into two "shadow images" called <<shares>>.

Any of the two shares will be embedded into a "normal" image file called by tradition
<<vessel>>. You can use a method of hand to send the two vessels to your correspondent.
For instance you can post one vessel image on facebook. The other vessel image can be 
sent as an attachment of an e-mail. The vessel images can be 8-bit gray-level 
images or 24-bit deep true-color images.
Anyone who can correctly spot the two vessels and knows the dimensions of the image
containing the secret message will be able to decrypt the secret message using the 
Cyberbit application.
 
The application uses Visual Cryptography and a Steganography method called Bit-Plane
Complexity Segmentation. Written in as a command line application in Python, Cyberbit
allows you to experiment with Visual Cryptography and BCPS. 

For more information considering the algorithms used see my article in Dr. Dobb's Journal:
http://drdobbs.com/security/201804177

LICENSE

    Copyright (C) 2011 Daniel Stoleru

    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.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, go to http://www.gnu.org/licenses/gpl-2.0.html
    or write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

PREREQUISITES

Cyberbit is a Python application, so you'll have to have a Python
interpreter installed on your machine. If not, just go to www.python.org
and download and install the last Python 2.x version available.

NOTE. The application wasn't tested with any Python 3.x interpreter

Also, you'll need to install the Numerical Python package - NumPy. Go to 
http://numpy.scipy.org/ download the NumPy package corresponding
to your Python version and operating system. Follow the installation 
instructions and install the package on your system.

Another package you'll need is Python Imaging Library - PIL.
PIL is available at: http://www.pythonware.com/products/pil/
Grab the package corresponding to your Python version and
operating system, follow the installation instructions and
install the package.

INSTALLATION

Cyberbit doesn't need any special installation procedure.
Just download the corresponding archive from https://sourceforge.net/projects/cyberbit/
and unpack it into a directory of your choice.

After unpacking the archive you should have the following directory structure into
the chosen directory:

	 |.
	 | ..
	  | -> docs
	  | -> img
	  | -> input
	  | -> logs
	  | -> src
	  | -> tmp

In the <<src>> directory you'll find the folling Python source code files:

bitmap.py
compress.py
embedwm.py
extractwm.py
greylevel.py
utils.py

These files contain the whole development of the Cyberbit application.

In the <<input>> subdirectory I included some example files that can be used to test Cyberbit.
The logging and tracing information can be found in the <<logs>> subdirectory. Cyberbit will log the 
embedding/extracting information depending on the operation chosen. Since you'll like to experiment
with BCPS, it might be interesting to find out how much information will be written in which regions
of the image and in which bit-planes. In the decryption process is important to know if the 
information is properly extracted and if the secret message can be properly remade.

The <<img>> and <<tmp>> subdirectories can contain some temporary files. <<docs>> will contain some
documentation.

PROGRAM USE

You can use Cyberbit for:

1. Encryption --> split the secret message using a 2-out-of-2 Visual Cryptography Scheme and embedd 
   			  	  any of the two resulted shares into the dedicated vessel image 

For doing so open a shell depending on your operating system and call:

$ python  embedwm.py [options]

where

Options:
  -h, --help            show this help message and exit
  -x IMAGE1, --vessel1=IMAGE1
                        the first vessel you want to embed information in as
                        image file in the format filename.ext
  -y IMAGE2, --vessel2=IMAGE2
                        the second vessel you want to embed information in as
                        image file in the format filename.ext
  -w MARK, --watermark=MARK
                        the message you want to embed. Usually a 1-bit deep
                        bitmap image
  -l LOGFILE, --log=LOGFILE
                        path to logfile
  -o OUTNAME, --output=OUTNAME
                        keyword in the outputfiles name
  -c CMPL, --complexity=CMPL
                        lowest complexity limit
  -b, --bitplanes       show only the bitplanes of the image and exit
  -t, --istruecolour    is a 24-bit true colour image

NOTE. 1. You'll have to have the Python interpreter into the PATH
      environment variable.
	  2. Use the -t flag if you work with 24-bit true-color images

EXAMPLE

$ python embedwm.py -x ../input/smandril_gray.pgm -y ../input/slena.pgm -w ../input/vcrypt_message.bmp

The application prints some information into the shell. Calling it as in the eaxmple above, you'll become:

NOTE: no logfile specified. Set by default to: ../logs/encrypt_130303_162840.log
Start processing image ../input/smandril_gray.pgm
Format: PPM Size: (256, 256) Mode: L
Message size:  (176, 176)
Start processing image ../input/slena.pgm
Format: PPM Size: (256, 256) Mode: L
Message size:  (176, 176)

Very important is the <<Message size>>. You have to send this information to your correspondent 
in order to enable her to extract the secret information.

If the programm runs successfully you'll see on the screen the two vessel images containing the 
embedded information. Also the files containing the marked images are saved in the <<img>> directory.

2. Decryption --> extract the two shares of the secret information from the vessel images.  
   			  	  In a 2-out-of-2 Visual Cryptography Scheme you have to print the two shares 
				  onto separate transparencies. Supperimposing the obtained transparencies you'll be
 				  able to visually decrypt the secret message. Cyberbit simulates this operation and
				  shows the decrypted message in a separate window.

The decryption can be done in the shell calling:


$ python extractwm.py [options]

where

Options:
  -h, --help            show this help message and exit
  -x VESSEL1, --vessel1=VESSEL1
                        the first vessel image image specified as filename.ext
  -y VESSEL2, --vessel2=VESSEL2
                        the second vessel image image specified as
                        filename.ext
  -i MAXX, --length=MAXX
                        the length of the embedded image
  -j MAXY, --width=MAXY
                        the width of the embedded image
  -l LOGFILE, --log=LOGFILE
                        path to logfile
  -r TRACEFILE, --trace=TRACEFILE
                        path to tracefile
  -c CMPL, --complexity=CMPL
                        lowest complexity limit
  -t, --istruecolour    is a 24-bit true colour image

EXAMPLE

$ python extractwm.py -x ../input/marked_slena_gray.pgm -y ../input/marked_smandril_gray.pgm -i 176 -j 176 

NOTE
		1. As for embedding, Cyberbit will write some information at command line. For the example 
		   call above you'll become:

		   NOTE: no logfile specified. Set by default to: ../logs/decrypt_130303_170619.log
		   NOTE: no trace file specified. Set by default to: ../logs/trace_130303_170619.log
		   Start processing vessel ../input/marked_slena_gray.pgm
		   Format: PPM Size: (256, 256) Mode: L
		   Embedded information successfull extracted!
		   Start processing vessel ../input/marked_smandril_gray.pgm
		   Format: PPM Size: (256, 256) Mode: L
		   Embedded information successfull extracted!

		 2. Remember the size of the secret message image. This information is known to the person
		 	encrypting the information and will be transmited to the correspondent. The size of the 
			secret message image (specified in the parameters -i and -j) is important for the 
			decryption algorithm. Having the size the algorithm can exactly determine if the 
			correct number of squares was extracted (and therefore the algorithm can stop). On the 
			other hand, this information discloses nothing considering the content of the secret
			message.   

If the application finishes successfully you'll see on the screen the two marked images, the 
extracted shares and the reconstructed message.

SUPPORTED PLATFORMS

Windows - XP/Vista/7
CygWin
Linux
Sun Solaris
Source: README.txt, updated 2013-03-18