OneTime: An Encoder/Decoder Using The "One-Time Pad" Method
Download OneTime version 1.110
OneTime is an open source encryption program that uses the one-time pad algorithm to allow two parties to communicate securely, without worrying about unauthorized people listening in. OneTime compresses plaintext input to save pad, has features that assist with the bureaucracy of pad management, and comes with built-in help. It is written in the Python programming language and requires a Python interpreter to run.
To use OneTime reliably, you need a source of good random data. On modern Unix systems, the /dev/random device is probably good enough (I haven't done the math myself, I'm just taking other people's word for it). On non-Unix systems, you're on your own. Whatever your source of random data, store the data in a file (that's the "pad") and point to it using OneTime's -p option when you encrypt; the recipient must use the same pad to decrypt, of course. Note that the one-time pad method depends completely on the quality of the pad data; if the pad is not truly random, the security of your messages cannot be guaranteed. Never encrypt different plaintexts with the same stretch of pad — doing so could reveal some or all of the used pad to eavesdroppers. OneTime's default behavior is to always avoid reusing pad data, unless you tell it otherwise.
OneTime was written by Karl Fogel and is in the public domain.
Here is the output of 'onetime --intro':
Encoder/decoder for one-time pads. Run 'onetime --help' for usage. The usual public-key encryption programs, such as GPG, are probably secure for everyday purposes, but their implementations are too complex for all but the most knowledgeable programmers to vet, and anyway there are too many vulnerable steps in the supply chain between GPG's authors and the end user. Hence this script, OneTime, a simple encryption program that works with one-time pads. If you don't know what one-time pads are, you probably wouldn't be able to use them securely, so this program is not for you. If you do know what they are and how to use them, OneTime will take care of some of the pad-management bureacracy for you. It avoids re-using pad data (except when decrypting the same encrypted message twice, of course) by maintaining records of pad usage in ~/.onetime/pad-records. And if you keep your ~/.onetime configuration area under version control with Subversion or CVS, OneTime will automatically update it to get the latest pad usage records before using a pad, and will commit new records after using a pad. Thus, by sharing a single configuration area via version control, you and your interlocutors can transparently avoid the sin of pad range reuse. See http://en.wikipedia.org/wiki/One-time_pad for more information about one-time pads in general. OneTime is written by Karl Fogel and is in the public domain.
And here is the output of 'onetime --help':
OneTime version 1.110, an encoder/decoder for one-time pads. Standard usage:
onetime -e -p PAD INPUT (encrypt; write output to 'INPUT.onetime')
onetime -d -p PAD INPUT.onetime (decrypt; output loses '.onetime' suffix)
Other usage modes:
onetime [-e|-d] -p PAD INPUT -o OUTPUT (both INPUT and OUTPUT are files)
onetime [-e|-d] -p PAD INPUT -o - (output goes to stdout)
onetime [-e|-d] -p PAD (input from stdin, output to stdout)
onetime [-e|-d] -p PAD -o OUTPUT (input from stdin, output to OUTPUT)
OneTime remembers what ranges of what pad files have been used, and avoids
re-using those ranges when encoding. Because OneTime compresses plaintext
input to save pad, encoding and decoding are not symmetrical; thus,
OneTime needs to be told whether it is encoding or decoding (-e or -d).
All options:
-e Encrypt
-d Decrypt
-p PAD | --pad=PAD Use PAD for pad data.
-o OUT | --output=OUT Output to file OUT ("-" for stdout)
--offset=N Control the pad data start offset
-n | --no-trace Leave no record of pad usage in your config
-C DIR | --config=DIR Specify DIR (instead of ~/.onetime) as config area
--no-vc Ignore SVN/CVS control of the config area
--intro Show an introduction to OneTime and one-time pads
-v | -V | --version Show version information
-? | -h | --help Show usage
OneTime is under version control at http://svn.red-bean.com/repos/onetime/trunk/,
ViewVC repository browsing at
http://svn.red-bean.com/viewcvs/onetime/.