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