All Projects β†’ pannous β†’ xipher

pannous / xipher

Licence: other
πŸ”’ Simple perfect xor encryption cipher πŸ”’

Programming Languages

c
50402 projects - #5 most used programming language
Makefile
30231 projects

Projects that are alternatives of or similar to xipher

Swifty
πŸ”‘ Free Offline Password Manager
Stars: ✭ 496 (+713.11%)
Mutual labels:  encryption, cipher
Node Fpe
Format preserving string substitution encryption
Stars: ✭ 17 (-72.13%)
Mutual labels:  encryption, cipher
Eth Crypto
Cryptographic javascript-functions for ethereum and tutorials to use them with web3js and solidity
Stars: ✭ 420 (+588.52%)
Mutual labels:  encryption, cipher
AES
AES for microcontrollers (Arduino & Raspberry pi)
Stars: ✭ 116 (+90.16%)
Mutual labels:  encryption, cipher
Enigmakit
Enigma encryption in Swift
Stars: ✭ 108 (+77.05%)
Mutual labels:  encryption, cipher
Enigma
Enigma cipher tool
Stars: ✭ 13 (-78.69%)
Mutual labels:  encryption, cipher
Android Goldfinger
Android library to simplify Biometric authentication implementation.
Stars: ✭ 608 (+896.72%)
Mutual labels:  encryption, cipher
Encrypt
πŸ”’ A set of high-level APIs over PointyCastle for two-way cryptography.
Stars: ✭ 199 (+226.23%)
Mutual labels:  encryption, cipher
Cape
String encryption for Arduino, limited microcontrollers and other embedded systems.
Stars: ✭ 58 (-4.92%)
Mutual labels:  encryption, cipher
Cryptii
Web app and framework offering modular conversion, encoding and encryption
Stars: ✭ 971 (+1491.8%)
Mutual labels:  encryption, cipher
Sboot stm32
Secure USB DFU1.1 bootloader for STM32
Stars: ✭ 181 (+196.72%)
Mutual labels:  encryption, cipher
shadowsocks-libev-nocrypto
libev port of shadowsocks. In this fork, encryption is optional!
Stars: ✭ 24 (-60.66%)
Mutual labels:  encryption, cipher
symmetric-encryption
Symmetric Encryption for Ruby Projects using OpenSSL
Stars: ✭ 454 (+644.26%)
Mutual labels:  encryption
JavaUltimateTools
A Large Repository Of Awesome Code For Java.
Stars: ✭ 24 (-60.66%)
Mutual labels:  encryption
php-simple-encryption
The PHP Simple Encryption library is designed to simplify the process of encrypting and decrypting data while ensuring best practices are followed. By default is uses a secure encryption algorithm and generates a cryptologically strong initialization vector so developers do not need to becomes experts in encryption to securely store sensitive data.
Stars: ✭ 32 (-47.54%)
Mutual labels:  encryption
stellar-android-wallet
An open source Android wallet for Stellar.
Stars: ✭ 31 (-49.18%)
Mutual labels:  encryption
fluffychat
πŸ‘ Decentralized chat with private messages and rooms. Messages and files are encrypted using RSA
Stars: ✭ 25 (-59.02%)
Mutual labels:  encryption
vector
Virus Ruby
Stars: ✭ 29 (-52.46%)
Mutual labels:  encryption
Python-File-Encryptor
Encrypt and Decrypt files using Python (AES CBC MODE)
Stars: ✭ 51 (-16.39%)
Mutual labels:  encryption
cfn-encrypt
πŸ”‘πŸ”β˜οΈ Cloudformation custom resource that enables creation of KMS encrypted strings and SSM secure parameters
Stars: ✭ 13 (-78.69%)
Mutual labels:  encryption

xipher πŸ”

A very simple yet powerful XOR cipher scheme

With a 'key' file containing truly random noise, this encryption is unbreakable even in theory.

The XOR cipher is so easy, every computer science student should be able to implement this cipher by heart in a couple of lines! If it is 100% secure and incredibly easy to implement, why isn't the whole world using it?

It is in fact used all over the world albeit as part of more complicated cypher schemes. The problem with the naΓ―ve application of xor is that you lose perfect security if you apply the key too often (more than once). Also for big files you need to have big keys, to avoid or minimize repetition.

This project contains a very simple Algorithm to mitigate the above limitations.

In the age of the slow Internet connections, exchanging big keys with your trustees was impractical, unless you provided your friends with the key on physical devices. These days you can just create a key which is a couple of megabytes in size and give it to your communication partners, preferably/necessarily using a secure channel/medium like a CD**.

Here is how it works:

In your Mac, Linux or Windows shell type:

git clone https://github.com/pannous/xipher.git

cd xipher

make

./bin/random > key

./bin/encrypt README.md key > encrypted

./bin/decrypt encrypted key > README.yay

Why don't we just use the existing encryption mechanisms?

Number one: trust

Do you really feel secure if you use an encryption scheme which you don't understand? Even if you have access to the source code: Do you really understand everything that happens in all steps? Are you sure that there is no backdoor somewhere?

With this project you can be perfectly sure: Look at the simple source code, understand it and compile yourself. All you need is a truly a random key. What if you don't trust the random key generator on your computer? Just xor the generated key with some other files. If you combine randomness with noise and chaos, you get almost/practically perfect randomness.

Number two: fun and insight

Sometimes the topic of encryption can get overwhelming even for people with mathematical background. Understanding the XOR operation couldn't be any simpler and writing your own encryption feels very empowering.

Number three: simplicity This scheme is arguably even simpler then the usual ssh-keygen/openssl approach. You and your friends can start right away with any arbitrary file as key to get reasonable encryption: ./bin/xor README.md any_random_file > reasonably_encrypted ./bin/xor key any_random_file > practically_perfect_key

Extra: speed Once the key is generated, the encryption and decryption runs in linear time.

CAUTION: In its current implementation once the master key is stolen* somehow, then all files encrypted with it can be deciphered. This can easily be mitigated by using several keys, but a better approach is desirable. If your key is too small or if you are using it too often, you may be reducing security. However for a key of significant size (i.e. 4GB) it is almost infinitely more likely that the key will get stolen then being reverse-engineered.

NOTE: You can increase security significantly if you xor/encrypt zipped files, as they already contain very little structure!

OUTLOOK: This encryption can also be used locally for your own files, if you put the key on a USB stick. And it can be used in the future for peer-to-peer communication applications.

PS: * Ideally you would have a little offline device which encrypts every file/keystroke that you make before it reaches your computer.

PS3: ** You can even securly share the key over the internet using perfect forward encryption, for example through extensions of Diffie Hellman. If you trust ssh/scp/sftp these might be appropriate as well.

πŸ’‘

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].