liufei2222
驱动牛犊
驱动牛犊
  • 注册日期2002-04-30
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:3355回复:2

关于diffie-hellman密钥交换协议的疑惑!

楼主#
更多 发布于:2007-02-10 16:36
  摘录如下:
Diffie-Hellman密钥交换算法的有效性依赖于计算离散对数的难度。简言之,可以如下定义离散对数:首先定义一个素数p的原根,为其各次幂产生从1 到p-1的所有整数根,也就是说,如果a是素数p的一个原根,那么数值

                  a mod p, a2 mod p, ..., ap-1 mod p

是各不相同的整数,并且以某种排列方式组成了从1到p-1的所有整数。

对于一个整数b和素数p的一个原根a,可以找到惟一的指数i,使得

                  b = ai mod p     其中0 ≤ i ≤ (p-1)

指数i称为b的以a为基数的模p的离散对数或者指数。该值被记为inda ,p(b)。

基于此背景知识,可以定义Diffie-Hellman密钥交换算法。该算法描述如下:

1、有两个全局公开的参数,一个素数q和一个整数a,a是q的一个原根。

2、假设用户A和B希望交换一个密钥,用户A选择一个作为私有密钥的随机数XA<q,并计算公开密钥YA=aXA mod q。A对XA的值保密存放而使YA能被B公开获得。类似地,用户B选择一个私有的随机数XB<q,并计算公开密钥YB=aXB mod q。B对XB的值保密存放而使YB能被A公开获得。

3、用户A产生共享秘密密钥的计算方式是K = (YB)XA mod q。同样,用户B产生共享秘密密钥的计算是K = (YA)XB mod q。这两个计算产生相同的结果:

              K = (YB)XA mod q

                = (aXB mod q)XA mod q

                = (aXB)XA mod q                   (根据取模运算规则得到)

                = aXBXA mod q

                = (aXA)XB mod q

                = (aXA mod q)XB mod q

                = (YA)XB mod q

因此相当于双方已经交换了一个相同的秘密密钥。

4、因为XA和XB是保密的,一个敌对方可以利用的参数只有q、a、YA和YB。因而敌对方被迫取离散对数来确定密钥。例如,要获取用户B的秘密密钥,敌对方必须先计算

               XB = inda ,q(YB)

然后再使用用户B采用的同样方法计算其秘密密钥K。

Diffie-Hellman密钥交换算法的安全性依赖于这样一个事实:虽然计算以一个素数为模的指数相对容易,但计算离散对数却很困难。对于大的素数,计算出离散对数几乎是不可能的。

下面给出例子。密钥交换基于素数q = 97和97的一个原根a = 5。A和B分别选择私有密钥XA = 36和XB = 58。每人计算其公开密钥

                YA = 536 = 50 mod 97

                YB = 558 = 44 mod 97

在他们相互获取了公开密钥之后,各自通过计算得到双方共享的秘密密钥如下:

                    K = (YB)XA mod 97 = 4436 = 75 mod 97

                    K = (YA)XB mod 97 = 5058 = 75 mod 97

从|50,44|出发,攻击者要计算出75很不容易。


问题:
上例中:  素数q = 97,原根a = 5,私有密钥XA = 36 那么更具协议中所说可计算出YA = 50
攻击方法:素数q = 97,原根a = 5,以及YA = 50都是公开的,攻击者只要轮寻1到97,就能轻松获得私有密钥36。
疑惑:    为什么q用素数?如果不用素数的话,轮寻就会获得很多YA,这样攻击者不就不知道用哪个密钥了吗?
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
沙发#
发布于:2007-02-10 17:16
这是最简单的了,一般只作为原理教学,很少实际使用了
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
alwaysrun
驱动小牛
驱动小牛
  • 注册日期2006-06-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1059分
  • 威望752点
  • 贡献值1点
  • 好评度98点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-05-23 16:20
q是素数才能保证上面运算是一个封闭域。
在实际使用中都是用大素数,如rsa至少都为1025位的,猜测法理论上是部现实的
一颗平常的心!
游客

返回顶部