I want to generate a truly random one-time pad as fast as possible, but without the use of any electrical or any other complicated device. What is the fastest way to do that?

  • 3
    $\begingroup$ Take 128 coins and put them in a container , shake vigorously for 30 seconds. Reach into the container without looking ( ;-) ) and withdraw the coins one by one , marking down on a piece of paper heads or tails . You will now have a perfectly random 128 bit key. $\endgroup$ – William Hird Jul 19 '18 at 13:04
  • $\begingroup$ How large a OTP are you after? Clearly without electricity, kBytes of material is going to be tricky & boring. $\endgroup$ – Paul Uszak Jul 19 '18 at 21:14
  • $\begingroup$ @PaulUszak I disagree. A dozen 120-sided dice in a box can be used to quickly get a lot of numbers. $\endgroup$ – forest Jul 20 '18 at 4:13
  • $\begingroup$ @PaulUszak OTP should be used to send small text messages. Nearly 100 messages. $\endgroup$ – vasili111 Jul 20 '18 at 8:21
  • 2
    $\begingroup$ @PaulUszak Wait, what? An OTP doesn't have a "security level". A 112,000 bit OTP doesn't have a "security level" of $2^{112000}$, because it's already information-theoretic secure... $\endgroup$ – forest Jul 20 '18 at 22:15

We are going to generate a large number of truly random letters for use as a one-time pad (sometimes also referred to as Vernam Cipher).

Get your hands on about fifty six-sided dice--they are easy to order from a gaming company--and a shakeable box with a lid, and the box is about 30 centimeters square.

Build a random table: on a piece of paper, draw or print a table with six columns and six rows. Number the columns and rows, 1 to 6. Doing that sequentially should be fine. Put the dice in the box and shake, rattle, twist, and roll--use your own judgment. This step should not be short. Let the dice fall to one side of the bottom of the box and put them in rows of two. Now start filling in your table according to the pairs of dice aligned in the box. Row/Column. 1/4 A, 4/3 B, 5/1 C, etc. Keep going until all letters of your alphabet have been entered. If you are using a Russian alphabet, you will have three empty spaces. If you are using an English alphabet, you will have ten empty spaces.

Generate your key: Shake, rattle, twist, and roll--consult the table to get your results: 5/1... C | 6/2... X | 1/1... P | etc. Repeat. Don't take any shortcuts. Don't look at your results and say they are not random because there are too many of one number next to each other in the box. This is what it can sometimes look like. Don't introduce bias.

Secure your key: physical security is an important issue now. You have to protect that key against compromise. If you can also share that key securely, then the traffic you create will at least have been enciphered with a real one-time pad.

Furthermore: you also have two additional problems--how will you authenticate your message, and will it have integrity?


At the risk of providing a common sense answer:

Buy Dice: Buy a bunch of dice used in role playing games like Dungeons and Dragons. If you are making a pad for basic Latin characters, say A to Z, upper and lower case, digits, and a handful of punctuation, you might need (26 upper + 26 lower + 10 digits + some punctuation + some special controls like page number or signature per message) = a bit under 100. That means two differently colored ten-sided dice per character. If you want to encode bytes (0-255), use two eight-sided and a four-sided die. If you just want a tiny vocabulary of a few hundred words, then the whole message would be in each set of dice.

Build a physical die rack: You want to do a bunch of numbers at once, not having to stop and roll over and over. Sounds fancy? Nah, just use a plastic storage box with separate compartments like one of these. Put one set of dice in each compartment. You should be able to shake the whole box at once and be able to read one number per compartment without opening it.

Build your empty book: Make an empty form to print with grids of numbers the same size as your die rack. You probably want to plan on fold and cut it up in a tricky way to make a small book that would fit in your wallet or shoe. Make enough copies of the empty form.

Fill in your book: Grab some carbon paper, take your two sheets stacked on top on some hard or throw-away surface, and start shaking your boxes. Just write them down. The carbon paper lets you write just once, and you can burn it when you are done. You probably want to number the pages. You can include a key or table for faster deciphering; obscurity isn't your security.

Agree on your protocol: Agree on how the messages will be passed in the first place. Funny fliers on a bulletin board with numbers in the pictures? Radio? If you can put the encrypted messages in public then its hard to see who is talking to whom. Decide if you both plan to rip out and dispose of pages after one use. Do you mention which message was last received in your messages?

Pass and secure your key: This can be the hard part; if anyone else sees the book they can pretend to be the sender.

Practice: Send stupid messages back and forth for a while, figuring out which coffee shops pull down notices, learning to encode and decipher quickly, noticing how to grab the encrypted text without being too obvious. Safely retrieving your book, or at least a page from it. Make it fun.

This can be fun hobby for people, passing little notes around, making inside jokes, and, of course, complaining about teachers.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.