4

私が読んでいる本では、アルゴリズムを次のように説明しています。

  • 2 人の人が 2 つの公的な「n と g」の数字を考えます。両方とも認識しています。
  • 2 人が秘密にしている 2 つのプライベートな「x」と「y」の数字を考えます。

図のように交換が行われます

ここに画像の説明を入力

これがどのように機能するかを確認するために、次の python コードをまとめましたが、そうではありません。私が欠けているものを理解するのを手伝ってください:

 #!/usr/bin/python

 n=22 # publicly known 
 g=42 # publicly known

 x=13 # only Alice knows this 
 y=53 # only Bob knows this

 aliceSends = (g**x)%n 
 bobComputes = aliceSends**y 
 bobSends = (g**y)%n
 aliceComputes = bobSends**x


 print "Alice sends    ", aliceSends 
 print "Bob computes   ", bobComputes 
 print "Bob sends      ", bobSends 
 print "Alice computes ", aliceComputes

 print "In theory both should have ", (g**(x*y))%n

 ---

 Alice sends     14  
 Bob computes    5556302616191343498765890791686005349041729624255239232159744 
 Bob sends       14 
 Alice computes  793714773254144 

 In theory both should have  16
4

3 に答える 3

8

さらに2つのモジュロを忘れました:

>>> 5556302616191343498765890791686005349041729624255239232159744 % 22
16L
>>> 793714773254144 % 22
16
于 2012-05-31T15:13:50.163 に答える
7

ロマンは正しい。ただし、pow() の 3 つの引数関数を調べたほうがよいでしょう。はるかに高速で、3 番目の引数はモジュラスです

于 2012-05-31T15:29:11.603 に答える