NAME

unsnoopable.pl - Completely unsnoopable messaging

VERSION

$Revision: 1.006 $
$Date: Tue Jun 20 15:40:10 PDT 2017 $

SYNOPSIS

unsnoopable.pl

DESCRIPTION

unsnoopable.pl (Unsnoopable) is a simple application for end-to-end completely unsnoopable messaging. It is intended to be run on air-gapped devices that are never connected to any networks and have no wireless networking hardware. Unsnoopable uses one-time pads (OTPs) for completely unbreakable encryption.

Unsnoopability goes further than unbreakability of encryption however, as a compromised device can leak plaintext even when the encryption used to transmit the message is unbreakable. This is the reason Unsnoopable is designed for use on an air-gapped devices, with a screen, text input capability, and a camera.

A new one-time pad can be generated by clicking the Generate button, and providing a name for the pad. The OTP can then be Exported by displaying it on the device's screen as a QR code. It can be Imported into the corresponding device of the person one wishes to communicate unsnoopably with, by scanning it using a camera and a QR code recognition software such as Zbar. Unsnoopable doesn't currently feature QR code scanning within the application.

To send a message, one selects an OTP from the list at the top of the application window, and clicks Send. A message can then be typed in, and it will be encrypted using the selected OTP, and displayed as a QR code for scanning. The QR code can be scanned from the screen of the air-gapped device using a regular connected smartphone and any mobile QR code scanning app. The scanned string can then be sent to the recipient using any communications medium.

The receipient can display the received message as a QR code on their own smartphone screen, scan it into their own air-gapped device (which already has the OTP shared previously) and click Receive to input the ciphertext string and view the decrypted message.

This provides not only theoretically unbreakable encryption for the message using OTP encryption, but also complete air-gapped security for the devices where the plaintext and OTPs are stored. In effect this is complete and total unsnoopability for the message over the network both while in transit, and from any network-based attacks against the recipient devices.

As with all security systems, though, there are still some caveats:

Obviously Unsnoopable can't and doesn't protect against physical attacks where the attacker has access to any of the devices on which the OTPs are stored, or visual access that would enable them to view the messages or pads on the device screens, or proximity access that would enable attacks based on leakage via electromagnetic radiation, or audio access via bugs / smartphone microphones (if the message is spoken out aloud), etc.

Physical access to the OTPs can be protected by storing them on MicroSD cards, which are small and relatively easy to keep physically secure. A small single board computer such as a Raspberry Pi would be an excellent option to deploy Unsnoopable on, as it features a MicroSD card reader and boots off the MicroSD card itself. Keeping the boot OS secure is also important - an attacker with access to the air-gapped machine's OS could put in trojans to surreptitiously save OTPs or plaintexts for later retrieval.

There's also a suitable camera module available for use with the Pi, as well as a variety of suitable small LCD screens. Indeed Unsnoopable was designed with Pi-based deployment in mind, specifically on models that don't have wireless networking hardware, such as the (non-W) Pi Zero.

The current implementation uses the Bytes::Random::Secure module to source random numbers for the one-time pads. This module uses a CSPRNG to generate random numbers, and isn't a truly random source. For really unbreakable encryption, a source of true random numbers should be used. A few devices that generate true random numbers are available commercially.

The pad length is currently set to a fixed size that is communicable in a single QR code. This limitation will be removed in future versions of the app.

SEE ALSO

http://www.unsnoopable.org

Crypt::Unsnoopable

AUTHOR

Ashish Gulhati, <crypt-unsnoopable at hash.neo.tc>

BUGS

Please report any bugs or feature requests to bug-crypt-hashcash at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Crypt-Unsnoopable. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

SUPPORT

You can find documentation for this command with the perldoc command.

perldoc unsnoopable.pl

You can also look for information at:

LICENSE AND COPYRIGHT

Copyright (c) 2017 Ashish Gulhati.

This program is free software; you can redistribute it and/or modify it under the terms of the Artistic License 2.0.

See http://www.perlfoundation.org/artistic_license_2_0 for the full license terms.