I think the fact that addition, multiplication, and exponentiation maintain their properties under modulo arithmetics was worth mentioning.
@znefas2 жыл бұрын
could you please link an explanation to this? i've been trying to understand how g^a and g^b were made public when in actuality it was those numbers _mod n_ that were made public. also don't understand how you can calculate (g^a)b mod n without first having g^a, which again, wasn't made public because of the modulo term
@qm3ster2 жыл бұрын
@@znefas I never saw an explanation myself, but consider the following: imagine we are working in base N, and not binary or decimal. Then, modN just keeps the last digit. So, since we know that it's possible to start by calculating the last digit when doing long addition/multiplication, as the carry only travels left, we can discard the left digits at any intermediate steps and still have the same result as if we only did it at the end. Signed addition and negative powers (division) break this, but wrapping subtraction of unsigned integers actually survives afaik. This is the same reason why we can know the last digit of 7^44444 will be 1, without having to calculate the whole number.
@znefas2 жыл бұрын
@@qm3ster the only thing i understood is how the carry only traveling left may be useful when trying to calculate a number smaller than the entire expression; i don't understand how the whole mod N thing works i also hate modular arithmetic notation because "13 = 5 mod 8" is so much more annoying than "13 % 8 = 5" for me as a programmer
@qm3ster2 жыл бұрын
@@znefas for all unsigned integers a, b, c, n: (a + b)%n == (a%n + b%n)%n (a * b)%n == ((a%n)*(b%n))%n ((a ^ b) ^c)%n == (((a%n)^b)%n)^c)%n As long as at the end you were dropping the stuff left of n, the result won't be changed by dropping it earlier, as it cannot affect what is on the right. The intermediate values will in fact be different, which is what makes this a computational saving. But outside cryptography and adjacent subjects like checksumming you usually want the most significant bits, not the least significant, they're called that for a reason, so this doesn't get used *too* often.
@wybird6662 жыл бұрын
@@znefas g^a and g^b wasn't made public, only g^a%n and g^b%n - Mike got a bit sloppy when presenting (just as we do when we write down the maths). If we knew g^a, and since we know g, it would be trivial to work out a (and similarly for b).
@peter627097 жыл бұрын
I just took a crypto class in university and my professor got so wrapped up in the specifics of group theory that I didn't even understand how Diffie-Hellman worked, but this made everything so clear without really being any less mathematical.
@kusharora14353 жыл бұрын
love the way this guy explains.. never imagined i could binge watch cryptography videos
@Felttipfuzzywuzzyflyguy4 ай бұрын
Right?!
@drewad0 Жыл бұрын
All these years of hearing how "diffie helman is extremely complex" yet such a simple and easily understandable algorithm. Thank you so much for this!
@EannaButler2 ай бұрын
As soon as someone says "It's extremely complex", usually means they don't understand it, and therefore don't want to be asked to explain it...
@Ry____5 жыл бұрын
It’s amazing how beautifully elegant and simple cryptography really is.
@fsmoura5 жыл бұрын
5:02 THIS! IS! CRYPTOGRAPHY! *_*kicks you down a 4096-bit deep well*_*
@babel_7 жыл бұрын
Alice and Bob only communicate in Pub. Alice and Bob are probably undergrads.
@Syldar Жыл бұрын
This is the most interesting channel about computer science. I’ll never be as much grateful as I would like to be. Thanks a lot for sharing these.
@YouTubist6667 жыл бұрын
Wow. I've always thought D-H was some esoteric math magic. It is extremely clever and elegant.
@MrHaggyy2 жыл бұрын
There is quite some math behind it about rings, fields and other group theory. But the plain formulas in crypto are pretty nice and easy. The computation is quite a mess as numbers get pretty big, often even bigger than your memory and power and multiply are not the chips best friend.
@Tasarran Жыл бұрын
I find there are a lot of these types of algorithms; Radix Sort comes to mind... It seems like voodoo, then you look at the algorithm, and probably at first think 'that can't possibly work...?' but viola...
@justalonelypoteto Жыл бұрын
@@MrHaggyythat's still somewhat elegant, square-multiply-modulo is a genius and simple solution to easily calculate such an otherwise gargantuant number. I find the truly hard (and amazing) part is the theory behind which numbers are safe to use, even more fascinatingly and terrifyingly genius are the ways people find to crack it
@MrHaggyy Жыл бұрын
@@justalonelypoteto square-multiply is a genius algorithm as it has view operations,. Lattice and Russian Peasant are awesome too. A lot more operations but most of them are cheap additions that can be done in parallel. My interest is hard-realtime systems. We want algorithms with fixed calculation times. Square-multiply can vary depending on the numbers. And on cheap and small hardware you might be able to eavedrop with an oscilloscope.
@justalonelypoteto Жыл бұрын
@@MrHaggyy Montgomery's ladder might be up your alley, it performs both operations each time with the only distinguishable difference being a possible timing variation because the needed operation affects which memory address is read, apparently this is fixed by scattering the data around to ensure cache misses
@VoilaTadaOfficial7 жыл бұрын
I love these math versions. They help me understand it so much better than just the computer science bits. Please do more of these!
@rabreu087 жыл бұрын
Great clock analogy. This should be the main video
@F1ghteR417 жыл бұрын
A Parker clock, one might say!
@AndersJackson7 жыл бұрын
It should not, as they used the colour analogy there.
@mungflesh1995 жыл бұрын
The clock is not strictly an analogy, it's a common learning technique for modular arithmetic
@Cysecsg4 жыл бұрын
It explains why n needs to be a big value.
@skeetabomb3 жыл бұрын
The clock analogy I think is one of the best ways to explain modulo arithmetic...
@outofahat93632 жыл бұрын
Came in expecting some incomprehensible esoteric math but this was very easy to understand. Reminds me of that Doctor Strange quote "It's a simple spell but quite unbreakable"
@mackmenezes4912 Жыл бұрын
If you watched Attack on Titan ,one of the character used. Only his words and hacked the entire cosmos to make it seem real at that moment
@emilmartens1237 жыл бұрын
awesome video, I see some comments point out its actually (((g^a) mod n) ^ g)) mod n, so here is why its the same as (g^a)^b mod n: lets say: g^a = k*n+x where x is an unknown number because: (u + v) mod n =(u mod n + v mod n) mod n and because: k*n mod n = 0 we get: (g^a) mod n = (k*n+x) mod n = x ((g^a) mod n)^b mod n = x^b mod n i used the binomial theorem nCr to get: (g^a)^b = (k*n+x)^b = (k*n)^b + (nC1)*(k*n)^(b-1)*x + ... + (nC(b-1))*( (k*n)^(1)*x^(b-1) + x^b since n appears in every part except in x^b every other part is set to 0 when we take the modulo: (g^a)^b mod n = x^b mod n so therefore (g^a)^b mod n = ((g^a) mod n)^b mod n
@AhsimNreiziev7 жыл бұрын
Yup.
@theguyoo17 жыл бұрын
Thanks for this, felt like a logical leap without this proof.
@nelsblair26673 жыл бұрын
At the beginning there, did you put a g, where you meant a b?
@AhsimNreiziev3 жыл бұрын
@@nelsblair2667 He did, yes.
@deckard5pegasus6733 жыл бұрын
Interesting proof. But a few corrections: First what you are trying to prove is that (g^a)^b mod n == (g^a mod n)^b You made a mistake, in (((g^a) mod n) ^ g)) mod n . You put an extra "g", it's a "b" Also to simplify...or clarify your proof, and make it more understandable, organized: 1) supposing: g^a = n*k+x ( *WHERE "x" IS NOT A MULTIPLE OF "n"* , in other words "x" is the "remainder" of the division by "n" ) This is an important purposeful "setting up" so that: n*k mod n == 0 and x mod n == x 2) mod n of any number which is a multiple of n will equal zero --> n*k mod n == 0 3) Proof that: (g^a mod n)^b == x^b a) Which would mean --> (g^a mod n) == x a) substitute "n*k+x" for "g^a", from step "1" (n*k + x) mod n == x --> given that: n*k mod n == 0 (any multiple of "n" will be zero) b) If (n*k + x) mod n == x, then (g^a mod n) == x, c) meaning --> (g^a mod n)^b == x^b 4) (g^a)^b mod n a) substitute (n*k+x) for g^a, given in step "1" --> (n*k+x)^b mod n b) Expanding (n*k+x)^b, using binomial theorem, *IMPORTANT MAGIC* : *all terms will be multiples of "n"* except the last term which is x^b c) Mod n of all terms that are multiples of "n" will be zero, leaving only the last term: x^b d) Thus (g^a)^b mod n = x^b 5) (g^a)^b mod n == (g^a mod n)^b , as both equal to x^b .
@Kolop3157 жыл бұрын
Wow, that is way more simple than I was expecting.
@CJBurkey7 жыл бұрын
Wouldn't a mod n only return values from 0 to _n_-1? You wrote _n_ on the clock.
@seraphina9857 жыл бұрын
Correct that was an error on their part since of course if a divides by n exactly the remainder is 0 not n.
@VoilaTadaOfficial7 жыл бұрын
Technically you could have n on the clock but you'd have to omit 0. You can have n or you can have 0, but not both. Having n on the clock would actually be more like counting units of 1 up to n and then starting back at 1 again for the next unit until you run out of units. Same result (specifically in this case because the number itself doesn't matter), but a different perspective on it.
@Friek5557 жыл бұрын
Having a 0 instead of the n is very useful when you work with such a construct though. This clock face is what mathematicians call a cyclic group, and its "neutral element" is 0 (or n, they are the same in the cyclical group). That means that (a+0)mod n=a mod n, so the 0 doesn't change an element by being added. That is very obvious if you actually write it as a 0 instead of an n.
@AndersJackson7 жыл бұрын
And multiply by zero also give nice properties. :-)
@tohopes7 жыл бұрын
But clocks are 1-based.
@kennethcarvalho36842 жыл бұрын
For some reason I understand all his videos but not many of the other tutors on Comphile.. Quite a teacher
@wildwest18324 жыл бұрын
The idea of diffie hellman is actually really clever. Its actually pretty hard to come up with a way to do that, and not have anyone be able to reverse how they did it or needing to share something that can be reversed. I can see why we still use this today it would be very difficult to replace it, and its very ingenious how it works and its not incredibly complicated either.
@nalbertcerqueira6079 Жыл бұрын
The simplicity of this algorithm is so amazing!
@xZise7 жыл бұрын
It looks really simple, but it unfortunately doesn't explain whether "(g^a mod n)^b" and "(g^a)^b mod n" are the same. I mean obviously it must be the same for it to work.
@bgroks17 жыл бұрын
Fabian Neundorf (g^a mod n)^b mod n is the same as (g^a)^b mod n, I believe he also mentioned it briefly in the video.
@jonathanseamon98647 жыл бұрын
The simple answer as to why they're the same is that Modulo arithmetic=Finite fields, and Finite fields are consistent. Proving that finite fields are consistent would probably be another couple videos...
@TheUnclepecos7 жыл бұрын
Short answer: It's because the product in modulo/clock arithmetic is defined that way. If you wanna know more I'll explain it in more detail: Maybe it's easier if you think of g^a mod n just as a number between 0 and n-1 (actually if we use this notation we should start from 1 and go up to n-1, but it's not extremely important so let's forget about it). Think of the multiplication between two such numbers as a standard multiplication, but if the result is bigger than n-1 we take the remainder. So basically the product is just: (a mod n)*(b mod n) = a*b mod n (THIS IS THE DEFINITION OF PRODUCT IN MODULO ARITHMETIC) Elevating g to the power a is just repeated multiplication, so what you do is apply the definition of product: (g mod n)^a = (g mod n)*(g mod n)*...*(g mod n) = g*g*g*...*g mod n You can easly see that we get a similar thing if we elevate g^a to the power b: (g^a mod n)*(g^a mod n)*...*(g^a mod n) = (g^a)*(g^a)*...*(g^a) mod n = (g^a)^b mod n So yeah, (g^a mod n)^b = (g^a)^b mod n Hope it's clear now ;)
@FelkCraft7 жыл бұрын
The "mod n" isn't an operation in this case. Appending "mod n" to a term just signals that you're calculating in clock arithmetic, meaning you always stay between 0 and n-1. If you do 2+3 in "mod 4", the answer is 5, or 1, or even 9, because in "mod 4" 1 is equal to 5 by definition. Calculating a modulo is not an operation that needs to be performed if you define yourself to be working in clock arithmetic
@danieljensen26267 жыл бұрын
Actually g^(ab) mod n = (g^a mod n)^ b mod n, but yes, it is the same. The proof is just long and kinda gross which is why he didn't get into it. Here it is if you want to see it though. Proof: Any number m mod n is defined as the remainder left after dividing m by n, so we have m=q*n+r where q is the whole number of times n goes into m, and m mod n=r, which is the remainder. So g^a=q_a*n+r_a, and g^a mod n=r_a. (I'm using the underscore to denote a subscript.) (g^a mod n)^b=r_a^b=q_1*n+r_1, and (g^a mod n)^b mod n=r_1. g^(a*b)=q_(ab)*n+r_(ab), and g^(a*b) mod n =r_(ab). But we also know g^(a*b)=(g^a)^b, and g^a=q_a*n+r_a, so g^(a*b)=(q_a*n+r_a)^b. Expanding that out into a sum we get (q_a*n+r_a)^b=sum((q_a*n)^(b-j)*r_a^j,j=0..b) The last term in this sum is r_a^b and every other term has at least one factor of n, so we can rewrite it as (q_a*n+r_a)^b=n*sum(q_a^(b-j)*n^(b-j-1)*r_a^j , j=0..b-1)+r_a^b. Now let q_2=sum(q_a^(b-j)*n^(b-j-1)*r_a^j , j=0..b-1), so we have (q_a*n+r_a)^b=q_2*n+r_a^b. Remember that this is equal to g^(a*b). So we have g^(a*b)=q_2*n+r_a^b. We already have r_a^b=q_1*n+r_1, so we have g^(a*b)=(q_1+q_2)*n+r_1 and g^(a*b) mod n = r_1. We already had that (g^a mod n)^b mod n = r_1 so we have now proved that g^(a*b) mod n = (g^a mod n)^b mod n.
@xcvsdxvsx7 жыл бұрын
I actually understood the math for once!
@peppybocan7 жыл бұрын
yeah, modular arithmetics is easy. :D ...
@jasonpatowsky69297 жыл бұрын
And theeeeres the party pooper.
@BryanLeeWilliams7 жыл бұрын
Didn't work for me a=11 b=13 g=7 n=199
@grrr13517 жыл бұрын
The math is easier to understand, because it's more technical.
@musashi9397 жыл бұрын
Jyoti Das lol.
@flockenlp17 ай бұрын
You are why I am confident I won't fail my Safety and Security module. Mike is exceptional at communicating these concepts!
@rithviksaranumasaravanan79258 күн бұрын
I've finished this video after the colour example version of the diffie hellman and once again Dr.Mike on top This concept is really understandable.
@desiassassin32682 жыл бұрын
This made so much sense and was super easy to grasp. Mike pound really is a great teacher. Also props to Diffie Hellman for creating such an easy but quite unbreakable algorithm.
@skarnl2 ай бұрын
I finally understand how this public-private key system works 🎉 Thanks!
@trevordobbertin64697 жыл бұрын
It would be awesome if you guys did some podcasts. I learn so much from you guys and it would be great to listen while in the car or at school. Thanks guys.
@DaanVink-yz5zq5 күн бұрын
Agree, but then we would miss the paper!
@agrawalyogesh3 жыл бұрын
Hi Mike, Alice or Bob never shared "g to the power of a or b" but they shared "g to the power of a (b) mod n". But as we continued the example we said they shared the power of a or b. Can you please help explain that?
@cliftonfestusmalvea9777 Жыл бұрын
For anyone who got confused with this, we start with the left-hand side of the equation: (g^a mod p)^b mod p = (g^ab mod p) mod p [by the property of modular exponentiation] Now, we move on to the right-hand side of the equation: (g^b mod p)^a mod p = (g^ba mod p) mod p [by the property of modular exponentiation] Since (g^ab mod p) mod p = (g^ba mod p) mod p, we can say that: (g^a mod p)^b mod p = (g^b mod p)^a mod p Hope this helps.
@KraylusGames7 жыл бұрын
Lmao everyone calling him out for not stopping at n-1. Give the dude a break!
@tohopes7 жыл бұрын
☞ nope.avi
@tedbaltz21645 жыл бұрын
they need to feel smart
@martinkunev99114 жыл бұрын
If you're not familiar with what he's explaining, this is enough to confuse you and this is not the only thing he says that can create confusion.
@realcryptc3 жыл бұрын
he kinda of implicitly stopped at n-1 when he mentioned there is the element 0 in mod operations
@skeetabomb3 жыл бұрын
😂
@vibhavsharma90932 жыл бұрын
great video, just to clarify modulo math, ((g^a)^b) mod n = ( ( (g^a) mod n )^b )mod n, by using this we can generate same value from both side
@HarishNarayanan Жыл бұрын
This is the most important fact that makes this explanation work.
@DavidPsurny4 ай бұрын
3:32 How can Alice perform (g^b)^a when she receives ((g^b) mod n) from Bob? Alice does not know the value of (g^b).
@danielf.71513 ай бұрын
it's not mentioned, but (((g^b) mod n)^a) mod n is the same as ((g^b)^a) mod n. this applies zo adfition and multiplication as well
@sammonger40027 жыл бұрын
It's interesting that he doesn't mention that n should be prime in addition of being large. That is an aspect equally as important as its size which could easily break the encryption (if n isn't prime). There was even a defcon panel (2016 I think) that discussed this very problem and how it is often ignored.
@Legendarior6 жыл бұрын
In the previous video regarding this topic, with the color mixing, he mentions that n is a prime number.
@tissuepaper99625 жыл бұрын
I really was hoping he would explain why n has to be prime. I'm thinking the reason is that the search space of [numbers] mod n would be much smaller than n if it weren't a prime number, but that's just my intuition and I'm not sure if I'm right.
@MarioFanGamer6593 жыл бұрын
@@tissuepaper9962 The goal is to have the denominator and numerator being coprime i.e. their greatest common divisor is 1 as otherwise, you'd end up getting 0 as the result. The only way to guarantee that is with a prime number which is naturally coprime to any number.
@wybird6662 жыл бұрын
The clock-face analogy is really powerful as it really helps explain why it is not very reversible. "Undoing" g^a%n is effectively going backwards in steps of n and checking to see if g factors into this number an integer number of times. Since a is generally (very) large, we'd have to go backwards an awful lot of steps. There can be more efficient ways of doing it, but conceptually it's the same. Note 2048 bits --> N < 2^2048 ~ 10^616. The world's best supercomputer has a power of ~1exaflop or 10^18 floating point calculations per second. Assuming every attempt could be achieved in 1 operation, that would take 10^598 sec = *10^591 years* I always find it difficult to understand how "difficult" something is when we say p is a really big number, until it is put into a time-to-calculate number.
@elultimopujilense4 жыл бұрын
At 4:00 that exponentiation is flawed, because you need to calculate (g^a mod n)^b, not (g^a)^b. Those are not the same, and the explanation he gave is not correct. He should have said that because of the modulus exponentiation property (g^a mod n)^b mod n is the same as (g^b mod n)^a mod n. He omitted a really important step when he jumped to (g^a)^b is equal to (g^b)^a. That is something that you arrive at when you apply the modulus exponentiaion property.
@ianpatrick232 жыл бұрын
Fantastic explanation of the mathematics behind this encryption!
@edsonrocks4 жыл бұрын
This is the best explanation I've ever found about it. Incredible concise and very illustrative. Thank you guys.
@johnpugh247 жыл бұрын
Thanks for explaining, you do such a great job. Always my favourite computerphile presenter.
@shanedk7 жыл бұрын
4:05 - To be more accurate, it's the same as long as g, a, and b are all positive. Throw in negative numbers and it doesn't always hold.
@vladpuha6 жыл бұрын
thank you for putting this video up. Such a good teacher and elegant explanation of public private key at its core. There are 100s of videos super complicated.. this is very nice, one can implement themselves right off the this video..
@kegelsknight7 жыл бұрын
It shouldn't be 'n' on the clock but 'n-1' because 'n'==0 in modolo
@sebastianheinrich86837 жыл бұрын
I'm not the only one who is botherd by this ^^
@AhsimNreiziev7 жыл бұрын
This is very true. Easy mistake to make, though.
@Majenga7 жыл бұрын
same thought here - was about to write a comment.
@remuladgryta7 жыл бұрын
There are 3 hard things in programming: 1 off by one errors and 2 naming things
@breadnoodle7 жыл бұрын
I was about to write the same xd
@kynan74122 жыл бұрын
At 1:51 you don't need the n as you have 0. n (mod n) = 0, so the clock would only go from 0, to n-1
@Starfuchs7 жыл бұрын
The clockface only goes up to n-1, (n mod n = 0). He forgot to change that too when he added the zero afterwards
@kpan7 жыл бұрын
Thomas Wigele Yeah I came down to point it out as well :)
@666Tomato6667 жыл бұрын
not only that, but the primality of g is completely irrelevant - the n needs to be prime if you want the n in the 2 to 4k range (and DH to remain secure), best if n is actually a safe prime (then g can be any number but 0, 1 and n-1) - a prime for which (n-1)/2 is also prime
@kpan7 жыл бұрын
666Tomato666 I don't get why n would have to be prime at all?
@aleksandarsavev7 жыл бұрын
+Π. Καράπας This way you are 100% sure that the remainder is in [0, n-1].
@kpan7 жыл бұрын
Александър Савев but doesn't modulo always return something in the range of [0,n-1]?
@davidsanders94267 жыл бұрын
I thought "solving the discrete log problem" was what happens when you clog the toilet at your in-laws' house? ...Sorry, I'll show myself out.
@Ping7274 жыл бұрын
...yeah you should really log off
@ivanarabome41723 жыл бұрын
You didn’t get the video.... tbh he actually did explain it well
@jamhamtime18783 жыл бұрын
@@ivanarabome4172 and you didn't get the joke
@jadielrhys31563 жыл бұрын
@Jesse Duncan yup, been watching on instaflixxer for since november myself =)
@RussTeeTrombone3 жыл бұрын
Nice
@AdamMPick7 жыл бұрын
The whole time I am thinking about the clock-drawing test, after seeing those clockface numbers beeing squished together. PS. I find this video even simpler to understand than the original "simple" version with the food colouring.
@kayinnasaki7 жыл бұрын
Same. With the color one I was like "what do you mean I can't figure out what the other color was? We just subtract the public color from it!"
@lambertbrother16287 жыл бұрын
The actual process is more difficult as instead of adding, it's multiplication to the power of another colour. Imagine Yellow^red x blue.
@xcvsdxvsx7 жыл бұрын
Me too. It's so easy to understand math when it doesn't have weird symbols that I have no idea what the heck they mean.
@AndersJackson7 жыл бұрын
Yes, the thing with math is that it is a language which you need to learn. Once you do, the concepts behind the maths become not that complicated, when you know them. Implementation could still be complicated though. Devils in the details...
@jackflash91234 жыл бұрын
3:44 Bob is sending (g^b mod n) and not g^b without modulo n. Else it would be simple to extract b. But the result of "(g^b)^a mod n" is the same as "(g^b mod n)^a mod n". Was that him saying "I change notation to save space"?
@yourmythtaken3 ай бұрын
Great video. One thing I’m not sure on is, how is g^b raised to the power of ^a, because it seems that the value shared is just “g^b mon n” as a discrete value ?? So how is the g^b disaggregated? 3:25
@danielf.71513 ай бұрын
It actually doesn't matter whether you use g^b or g^b mod n, you get the same result. It's a property of the modulo operator.
@Snyper207 жыл бұрын
Finally a decent video on computerphile... all of them should be AT LEAST this caliber instead of resorting to oversimplified (and hence incorrect) analogies.
@xdyps7 жыл бұрын
Please do a video on Elliptic-curve cryptography and Elliptic-curve Diffie-Hellman , pretty please :D
@bariswheel6 жыл бұрын
Great explanations folks, keep pumping these videos out!
@nomad_geek7 жыл бұрын
This is the video I've been waiting for! Thanks Guys, awesome job!
@SarveshParakh3 жыл бұрын
After watching all three videos, its much easier to understand and glad you used 'n' here that you didn't use in the last video with colors. This was an amazing series but if you label them as part of a series or make 1 full video combining all three or the first and last video, more viewers might decide to stick to the end. Anyway, Thanks a lot for this.
@supdawg78117 жыл бұрын
Yeah but you never talked about if (g^{a} mod n)^{b} is the same as (g^{b} mod n)^{a}. As in, does g^{a^{b}} = g^{b^{a}} hold in the modulo field.
@Aidiakapi7 жыл бұрын
Yeah, I wanted to hear that too, but considering the technique wouldn't work otherwise, it probably is. It also kind of makes intuitive sense in the terms of significant bits. Modulo tosses away all most-significant bits, and only keeps the least significant bits. Multiplication will push the least significant bits into the most significant bits (two 32 bit numbers multiplied for example, gives a 64 bit number). So tossing away those most significant bits (which would've been moved to even higher significant bits) shouldn't matter.
@Dsiefus7 жыл бұрын
The modulo just takes the remainder of the division: being the multiplication commutative, g^(ab) = g^(ba), you'll get the same number. You can then do modulo n, but the number will be the same anyways.
@yondaime5007 жыл бұрын
Let's say g^{a} = X + Y, where X is divisible by n and Y < n (therefore g^{a} mod n = Y). Then g^{ab} is (X^b + c1*X{b-1}Y + c2*X{b-2}Y^{2} + ... + Y^b). Since X is a multiple of n, all but the last term will be zero mod n, so we are left with Y^b mod n = ( g^{a} mod n)^b mod n after we take the modulo. Therefore g^{ab} mod n = g^{a} mod n)^b mod n. I hope that's clear enough.
@AndersJackson7 жыл бұрын
This is why he put this in the Maths video and not the colour video. As you should know this basic thing to know the theory. And he mentioned it in the video, very short.
@kevinnio2 жыл бұрын
I was wondering why Diffie-Hellman hasn't been deprecated in favor of a better algorithm since it's almost 50 years old now. Now I know why. You could always increase the bit count of N to compensate for faster computers and still get a shared secret in as low as 2 messages. Neat!
@benjaminshropshire29009 ай бұрын
The missing part is why (g^a mod n) is fast to compute even though the reverse is not. Tl;dr; g^a can be computed by starting with x_0=1 and and defining x_1=a_0^2 or x_1=x_0^2 * g and then doing the same for x_2 and so on. Making the right choices at each step (which is basically reading out the bits of a) you get g^a in at most log2(a)+1 steps.
@sondoanvan5161 Жыл бұрын
thanks your video is very helpful, but i have a question let's say in signal or realtime chat webapp WhatsApp using Diffie Hellman, on server side only public key is saved. So I have a question where is the private key stored for each user when they log in so that they can be retrieved and every time you log in on another device, how do you get that user's private key? thanks and hope you can help me answer my question
@DimMyPrp7 жыл бұрын
Yeah! Best explanation on key exchange ever. Thanks to both videos I understood it instantaneously. A test on paper and mental arithmetic worked like a charm. Thanks :-)
@SH-vz8ef2 жыл бұрын
At 4:47 it’s been said that we know g^a and g^b, but shouldn’t it say we know g^a mod n and g^b mod n? If g is public and g^a would be public too, we could calculate the value of a using the logarithm of g for g^a, couldn’t we?
@ChrisStavros4 жыл бұрын
3:47 "Alice is going to take the g^b that Bob sent" Doesn't Bob actually send b^g mod n ? If yes, how does Alice reverse that into b^g? And if not (Bob actually sends b^g), then it's very easy to compute b, Bob's private key.
@franatrturcech84843 жыл бұрын
no, _a_ and _b_ are *the exponents* while _g_ is *the base* bob actually sends g^b mod n
@karimbarakat77324 жыл бұрын
Thank you so very much for these videos. I find them invaluable in understanding the ins and outs of cryptography.
@captainpeglegable5 жыл бұрын
Is it true about what he says around 4:42 that we know what g^a and g^b is? I can't find evidence of this elsewhere, and it would seem to be to be an incorrect statement, as if you knew, g^b, and g, then it would be trivial to compute the log of g^b, and find out what b was. I think he must mean: g^a Mod n and g^b Mod n.
@Inritus6187 жыл бұрын
That really is a beautiful solution to exchanging keys. I really love that. Fantastic video as always!
@lynx-titan6 жыл бұрын
g must be the generator of cyclic group of n (the set 0..n-1) by repeatedly applying the group operation (exponent, modulo)
@jded13467 ай бұрын
@03:45 -> Does Bob send g^b or [(g^b) mod n]? Both are completely different numbers, so how does Alice extract g^b from [(g^b) mod n] if it is indeed the latter that got sent by Bob, since Alice has no knowledge of b?
@danielf.71517 ай бұрын
Bob sends (g^b) mod n. however, Alice does not need g^b. when working with the mod operator, it does not matter if you apply it to the intermediary results as well or only the final result. he probably should have mentioned it.
@jded13467 ай бұрын
@@danielf.7151 thanks yeah looked it up and it's the reduction property modular exponentiation : (a^b) mod n = ((a mod n)^b) mod n which can be fairly easily deduced (when a is represented as k*n + r) with binomial expansion of ((k*n + r)^b) mod n which leaves behind r^b in both cases.
@kamism7702 жыл бұрын
Does Alice and Bob gonna share the exponent values with the modulo operation or without it at the first exchange ? Cuz he first said said that both of them gonna use the modulo operation but he completed the analogy with only the exponents values (g^a and g^b)
@sontapaa11jokulainen945 жыл бұрын
0:42 Why is the g a prime number? And also why it is small? If g was big and could be a non prime, wouldn't it improve the security?
@trogdorstrngbd5 жыл бұрын
Making g really big does improve security, but also drastically increases the computing and memory resource requirements since g^a will be (even more) ridiculously large.
@EquationHub10 ай бұрын
Just to caveat, in modulo we deal with numbers from 0 to n-1. We exclude n since the remainder can't be equal n - it must be less than n, otherwise when we're dividing by n and we see that there's a remainder n it means that n could fit one more time in that number leaving us with the remainder 0.
@Pilbaran00b7 жыл бұрын
It's beautiful how simple and elegant it is.
@saadsiddiqui50468 ай бұрын
I like the Explanation it help me understand lot better but I have two Questions 1. You mention G^a would be huge number. Did you mention the full equation G^a Mod n would give you a huge number or you just meant G^a Only. 2. you mention N should be a huge number, 2000 to 4000, so that it's not easy to brute force attack. There are computers these days that can calculate number between 4000. in these case is algorithm is secrete or N is secrete?
@danielf.71518 ай бұрын
1. Only g^a is a huge number. g^a Mod n is always a number between 0 and n-1 inclusive. 2. N is not secret, only a and b are. also, 2000 to 4000 is not the bumber itself, but the length of the number in bits. a 2000 bit number has around 600 digits in decimal.
@programmercouple3 жыл бұрын
There is no better explanation of the "Diffie-Hellman key exchange".
@jlamothe25 жыл бұрын
X mod n will be in the range of 0 to n-1, not 0 to n. I'm also a little unclear as to how we get g^(a*b) mod n. Bob, for instance would have g, n, b, and g^a mod n. I think it might be the same as (g^a mod n)^b mod n, which Bob could compute, but I'm not sure if that's correct, or if so, why.
@xiezhenhaoa Жыл бұрын
According to Congruence modulo, (a mod n) * (b mod n) = a*b mod n, so (g^a mod n)^b mod n = (g^a)^b mod n
@vorniy7 жыл бұрын
But isn't the public value "g^a mod n" instead of "g^a" or is that irrelevant, because "(g^a mod n)^b mod n" is the same as "(g^b mod n)^a mod n"?
@evge7 жыл бұрын
was wondering the same thing, can someone answer
@ChenfengBao7 жыл бұрын
You can put "mod n" anywhere or nowhere. It doesn't make any difference as long as the end result is mod n.
@johnmiller88847 жыл бұрын
That "mod n" is important for keeping things secret. Remember that it is the *discrete* logarithm problem that is hard. If I give you `g` and `g^a` you can find `a` you could find `a` by log_g (g^a). That is what a logarithm is: the inverse of exponentiation. The 'mod n' piece is what make the problem hard because you don't know how many times you have looped back to 0 again. For any given g and n there actually might be a lot of values for a that would work, *but* if g and n are relatively prime (they have no common factors) then there is exactly one value a less than n that will result in g^ mod n. That is why the subtle mention that g and n are large *prime* numbers. The math still works if they are not, but it makes the problem of finding a much easier.
@efeyzee7 жыл бұрын
Tested with a couple values, (g^a mod n)^b mod n seems to equal (g^b mod n)^a mod n .
@philippetrov48817 жыл бұрын
Yes, it is. And yes, "(g^a mod n)^b mod n" is the same as "(g^b mod n)^a mod n"
@lherfel2 жыл бұрын
4:45 when he writes g^a and g^b as being made public, he should have said and written g^a mod N, and g^b mod N, were made public. thanks for explanation.
@fv63 жыл бұрын
2:12 0 to n-1 not n
@sieevansetiawan47924 жыл бұрын
Technical question. Does the value of a, b, g, n are permanent, or they get changed periodically.
@thomascreel65225 жыл бұрын
@3:55 this doesnt make sense, g^a isnt public, g^a mod n is public. for instance, bob would be doing this: g^(g^a mod n)^b mod n?
@tareqazzouni6240 Жыл бұрын
Thank you for the amazing explaination! One thing confused me about the circle... it should go from 0 to n-1 and not n right?
@TheEndOfMadness4 жыл бұрын
This video is a paradox, in which your head embodies the problem and the solution at the same time.
@somewhatmay_4 жыл бұрын
I don't understand the part in 3:45. So do they send the answer to the equations of (g^a mod n)? Or do they send over each part separately? Because if they sent it separately then that'd be useless because a and b would be public. And if they send (g^a mod n) then how does bob change that in (g^a^b mod n)? How is that possible? Because the answer is the mod, and that would be ((g^a mod n)^b) which is a different answer. And if they sent (g^a) then if bob multiplied (g^a)^b it'd give you the right answer but the answer is different from literally getting the answer of (g^a) then powering it to ^b. So how do they send the data over without making it public?
@franatrturcech84843 жыл бұрын
bob sends g^b mod n alice sends g^a mod n a and b are not revealed (g^a mod n)^b mod n = (g^b mod n)^a mod n = the shared secret Alice doesnt need to know b and Bob doesnt need to know a, those are private.
@rikwisselink-bijker7 жыл бұрын
Another thing that I noticed (but doesn't matter), is that actually, Bob can't compute (g^a)^b mod n, because he has to calculate (g^a mod n)^b mod n. The beauty of modulo arithmetic is that the result is the same.
@abhinavsixfaces7 жыл бұрын
Watched both videos. Beautifully explained.
@abigicic7 жыл бұрын
This is a really nice explanation and thank you for talking about it. I wish you talked a bit about man in the middle weakness and the ElGamal improvement.
@AustrianAlrounder2 жыл бұрын
Amazing video, but how do we know that (x^a mod n)^b is the same as (x^a)^b mod n? 🙂
@regdenied33067 жыл бұрын
It is quite misleading that after they exchange (g^a)mod n and (g^b)mod n Mike goes on as if alice knew the value of g^b and bob g^a and even saying that those values would now be public, which is simply wrong.
@ChrisStavros4 жыл бұрын
I'm glad I'm not the only one I thought this, I literally couldn't go on watching the video, this bothered me so much. At 3:47 He says Bob sends Alice g^b, well now everyone knows b. If he meant to say Bob sends Alice g^b mod n, then he doesn't explains how Alice is able to extract g^b from that (why can't people listening in do this then??) in order to raise it to a. Very frustrating.
@aanesijr7 жыл бұрын
Is it weird that I found this easier to understand than the one with the colors?
@herminencreve2464 жыл бұрын
When we start to go inside the cryptography's math we always face the formula : a^b mod n. But if a and b are huge number, how in the world can we compute a^b ? To work out a^b mod n ?
@maybelbdidit4 жыл бұрын
Thats where floating point and mantissa stuff comes in iirc
@ChrisStavros4 жыл бұрын
@@maybelbdidit You don't recall correctly. a^b for large a and b is arbitrary precision integer arithmetic, not floating point.
@xiezhenhaoa Жыл бұрын
I don't really get it why it's difficult to crack the a or b. Assume calculating big 'A' takes 1ms, a=1000,000, a brute force to crack little 'a' will take 1000,000 rounds, which takes 1000,000ms=1000s. Is it the bigger the number, the slower the calculate process? Then it will be gradually slower and slower from 1 to 1000,000?
@spuddo1232 жыл бұрын
I love how this all works on the fact that (((a^b)%x)^c)%x=(((a^c)%x)^b)%x
@KIFulgore7 жыл бұрын
How is (g^a)^b mod n calculated efficiently? If 1
@5-meo-dmt2996 жыл бұрын
Yes, you can do that pretty efficiently. It's called modular exponentiation. Basically, ga^b is calculated (ga is (g^a)mod n) the way it normally would, but after every little step of that calculation, the mod n of the current result so far is calculated.
@DerKommentator987564 жыл бұрын
Everywhere are for example purpose this little numbers. But what number range do a b g n actual need to be in a real life use case? What would be a small prime number 'g' be? Are 2000-4000 some legit values in a real implementation or are there some more standardized values?
@albertrenshaw42523 жыл бұрын
g^a%n seems to form repeating patterns for the values of g,a,n I select.. is this not always the case and special values are unpredictable?
@SouravTechLabs7 жыл бұрын
Can you (Dr. Mike Pound) please do a video on Linux security, and its flaws for being open-source?
@TheGiantHog7 жыл бұрын
Can I get some clarification on the math? I understand how g^ab % n is the same as g^ba % n but after the private numbers are used (g^a%n and g^b%n) and shared, when the other person's private number is used, using Alice for this example, instead of g^ba % n wouldn't it be (g^b%n)^a? This order of operations is confusing me
@MaxDiscere7 жыл бұрын
why do it have to be prime numbers?
@evankivolowitz47887 жыл бұрын
Because if you can easily factor g^a or g^b, then you can find a or b in polynomial time (easy to do on technology we have today).
@kamoroso947 жыл бұрын
It also makes the number modulo n more uniformly distributed.
@Dsiefus7 жыл бұрын
Because otherwise it wouldn't be a field.
@jackflash91234 жыл бұрын
@@evankivolowitz4788 This is not true. What you are thinking of is prime factorization (getting the product in primes of a number) but that does not come into play here. Also you never send g^a or g^b but the remainder of that number after mod n. The reason for prime numbers is, that you distribute possible secrets on the whole range 0, ..., n-1.
@fastchill7 жыл бұрын
at 3:47 , why is (g^b mod n)^a mod n = g^ab mod n ? Is that so obvious?
@PoweDiePie7 жыл бұрын
(((((a^b mod x)^c mod x)^d mod x)^e mod x)^f mod x)^g mod x == a^bcdefg mod x The first is just easier to compute since the numbers are smaller
@Baigle17 жыл бұрын
Q: If you had a 100 petaflop supercomputer and you discovered some workarounds in how diffie hellman key exchange can be sped up, say 5x, how long would it take on average to discover the private key given the size of 4096 bit RSA? You can make some assumptions about how many operations it would take to compute one key pair.
@MalevolentProphecies2 жыл бұрын
Is it important for the encryption key how many times we go around the clock to get to the answer? Otherwise surely you would only have to brute force numbers zero to n?¿
@patrikosoretos6 жыл бұрын
Hi, I tried to implement this in Javascript, then in Java but it doesn't seem to be working with large numbers generated by Alice and Bob.
@andreafeletto7 жыл бұрын
How can Alice do [g^(ab) mod n] if she gets [n^b mod n] from Bob? Shouldn't she do [(g^b mod n)^a mod n]?
@Makker_13 жыл бұрын
If alice can take g^b then it is public right and that would mean you could find out b right and then just put (g^a)^b) mod n and you got the key??? But also you can't get ((g^a)^b) if the only number you get from alice is (g^a) mod n...
@macigli7 жыл бұрын
I really loved this vid. Great work guys!
@josephdeatrick36616 жыл бұрын
don't we usually choose n to be prime as well in order to make Z_n a field? Otherwise the largest field we can construct using modulo n is Z_(phi(n)), which is not necessarily large even if n is large.
@RineezAhmed2 жыл бұрын
In previous video Mike said the math is very complex so separated out to another video. Now by the end of this video Mike says the math is not very complex it's simple. 🙃 Actually it was hard for me to understand how (g^a mod n)^b became (g^ab mod n) . It felt so counter intuitive to me that I had to test the math with several sample values before I could convince my brain it is true.