Qt-Vernam implements Vernam algorithm (OTP) to encrypt and decrypt text messages and files using message-long random keys. The OTP algorithm is proved to be invincible to all common methods of crypto-analysis.
Author
Ivan Vokhmin ,
Version
0.6.2 beta
Disclaimer
This program is a proof of concept. It was nor tested, nor certified for valuable data encryption.
Common usage case
1) Generate a keypair. 2) Give a receiver.rkey to desired person by a secure channel. 3) Encrypt a message using sender.key. 4) Send encrypted message via any insecure channel. 5) The receiver can decrypt the message securely.
Main threats
1) Message can be damaged while in transit. There is no CRC implemented. 2) Message can be altered if ANY of the key is known to man-in-the-middle.
Key generation
A key, which is used in OTP, must have the length of encrypted message. There is three algorithms to generate the key: Fast - uses built-in QT random number generator. May be weak depending on implementation. Normal - uses fast algorithm + making it more safe by taking random bits from screenshot. Keys are merged by using bitwise XOR. Hardened - uses normal algorithm + making it more safe by taking random user input. When this option is selected, an input dialog will be presented to user while the key is generated, and user must input any symbols using keyboard. These symbols (and the time between inputs) will be used for key hardening (with XOR).
Key types
There are two kinds of keys which are generated - sender.key and receiver.rkey. Sender key is used to encrypt message, receiver key - to decrypt them. The only difference between these keys is that sender keys also stores the number of bits already encrypted, to ensure that no part of the key will be used twice. The key can be used unless the number of used bits + message or file length is less than key size. Otherwise the key is depleted and a new keypair should be used. While receiver.rkey can be write-protected, sender.key must be always writeable to ensure that the key usage data is written.
Key size
One of main generation options is the key size. The recommended key size is about 100 mb.
Message encryption
To encrypt a message, use encrypt option in file menu, then select mode (file or message). If the mode is set to message, input text message in given text field. If the mode is file, use select file button to select one file to encrypt. To proceed with encryption, the valid (undepleted) sender key and valid output file name must be supplied.
Message decryption
To decrypt an encrypted message ( *.ems ), use decrypt option in file menu, where the appropriate receiver key and the path to message must be set. After those variables are set, decrypt! button must be pressed. The type of message is determined automatically. If the message contains text, it will be displayed in text field. If message contains file, a "save as" dialog will be presented, with the encrypted file name as a hint, however, user can give file any name.
Key explorer
To present sender key information, key explorer is used. It is located in the main program window. To view key information - use key selection button. If the key is valid, the following data is presented: key length, used bytes amount, remaining key length.
Known bugs
May fail at very big keys (~1 gb).
Next version features plan: - optimize generators to work with portions of key, not the whole key at once. This will decrease speed, but improve stability with large ( >500 mb ) keys on machines with low memory.Last changelog:
0.6.2 Misc ui improvements and lots of fixes 0.6.1 Random generator fix for more random init 0.6.0 Basic version with async key generators 0.5 Basic version
Ratings & Comments
0 Comments