I've been looking into different ciphers that require very minimal computation power (calculator, deck of cards, index cards and a pencil), i.e. hand ciphers. For the most part all methods typically discussed are considered insecure with the advent of computers. Searching for patterns, testing against linguistic statistics, etc. are all simple to perform with computers let alone just having a small key space and not requiring a lot of operations (which is a requirement of a hand cipher).
So I was thinking, what if you were to incorporate a Block Cipher Mode into a hand cipher. How much more secure would it become? Most BCM don't require a lot of additional effort so the power required by a human wouldn't be ridiculous. And hopefully they would provide some protection from the operations a computer can do to intelligently decipher the key/plaintext.
If we allow both squares to use all upper case letters and 0-9 we have 36 characters possible in a 6x6 square. That is a key space of
36! x 36! = 1.378e83
A 256 bit key would be
2^256 = 1.158e77 so I'd think our hand cipher has a pretty good start.
I picked Output Feedback Mode because you can't perform parallelized decryption and it contains a single operation. There are lots of modes but I thought this would be simple enough for the point. Pick a better one, my use here is just to get rid of the fact that Two-Square is just a map between Ciphertext and Cleartext.
Lets say we encrypt a 10 character message. Its very short, can't really use any type of analysis on the data to guess at the key or plaintext (even though the BCM would hopefully resolve those concerns). For really simple math, lets make the following assumptions for the operations required to perform the decryption:
- Block Cipher Encryption: 1 operation per character (its a lookup table of two points)
- XOR Encryption and Plaintext/Ciphertext: 1 operation per character
To make these even more simple, we'll assume there is no cost for loading data, or anything else. Not realistic but I/O is always a bottleneck in anything we do so we'll skip it.
A 10 character Ciphertext would require 20 operations to decrypt assuming you had the key. If we say that the average brute force method should take half of the key space to break a system we'd have
20 * (1.378e83 / 2) = 1.378e84 operations
Looks like the fastest i7 chip currently can do 240,000 MIPS so bad math shows us that
1.378e84 ops / 240,000 MIPS = 5.742e72 seconds
So what is it that I'm missing here because that seems like a pretty simple algorithm, with a huge load of work to brute force even for a very small message. I know I'm using rough numbers, but even 1/1,000,000 of that is still a huge amount of time. If the Block Cipher Mode can allow for even larger messages without giving away statistical information about the message, wouldn't this constitute a pretty secure method of encryption? And because humans are slow and lazy, no one would really want to encrypt huge tomes of data by hand. So really a short letter shouldn't be that simple to crack.
Just to make it a little more clear, here is the Wikpedia image of Output Feedback:
The Block Cipher Encryption step would just be using the Two-Square cipher (rather than something like AES). So basically my question boils down to, if you have a big enough key space, a small enough cipher text, can a very simple encryption algorithm provide security?
Each character can be mapped to a numerical value. A=1, B=2, 0=27, etc. Since XOR is a little difficult for the human brain to perform, you could add two characters together on encryption and subtract them on decryption.
A+B=C, C-B=A. If you roll over the end of your list, you start at the beginning.
8 + C = B Subtraction works the same way.
The question is really about the fact that most classical ciphers had flaws based on their dependence on the clear text and independence on other cipher text or any other data. For example, if two characters in clear text appear in the same block multiple times, they produce the same cipher text values. But what if these classic ciphers were used for pseudo random stream generation? Unless you are generating large amounts of data, shouldn't many of the flaws of classic ciphers be minimized or completely removed?