用Python代码计算离散对数的问题
我有一组对数,分别是L1、L2和L3,我从超安全路由器到路由器自发密钥交换系统(2015)的论文中检索到了它们。 本文的目的是在Alice和Bob之间安全地共享密钥。例如,Alice向Bob发送了用Python代码计算离散对数的问题,python,logarithm,Python,Logarithm,我有一组对数,分别是L1、L2和L3,我从超安全路由器到路由器自发密钥交换系统(2015)的论文中检索到了它们。 本文的目的是在Alice和Bob之间安全地共享密钥。例如,Alice向Bob发送了K=46。鲍勃从爱丽丝那里收到了钥匙。密钥可以表示为: 需要使用三阶段流程共享密钥。L1:爱丽丝对鲍勃说。L1:鲍勃对爱丽丝说。L3:Alice对Bob。方程式为: Bob可以使用以下方法评估密钥: 这是方程式的结果: 给定alpha=5,x=15和p=97的值。在Python中实现后,我得
K=46
。鲍勃从爱丽丝那里收到了钥匙。密钥可以表示为:
需要使用三阶段流程共享密钥。L1:爱丽丝对鲍勃说。L1:鲍勃对爱丽丝说。L3:Alice对Bob。方程式为:
Bob可以使用以下方法评估密钥:
这是方程式的结果:
给定alpha=5
,x=15
和p=97
的值。在Python中实现后,我得到了错误的结果,这与表中的结果不同:
a=5
x=15
p=97
i1=0.958478
i2=4.238835
L1=a**(x+i1)%p
L2=a**(x+i1+i2)%p
L3=a**(x+i2)%p
K=L3*(a**(-i2))
print ("L1",L1)
print ("L2",L2)
print ("L3",L3)
print ("K",K)
产生这一结果的原因是:
L1 55.596893310546875
L2 2.15625
L3 68.87890625
K 0.07503566293789979
另一个问题是我试图手动计算,但结果仍然与表中的结果不一致。我希望任何人都能帮助我。谢谢。您指定的文档有点模糊。 下面给出的示例包括非固定点 如果需要(作为静态定义或表格),您不共享
gm、pm
您所做的工作比算法更重要。不要将基本
和改进
术语混用
am=5 #Secret key of A node
bm=9 #Secret key of B node
gm=15 #Shared Base Number
pm=97 #Shared Modulos
A = (gm^am)%p #Shared key from A
B = (gm^bm)%p #Shared key from B
Ka = (A^bm) %p #Calculate Key wit A node Answer
Kb = (B^am)%p #Calculate Key wit B node Answer
print "Shared Key A:",A,"Shared Key B:",B
print "Node A key :",Ka,"Node B key :",Kb
NUMSA = [[i,(am**i)%p] for i in range(p) if i > 0]
NUMSB = [[i,(bm**i)%p] for i in range(p) if i > 0]
print NUMSA #ALL Numbers and means for A node
print NUMSB #ALL Numbers and means for B node
诗人在这里想说什么?我不喜欢那种解释
你懂什么
希望有帮助。好的,我发现了错误:
因为模(a^(x+i2)%p)*a^(-i2)!=a^(x+i2-i2)%p
- 另外,如果a、x和p是已知的,并且如果它们未知,则不需要4路交换,它们无法发送消息
因此,我们推测实际的i1和i2值被其在Matlab中的显示设置截断。这不会改变算法的真实性,也不会阻止它在操作结束时计算到变量K的正确值。将显示使用i1和i2的完整十进制值的所有结果。然而,这也会使使用Matlab在计算时向作者显示的相同数字的人无法再现整个过程。所以我猜这篇论文是错的?通常模运算是整数运算,所以我对你的浮点数感到困惑。注意,对于整数
pow(基、指数、模)
是现成的性能实现。