In the previous segment we talked about modular inversion and we said the Euclid's algorithm gives us an efficient way to find the inverse of an element modulo N. In this segment we're going to forward through time and we're going to move to the seventeenth and eighteenth century where we're going to talk about Fermat and Euler contributions. Before that let's do a quick review of what we discussed in the previous segment. So as usual I'm going to let N denote the positive integer and let's just say that N happens to be a n-bit integer, in other words it's between two to the n and two to the n+1, as usual we're going to let P denote a prime. Now we said that ZN is a set of integers from zero to N-1 and we said that we can add and multiply elements in the set modulo N. We also said that ZN star is basically the set of invertible elements in ZN. And we proved a simple lemma to say that, X is invertible if and only if X is relatively prime to N. And not only did we completely understand which elements are invertible and which aren't, we also showed a very efficient algorithm based on Euclid's extended algorithm, to find the inverse of an element X in ZN. And we said that the running time of this algorithm, is basically order n squared, where again, n is the number of bits of the number capital N. So as I said, now we're going to move from Greek times all the way to the seventeenth century and talk about Fermat. So Fermat did a number of important theorems. The one that I want to show you here today is the following. So suppose I give you a prime P. Then in fact for any element X in ZP star, it so happens that if I look at X and raise it to the power of P - 1, I'm a gonna get one, in ZP. So let's look at a quick example. Suppose I set the number P to be five. And I look at, three to the power of P-1. In other words, three to the power of four, Three to the power of four is 81, which in fact, is one modulo five. This example satisfies Fermat's theorem. Interestingly, Fermat actually didn't prove this theorem himself. The proof actually waited until Euler, who proved that almost 100 years later. And in fact, he proved a much more general version of this theorem. So let's look at a simple application of Fermat's theorem. Suppose I look at an element X in Z P star. And I want to remind you here that P [inaudible] must be a prime. Well, then what do we know? We know that X to the P minus one is equal to one. Well, we can write X to the P minus one as X times X to the power of P minus two. Well so now we know that X times X to the power of P minus two happens to be equal to one. And what that says, is that really the inverse of X modulo P, is simply X to the P minus two. So this gives us another algorithm for finding the inverse of X modulo a prime. Simply raise X to the power of p minus two, and that will give us the inverse of x. It turns out, actually this is a fine way to compute inverses modulo a prime. But it has two deficiencies compared to Euclid's algorithm. First of all, it only works modulo primes, Whereas, Euclid's algorithm worked modulo composites as well. And second of all, it turns out this algorithm is actually less efficient. When we talk about how to do modular exponentiations--we're gonna do that in the last segment in this module--you'll see that the running time to compute this exponentiation is actually cubic in the size of P. So this will take roughly log cube of P, whereas if you remember, Euclid's algorithm was able to compute the inverse in quadratic time in the representation of P. So not only is this algorithm less general it only works for primes, it's also less efficient. So score one for Euclid. But nevertheless, this fact about primes is extremely important, and we're gonna be making extensive use of it in the next couple of weeks. So let me show you a quick and simple application for Fermat's theorem suppose we wanted to generate a large random prime, say our prime needed to be 1,000 bits or so. So the prime we're looking for is on the order of two to the 1024 [inaudible]. So here's a very simple probabilistic algorithm. What we would do is we would choose a random integer in the interval that was specified. And then we would test whether this integer satisfies Fermat's theorem. In other words, we would test for example using the base two; we would test whether two to the power of p minus one equals one in Z p. If the answer is no, then if this equality doesn't hold, then we know for sure that the number p that we chose is not a prime. And if that happens, all we do is we go back to step one and we try another prime. And we do this again and again and again, until finally we find an integer that satisfies this condition. And once we find an integer that satisfies this condition, we simply output it and stop. Now it turns out, this is actually a fairly difficult statement to prove. But it turns out if a random number passes this test, then it's extremely likely to be a prime. In particular the probability that P is not a prime is very small. It's like less than two to the -60 for the range of 1024 bit numbers. As the number gets bigger and bigger the probability that it passes this test here, but is not a prime drops to zero very quickly. So this is actually quite an interesting algorithm. You realize we're not guaranteed that the output is in fact a prime. All we know is that it's very, very likely to be a prime. In other words the only way that it's not a prime is that we got extremely unlucky. In fact so unlucky that a negligible probability event just happened. Another way to say this is that if you look at the set of all 1024 integers, then, well, there's the set of primes. Let me write prime here. And then there is a small number of composites. That actually will falsify the test. Let's call them F for false primes. Let's call them FP, for false primes. There's a very small number of composites that are not prime and yet will pass this test. But as we choose random integers, you know, we choose one here, one here, one here, and so on, as we choose random integers, the probability that we fall into the set of false primes is so small That it's essentially a negligible event that we can ignore. In other words, one can prove that the set of false primes is extremely small, and a random choice is unlikely to pick such a false prime. Now I should mention, in fact, this is a very simple algorithm for generating primes. It's actually, by far, not the best algorithm. We have much better algorithms now. And, in fact, once you have a candidate prime, we now have very efficient algorithms that will actually prove beyond a doubt that this candidate prime really is a prime. So we don't even have to rely on probabilistic statements. But nevertheless, this Fermat test is so simple, that I just wanted to show you that it's an easy way to generate primes. Although in reality, this is not how primes are generated. As the last point, I'll say that you might be wondering how many times this iteration has to repeat until we actually find the prime. And that's actually a classic result; it's called the prime number theorem, which says that, after a few hundred iterations, in fact, we'll find the prime with high probability. So in expectation, one would expect a few hundred iterations and no more. Now that we understand Fermat's theorem, the next thing I want to talk about is what's called the structure of ZP star. So here, we are going to move 100 years into the future... Into the eighteenth century and look at the work of Euler. And one of the first things Euler showed is in modern language is that ZP star is what's called a cyclic group. What does it mean that ZP star is a cyclic group? What it means is that there exists some element G in ZP star, such that if we take G and raise to a bunch of powers G, G squared, G cubed, G to the fourth. And so on and so forth up until we reach G to the P minus two. Notice there's no point of going beyond G to the p minus two, because G to the p minus one by Fermat's theorem is equal to one, so then we will cycle back to one. If we go back to G to the p minus one, then G to the p will be equal to G, G to the p plus one will be equal to G squared, and so on and so forth. So we'll actually get a cycle if we keep raising to higher and higher powers of G. So we might as well stop at the power of G to the p minus two. And what Euler showed is that in fact there is an element G such that if you look at all of its powers all of its powers expand the entire group ZP Star. The powers of G give us all the elements in ZP star. Elements of this, of this type is called a generator. So G would be said to be a generator of ZP star. So let's look at a quick example. So let's look, for example, at P equals seven. And let's look at all the powers of three. So three squared three cubed, three to the fourth, three to the fifth, Three to the six, already we know, is equal to one modular seven by Fermat's Theorem. So there's no point in looking at three to the six. We know we would just get one. So here, I calculated all these powers for you, and I wrote them out. And you see that in fact, we get all the numbers [inaudible] in Z, in Z7 star. In other words, we get one, two, three, four, five, and six. So we would say that three is a generator of Z7 star. Now I should point out that not every element is a generator. For example, if we look at all the powers of two, well, that's not gonna generate the entire group. In particular, if we look at two to the zero, we get one. Two to the one, we get two. Two squared is four, and two cubed is eight, which is one modular seven. So we cycled back and then two to the fourth would be two, two to the fifth would be four. And so on and so forth. So if we look at the powers of two, we just get one, two, and four. We don't get the whole group and therefore we say that two is not a generator of Z7 star. Now again, something that we'll use very often is given an element G of ZP*, if we look at a set of all powers of G, the resulting set is gonna be called the group generated by G, okay? So these are all the powers of G. They give us what's called a multiplicative group. Again, the technical term doesn't matter. The point is we're gonna call all these powers of G, the group generated by G. In fact there's this notation which I don't use very often, angle G angle, to denote this group that's generated by G. And then we call the order of G in Z p star, we simply let that be the size of the group that's generated by G. So in other words, the order of G in Z p star is the size of this group. But another way to think about that is basically it's the smallest integer A such that G to the A is equal to one in Z P. Okay, it's basically the smallest power that causes the power of G to be equal to one. And it's very easy to see that this equality here basically if we look at all the powers of G and we look at one, G, G squared, G cubed and so on and so forth up until we get to G to the order of G minus one. And then if we look at the order of G to the order of G. This thing is simply going to be equal to one, by definition. Okay, so there's no point in looking at any higher powers. We might as well just stop raising to powers here. And as a result the size of the set, in fact, is the order of G. And you can see that the order is the smallest power such that raising G to that power gives us one in Z p. So I hope this is clear although it might take a little bit of thinking to absorb all this notation. But in the meantime let's look at a few examples. So, again, let's fix our, our prime to be seven. And let's look at the order of the number of elements. So what is the order of three modulus of seven? Well, we're asking what is the size of the group that three generates modulus of seven? Well, we said that three is a generator of Z7 star. So it generates all of Z7 star. There are six elements in Z7 star. And therefore we say that the order of three is equal to six. Similarly, I can ask, well, what is the order of two modulo seven? And in fact, we already saw the answer. So let's, I'll ask you, what is the order of two modulo seven and see if you can f igure out what this answer is. So the answer is three and again, the reason is if we look at the set of powers of two modulo seven, we have one, two, two squared, and then two cubed is already equal to one. So this is the entire set of powers of two modulo seven. There are only three of them and, therefore, the order of two modulo seven is exactly three. Now let me ask you a trick question. What's the order of one modulo seven? Well, the answer is one. Because if you look at the group that's generated by one, well, there's only one number in that group, namely the number one. If I raise one to a whole bunch of powers, I'm always gonna get one, And therefore the order of 1 modulo 7 In fact the order of 1 modulo any prime is always gonna be 1. Now there's an important theorem of Lagrange, that actually this is a very, very special case of it, what I am stating here. But Langrage's theorem basically implies that if you look at the order of G modulo p, the order is always going to divide P-1. So in our two example you see, six divides seven minus one, six divides six, and similarly, three divides seven minus one. Namely again three divides six. But this is very general; your order is always going be a factor of P minus one. In fact, I'll tell you, maybe it's a puzzle for you to think about. It's actually very easy to deduce Fermat's theorem directly from this fact, from this Lagrange's theorem in fact. And so Fermat's theorem really in some sense follows directly from Lagrange's theorem. Lagrange, by the way, did his work in the nineteenth century, so you can already see how we're making progress through time. We started in Greek times, and already we ended up in the nineteenth century. And I can tell you that more advanced crypto actually uses twentieth century math very extensively. Now that we understand the structure of ZP star, let's generalize that to composites, and look at the structure of ZN star. So what I wanna show you here is what's called Euler's Theorem which is a, a direct generalization of Fermat's Theorem. So, Euler defined the following function. So given an integer N, he defined what's called the phi function, phi of M, to be basically the size of the set ZN star. This is sometimes called, Euler's phi function. The size of the set Z N star. So for example, we already looked at Z twelve star. We said that Z twelve star contains these four elements, one, five, seven, and eleven. And therefore we say that phi of twelve is simply the number four. So let me ask you as a puzzle, what is phi of P? It will basically be the size of Z P star. And so, in fact, we said that in the Z P star contains all of Z P except for the number zero. And therefore, phi of P for any prime P is gonna be P minus one. Now, there is a special case, which I'm gonna state here and we're gonna use later for the RSA system. If N happens to be a product of two primes, then phi of N is simply N minus P minus Q plus one. And let me just show you why that's true. So basically N is the size of Z N. And now we need to remove all the elements that are not relatively prime to m. Well how can an element not be relatively prime to m? It's gotta be divisible by p or it's gotta be divisible by q. Well how many elements between zero and m minus one are there, there that are divisible by p? Well there are exactly q of them. How many elements are there that are divisible by q. Well there are exactly p of them. So we subtract p to get rid of those divisible by q. We subtract q to get rid of those divisible by p. And you notice we subtracted zero twice, because zero is divisible both by P and Q. And therefore, we add one just to make sure we subtract zero only once. And so it's not difficult to see that phi(N) is N-P-Q+1. And another way of writing that is simply (P-1) times (Q-1). Okay, so this is a fact that we will use later on, when we come back and talk about the RSA system. So far, this is just defining this phi function of Euler. But now Euler put this phi function to really good use. And what he proved is this amazing fact here that basically says that if you give me any element X in Z N star. In fact, and it so happens that X to the power of phi(N) is equal to one in Z N. So you can see that this is a generalization of Fermat's theorem; in particular, Fermat's theorem only applied to primes. For primes we know that phi(p) is equal to p minus one, and in other words if N were prime we would simply write p minus one here, and then we would get exactly Fermat's theorem. The beauty of Euler's theorem is that it applies to composites, and not just primes. So let's look at some examples. So let's look at five to the power of phi(12). So five is an element of Z12 star. If we raise it to the power of five of twelve, we should be getting one. Well, we know that phi(12) is 4, so we're raising 5 to the power of 4. Five to the power of four is 625 and it's a simple calculation to show that that's equal to 1 modulo 12. So this is proof by example but of course it's not a proof at all. It's just an example. But in fact it's not difficult to prove Euler's theorem and in fact I'll tell you that Euler's theorem is also a very special case of Lagrange's general theorem. Okay so we say that this is a generalization of Fermat's theorem and in fact as we'll see this Euler's theorem is the basis of the RSA crypto system. So I stop here and we continue with modular quadratic equations in the next segment.