A cryptography application for images based on chaotic maps
Report Bug
·
Request Feature
- Table of Contents
- About The Project
- Getting Started
- Security
- Examples
- Valid inputs
- Roadmap
- Development
- C++ implementation
- License
- Contact
Nova's idea is to become a software equivalent for a part of my research on hardware implementations of chaotic ciphers, it utilizes chaotic maps
and pixel by pixel encryption algorithms to cipher images.
I have already published part of my research if you would like to read more
CLA based Floating-point adder suitable for chaotic generators on FPGA on IEEEXplore
Double humped based image encryption system on FPGA (under review)
Nova currently implements three chaotic maps
- Logistic map Based on Robert May's work back in 1976, the logistic map is the most iconic and heavily researched chaotic maps in his history.
- Double humped map Popularized by Coiteux in 2014, the double humped map shows a double hump in it's first iteration - hence the name - and exhibits some unique behavior that mkes it highly suitable for cryptographic operations.
- Hénon map Another widely recognized map, introduced by Micheal Hénon as a simplified model of the Poincaré section of the Lorenz model.
Download the latset stable distribution for your OS.
See the attached gif above.
Step 1 ) Choose the desired image for encryption / decryption by drag-drop or clicking browse in the designated area.
Step 2 ) Enter the desired params for your choosen map as well as an output directory for the processed image.
Step 3 ) Press Encrypt / Decrypt and wait for your image to be processed. Once finished you will find the processed image in the output directory with a suffix of either _encrypted / _decrypted.
-
It is highly recommended to always turn on the resize option mainly because encryption performance is inversly propotional with the number of pixels an image has. The only time you need to disable resizing is when pixel information is critical but that will result in a much reduced perfomance.
-
Values choosen for each map must be valid see this section to learn more.
-
Make sure when decrypting to enter the exact same values used for encryption, any simple variation or mismatch will result in decryption not being successful.
One aspect of measuring the security of any encrypton is called key space analysis
which is simply the number of keys - permutations - that an attacker has to through in order to find the parameters your are using.
A map like the double humped map has three input parameters at 64 bits length yields it's size to be 192 bits long which constitues a key space of keys in total which is large enough to resist any kind of brute force attackes. (infact is larger than the total number of atoms in our galaxy!)
Of course there are other aspects of measuring security for an encryption system such as entropy, key sensitivity analysis, differential attacks ... etc. For a thorough analysis of our Double humped map example, read this journal
Original | Encrypted |
---|---|
Each chaotic map has certain valid ranges that it can operate within. For successful encryption, you need to choose values such that the ouptut of the map will be chaotic.
-
Logistic map
-
Double humped map
-
For the Henon map there is no way - as far as I have researched - to check wether the initial parameters will diverge to the attractor or infinity, therfore the encryption is stopped anytime the sequence diverges to infinity.
- Adding more maps to choose from.
- Histograms and comaprisons right inside the app.
- Encryption of formats and files other than images.
If you would like to develop a new feature or see how the code is running under the hood follow these steps.
-
Node
Install node from the offical mirror - this comes with
npm
too.
-
Fork the project / Download
-
Install NPM packages
cd Nova npm install
-
Build project
npm run build
or to watch your files
npm run watch
-
Test
Test to see that everything is working
npm run test
-
Run
npm run start
I have implemented this project in c++ which runs from CLI and perofrms at 3 - 5 times the speed of this implementation in javascript. Check it out in this github repo.
GNU GENERAL PUBLIC LICENSE Version 2.