пожалуйста, возвращайтесь позднее
пожалуйста, возвращайтесь позднее
Now that we've seen a few examples of historic cyphers, all of which are badly broken, we're going to switch gears and talk about cyphers that are much better designed. But before we do that, I want to first of all, define more precisely what a cypher is. So first of all, a cypher is actually, remember a cypher is made up of two algorithms. There's an encryption algorithm and a decryption algorithm. But in fact, a cypher is defined over a triple. So the set of all possible keys, which I'm going to denote by script k, and sometimes I'll call this the key space, it's the set of all possible keys. There's this set of all possible messages and this set of all possible cypher texts. Okay, so this triple in some sense defines the environment over which the cypher is defined. And then the cypher itself is a pair of efficient algorithms e and d. E is the encryption algorithm; d is the decryption algorithm. Of course, e takes keys and messages. And outputs cipher texts. And the decryption algorithm takes keys in cycrotexts. Then outputs messages. And the only requirements is that these algorithms are consistent. They satisfy what's called the correctness property. So for every message in the message space. And every key. In the key space, it had better be the case that if I encrypt the message with the key K and then I decrypt using the same key K I had better get back the original message that I started with. So this equation here is what's called the consistency equation and every cypher has to satisfy it in order to be a cipher otherwise it's not possible to decrypt. One thing I wanted to point out is that I put the word efficient here in quotes. And the reason I do that is because efficient means different things to different people. If you're more inclined towards theory, efficient means runs in polynomial time. So algorithms e and d have to run in polynomial time in the size of their inputs. If you're more practically inclined, efficient means runs within a certain time period. So for example, algorithm e might be required to take under a minute to encrypt a gigabyte of data. Now either way, the word efficient kind of captures both notions and you can interpret it in your head whichever way you'd like. I'm just going to keep referring to it as efficient and put quotes in it as I said if you're theory inclined think of it as [inaudible] inclined and otherwise think of it as concrete time constraints. Another comment I want to make is in fact algorithm E. It's often a randomized algorithm. What that means is that as your encrypting messages, algorithm E is gonna generate random bits for itself, and it's going to use those random bits to actually encrypt the messages that are given to it. On the other hand the decrypting algorithm is always a terministic. In other words given the key and the cypher text output is always the same. Doesn't depend on any randomness that's used by the algorithm. Okay, so now that we understand what a cypher is better, I want to kind of show you the first example of a secure cypher. It's called a one time pad It was designed by Vernam back at the beginning of the twentieth century. Before I actually explain what the cyper is, let's just state it in the terminology that we've just seen. So the message space for the Vernam cypher for the one-time pad is the same as the cypher text space which is just the set of all ended binary strings. This, this just means all sequences of bits, of zero one characters.