dh算法
A. 简述DH算法
DH组的本质是使用非对称密钥来加密对称密钥。 DH算法过程: 1、相互产生密钥对 2、交换公钥 3、用对方的公钥和自己的私钥运行DH算法——得到另外一个密钥X
B. 如何改进DH算法,使其抵御中间人攻击
改进DH算法使其抵御中间人攻击的方法是:在途中根据需要修改它们的密文,使得A和B都不知道他们在和C共享通信。
DH算法的缺点是没有提供双方身份的任何信息.。它是计算密集性的,因此容易遭受阻塞性攻击,即对手请求大量的密钥。受攻击者花费了相对多的计算资源来求解无用的幂系数而不是在做真正的工作.,没办法防止重演攻击。
容易遭受中间人的攻击,第三方C在和A通信时扮演B;和B通信时扮演A.A和B都与C协商了一个密钥,然后C就可以监听和传递通信量。
(2)dh算法扩展阅读:
基于原根的定义及性质,可以定义Diffie-Hellman密钥交换算法.该算法描述如下:
1、有两个全局公开的参数,一个素数q和一个整数a,a是q的一个原根。
2、假设用户A和B希望交换一个密钥,用户A选择一个作为私有密钥的随机数XA(XA<q),并计算公开密钥YA=a^XA mod q。A对XA的值保密存放而使YA能被B公开获得。类似地用户B选择一个私有的随机数XB<q,并计算公开密钥YB=a^XB mod q。B对XB的值保密存放而使YB能被A公开获得。
3、用户A产生共享秘密密钥的计算方式是K = (YB)^XA mod q.同样,用户B产生共享秘密密钥的计算是K = (YA)^XB mod q.这两个计算产生相同的结果:
K = (YB)^XA mod q = (a^XB mod q)^XA mod q = (a^XB)^XA mod q = a^(XBXA) mod q = (a^XA)^XB mod q = (a^XA mod q)^XB mod q = (YA)^XB mod q 因此相当于双方已经交换了一个相同的秘密密钥。
C. 高分求:java实现DH算法的代码
http://instry.ccidnet.com/art/1077/20051102/363689_8.html
D. 什么是DH非对称加密算法
DH(仅能用于密钥分配,不能加解密数据)
非对称加密算法
特点:
发送方和接收方均有一个密钥对(公钥+私钥),其中公钥传播,私钥自己保存,不需要传播
私钥不需要传播的特性解决了对称加密算法中密钥传播的困难(这个困难一般通过线下传递可以解决)
加密安全性极高,只用于一些电子商务网站,加解密速度远低于对称加密
一般情况下,为了解决非对称加密算法加解密速度低的问题,采用非对称加密(使用公钥+私钥对对称加密的密钥进行加解密)+对称加密(加解密数据)相结合的方式。
常见算法:
DH(非对称加密的基石)
RSA(非对称加密的经典,除了可用于非对称加密,也可用于数字签名,RSA--155(512位密钥)已被破解)
ElGamal
E. 验证DH密钥交换算法
我自己写了个DH秘钥的demo代码, 以前加密用过AES的加密,全套代码写下来太费时间又没技术含量。
如果你需要AES的加密代码可以留个邮箱给我。
publicclassTest1{
publicstaticfinalintP=30;//公开的大家都知道的
publicstaticfinalintG=9;//公开的大家都知道的
publicstaticvoidmain(String[]args){
Ax=newA();
intone=x.getV();
//分割A代表A这边的系统加密one代表是给别人的值
By=newB();
inttwo=y.getV();
//B代表另外一边加密two代表是给别人的值
System.out.println(x.getKey(two));
System.out.println(y.getKey(one));
}
}
classA{
privateinta;//自己的私有密值,不会告诉任何人
publicA(){
Randomr=newRandom(200);
a=r.nextInt();
}
publicintgetV(){
return(Test1.G^a)%Test1.P;
}
publicintgetKey(intv){
return(v^a)%Test1.P;
}
}
classB{
privateintb;//自己的私有密值,不会告诉任何人
publicB(){
Randomr=newRandom(200);
b=r.nextInt();
}
publicintgetV(){
return(Test1.G^b)%Test1.P;
}
publicintgetKey(intv){
return(v^b)%Test1.P;
}
}
F. 哪位能提供焊接六自由度机器人的DH逆运动算法和速度控制算法的源码
源码没有,不过可以根据实际情况写。其实说白了就是解矩阵方程组。
G. md5变形加密算法 DHPHI
在不理解MD5算法的前提下,岂能想改哪里就改哪里。很可能随便改一个地方都会造成更多的碰撞。
其实只要加点“盐”就可以了,干吗要去改一个成熟的算法呢?
你能找出加“盐”所带来的坏处吗?
H. linux 密钥交换算法DH是不是算双方生成了密钥
我自己写了个DH秘钥的demo代码, 以前加密用过AES的加密,全套代码写下来太费时间又没技术含量。
如果你需要AES的加密代码可以留个邮箱给我。
I. 非对称dh的类似定理
中国馀数定理源出三国或晋朝的孙子算经,其中有一题:今有物不知其数,三三数之剩2,五五数之剩3,七七数之剩2,问物几何?
以同馀式表之,即 解,孙子算经中给出答案 x=23
一元一次联立同馀式,后世称为大衍,其解法称为大衍求一术,到宋代秦九韶(1202~1261年)集大成同余中的一些定理。 我们再来看看DH是怎么计算出共享密钥的:
以下各试“=”均读作同余,且假定A和B生成的g和p均相同,至于为什么这里就不做讨论了
首先A先计算X = g^a mod p
B 计算Y= g^b mod p
然后A和B交换X和Y
这样A就得到了Y,通过通余定理:
因为Y= g^b mod p
所以Y^a=(g^b)^a mod p
=g^(ba) mod p
同理 B计算出: X^b=g^(ab) mod p
显然,这里Y^a=X^b
也就是说A和B计算出一个只有他们知道的相同的共享密钥了。
当然如果有个第三者他只知道X、Y,他在有限的时间内是算不出a和b的,至于为什么,因为我不是数学家所以我也不知道(上面的公式也是我想了n久才想通的)。
以上就是我对DH算法的一些总结,希望这些东西对大家理解IPsec VPN有所帮助。
注:通余定理的公式符号表示的不完整,大家容易产生误解,改后:
如果Y= g^b mod p(就是Y mod p = g^b mod p)
那么Y^a= (g^b)^a mod p (就是Y^a mod p = (g^b)^a mod p)
这样就没问题了。