Code Monkey home page Code Monkey logo

nova's Introduction


Build CI

A cryptography application for images based on chaotic maps

Report Bug · Request Feature

Table of Contents

About The Project

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)

Product Name Screen Shot

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.

Built With

Getting Started

Download

Download the latset stable distribution for your OS.

windows 10 macos linux

Usage

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.

Remarks

  • 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.

Security

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 2^{192} = 10^{57} keys in total which is large enough to resist any kind of brute force attackes. (infact 10^{57} 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

Examples

Original Encrypted

Valid inputs

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

    \lambda \in [0,4], \lambda_{chaos} > 3.6

    x \in [0,1]

  • Double humped map

    \lambda \in [0, \frac{8}{c^3}]

    x \in [0, 2c]

    exact chaotic regions will depend on c, as an example for c = 1, \lambda_{chaos} > 3.2.

  • 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.

Roadmap

  • Adding more maps to choose from.
  • Histograms and comaprisons right inside the app.
  • Encryption of formats and files other than images.

Development

If you would like to develop a new feature or see how the code is running under the hood follow these steps.

Prerequisites

  • Node

    Install node from the offical mirror - this comes with npm too.

Installation

  • 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

C++ implementation

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.

License

GNU GENERAL PUBLIC LICENSE Version 2.

Read more

Contact

[email protected]

nova's People

Contributors

hussamsh avatar

Stargazers

 avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.