[Cryptography] 100-year-old secret revealed
Henry Baker
hbaker1 at pipeline.com
Fri Dec 4 10:35:20 EST 2015
Dear Mr. Comey, Mr. Vance, Ms. May, at al:
The one-time pad is approximately 100 years old,
and provides perfect secrecy (so long as you don't
reuse the key material).
Here's the program in C (forgive the code author's
accent; his native language is Lisp):
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[])
{long long i; /* Count # bytes processed. */
int ch1,ch2; /* The bytes from file1, file2 */
FILE *fp; /* file1=stdin, file2=fp */
if (argc != 2)
{fprintf(stderr,
"xor: wrong # of args: %d\n",
argc);
return 1;}
fprintf(stderr,
"xor: opening file %s\n",
argv[1]);
if ((fp=fopen(argv[1],"rb"))==NULL)
{fprintf(stderr,
"xor: bad file arg: %s\n",
argv[1]);
return 1;}
/* XOR stdin with fp; shortest file wins. */
for (ch1=fgetc(stdin),ch2=fgetc(fp),i=0;
(!feof(stdin)) && (!feof(fp));
ch1=fgetc(stdin),ch2=fgetc(fp),i++)
fputc(ch1^ch2,stdout);
fclose(fp); fclose(stdin); fclose(stdout);
fprintf(stderr,
"xor: bytes processed: %d\n",
(int) i);
return 0;}
Compile with: gcc -Wall -o xor xor.c
Get some key material:
head -c1024 /dev/random > key1024.bin
Make a secret message file:
echo "This is a secret message." > message.txt
Encode the message:
tail -c +123 key1024.bin | xor message.txt > message.enc
Decode the message:
tail -c +123 key1024.bin | xor message.enc > message.out
1. You probably want a *much* longer key file: gigabytes long.
Make 2 copies on USB drives; give one USB drive to your friend.
2. Replace "+123" in the encode & decode by +n; the number n
is the index number of the first *unused* key bytes.
Sincerely,
Gilbert Sandford Vernam
P.S. There is no "back door".
No tickee, no washee.
Now let me rest in peace.
More information about the cryptography
mailing list