当前位置:首页 > 代码 > 正文

dh算法源代码(DH算法主要用于)

admin 发布:2022-12-19 09:56 149


本篇文章给大家谈谈dh算法源代码,以及DH算法主要用于对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

什么是DH非对称加密算法?

DH(仅能用于密钥分配,不能加解密数据)

非对称加密算法

特点:

发送方和接收方均有一个密钥对(公钥+私钥),其中公钥传播,私钥自己保存,不需要传播

私钥不需要传播的特性解决了对称加密算法中密钥传播的困难(这个困难一般通过线下传递可以解决)

加密安全性极高,只用于一些电子商务网站,加解密速度远低于对称加密

一般情况下,为了解决非对称加密算法加解密速度低的问题,采用非对称加密(使用公钥+私钥对对称加密的密钥进行加解密)+对称加密(加解密数据)相结合的方式。

常见算法:

DH(非对称加密的基石)

RSA(非对称加密的经典,除了可用于非对称加密,也可用于数字签名,RSA--155(512位密钥)已被破解)

ElGamal

DH密钥交换(Diffie–Hellman key exchange)算法笔记

注意:只是个人理解,可能有不正确的地方

下文中 代表乘方运算,例如2 3=2 2 2=6,参考:

%代表模运算,例如5%3=2,参考:

DH密钥交换算法的作用是使通信双方可以在不安全的通道中建立一个相同的密钥,用于加密通信。

基本原理示例:

1、通信方A和通信方B约定一个初始数g,g是公开的,如g=5

2、A生成一个随机数a,a是保密的,如a=6

3、A计算g a发送给B,g a=5^6

4、B生成一个随机数b,b是保密的,如b=15

5、B计算g b发送给A,g b=5^15

6、A接收到g b后,再使用保密的a,计算(g b) a=g (a b)=5^(6 15)

7、B接收到g a后,再使用保密的b,计算(g a) b=g (a b)=5^(6 15)

8、这样通信方A和B得到一个相同的“密钥”g (a*b)=5 (6 15)

整个通信过程中g、g a、g b是公开的,但由于g、a、b都是整数,通过g和g a得到a还是比较容易的,b也是如此,所以最终的“密钥”g (a b)还是可以被计算出来的。所以实际的过程还需要在基本原理上加入新的计算—— 模运算 :

1、通信方A和通信方B约定一个初始数g,如g=5,一个质数p,如p=23,g和p是公开的

2、A生成一个随机数a,a是保密的,如a=6

3、A计算g a%p发送给B,g a%p=5^6%23=8

4、B生成一个随机数b,b是保密的,如b=15

5、B计算g b%p发送给A,g b%p=5^15%23=19

6、A接收到g b%p后,再使用保密的a,计算(g b%p) a%p=19 6%23=2

7、B接收到g a%p后,再使用保密的b,计算(g a%p) b%p=8 15%23=2

8、这样通信方A和B得到一个相同的密钥:2

(g b%p) a%p=(g a%p) b%p的证明:

如果a=2:

(g b%p) a%p=(g b%p) 2%p=(g b-n*p) 2%p=(g (2*b)-2*g b n p+(n p) 2)%p=g (2 b)%p

可以看出(g b-n*p) 2展开后除g (2*b)外,其它都是p的倍数,所以整个算式的结果是g (2 b)%p

同理对(g^b-n p) a展开后除g (a b)外,其它都是p的倍数,所以整个算式的结果是g^(a b)%p

同样可以得出(g a%p) b%p=g^(a b)%p

所以(g b%p) a%p=(g a%p) b%p

整个通信过程中g、p、g a%p、g b%p是公开的,这时通过g、p、g a%p得到a比较难,同样通过g、p、g b%p得到b比较难,所以最终的密钥是比较安全的。

以g=5、p=23、g^a%p=8计算a为例,a=log(5, (8+23 n)),这个只能将n的可能值逐个带入公式试验才能得到a的值。如果a、p是比较大的数那么计算更加困难。

如果注意的是,为了防止应用优化算法计算上述问题, 质数p不是随便选择 的,需要符合一定的条件。 随机数a、b的生成算法也必需注意 ,应使结果尽可能随机,不能出现可预测的规律,否则会使破解变的容易。

通过上述计算过程也可以看出DH算法不仅可以应用在2方通信的情况,如果 多方通信 ,也可以使用该算法。

DH密钥交换算法 无法验证对方身份 ,所以DH密钥交换算法 不能抵御中间人攻击 (MITM,Man-in-the-middle attack)。

参考:

wiki:

原文链接:

简述DH算法

DH组的本质是使用非对称密钥来加密对称密钥。 DH算法过程: 1、相互产生密钥对 2、交换公钥 3、用对方的公钥和自己的私钥运行DH算法——得到另外一个密钥X

哪位能提供焊接六自由度机器人的DH逆运动算法和速度控制算法的源码?

源码没有,不过可以根据实际情况写。其实说白了就是解矩阵方程组。

验证DH密钥交换算法

我自己写了个DH秘钥的demo代码, 以前加密用过AES的加密,全套代码写下来太费时间又没技术含量。

如果你需要AES的加密代码可以留个邮箱给我。

public class Test1 {

public static final int P=30;//公开的大家都知道的

public static final int G=9;//公开的大家都知道的

public static void main(String[] args) {

A x = new A();

int one = x.getV();

//分割 A 代表A这边的系统加密  one 代表是给别人的值

B y = new B();

int two = y.getV();

//B 代表另外一边加密 two 代表是给别人的值

System.out.println(x.getKey(two));

System.out.println(y.getKey(one));

}

}

class A{

private int a;//自己的私有密值,不会告诉任何人

public A() {

 Random r = new Random(200);

a=r.nextInt();

}

public int getV(){

return (Test1.G^a)%Test1.P;

}

public int getKey(int v){

return (v^a)%Test1.P;

}

}

class B{

private int b;//自己的私有密值,不会告诉任何人

public B() {

Random r = new Random(200);

b=r.nextInt();

}

public int getV(){

return (Test1.G^b)%Test1.P;

}

public int getKey(int v){

return (v^b)%Test1.P;

}

}

简要介绍DH密钥交换算法

姓名:朱睿琦

学号:15180288015

参考:

【嵌牛导读】:随着互联网络的高速发展,计算机运算能力的提升,对信息的保密也有了更近一步的要求——不仅信息要保密,密钥也要保密。DH(Diffie-Hellman)算法就提供了使密钥安全通过不安全网络的方法。

【嵌牛鼻子】:DH算法,密钥,网络信息安全

【嵌牛提问】:DH算法是用来保护什么在网络中的通信安全?DH密钥交换的基本原理是什么?

【嵌牛正文】:(1)、算法描述

离散对数的概念:

原根 :如果 a 是素数 p 的一个原根,那么数值:

a mod p , a^ 2 mod p ,…, a^( p-1) mod p

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

离散对数 :如果对于一个整数 b 和素数 p 的一个原根 a ,可以找到一个唯一的指数 i ,使得:

b =( a的i次方) mod p 其中 0 ≦ i ≦ p-1

那么指数 i 称为 b 的以 a 为基数的模p的离散对数。

Diffie-Hellman算法的有效性依赖于计算离散对数的难度,其含义是:当已知大素数 p 和它的一个原根 a 后,对给定的 b ,要计算 i ,被认为是很困难的,而给定 i 计算 b 却相对容易。

Diffie-Hellman算法:

假如用户A和用户B希望交换一个密钥。

取素数 p 和整数 a , a 是 p 的一个原根,公开 a 和p。

A选择随机数XA p ,并计算YA= a^ XA mod p。

B选择随机数XB p ,并计算YB= a^ XB mod p。

每一方都将X保密而将Y公开让另一方得到。

A计算密钥的方式是:K=(YB) ^XA mod p

B计算密钥的方式是:K=(YA) ^XB mod p

证明:

(YB)^ XA mod p = ( a^ XB mod p )^ XA mod p

= ( a^ XB)^ XA mod p = ( a^ XA) ^XB mod p (-- 密钥即为 a^(XA*XB) mod p )

=( a^ XA mod p )^ XB mod p = (YA) ^XB mod p

由于XA和XB是保密的,而第三方只有 p 、 a 、YB、YA可以利用,只有通过取离散对数来确定密钥,但对于大的素数 p ,计算离散对数是十分困难的。

例子:

假如用户Alice和用户Bob希望交换一个密钥。

取一个素数 p =97和97的一个原根 a =5。

Alice和Bob分别选择秘密密钥XA=36和XB=58,并计算各自的公开密钥:

YA= a^ XA mod p =5^36 mod 97=50

YB= a^ XB mod p =5^58 mod 97=44

Alice和Bob交换了公开密钥之后,计算共享密钥如下:

Alice:K=(YB) ^XA mod p =44^36 mod 97=75

Bob:K=(YA) ^XB mod p =50^58 mod 97=75

(2)、安全性

当然,为了使这个例子变得安全,必须使用非常大的XA, XB 以及 p , 否则可以实验所有的可能取值。(总共有最多97个这样的值, 就算XA和XB很大也无济于事)。

如果 p 是一个至少 300 位的质数,并且XA和XB至少有100位长, 那么即使使用全人类所有的计算资源和当今最好的算法也不可能从a, p 和a^(XA*XB) mod p 中计算出 XA*XB。

这个问题就是著名的离散对数问题。注意g则不需要很大, 并且在一般的实践中通常是2或者5。

在最初的描述中,迪菲-赫尔曼密钥交换本身并没有提供通讯双方的身份验证服务,因此它很容易受到中间人攻击。

一个中间人在信道的中央进行两次迪菲-赫尔曼密钥交换,一次和Alice另一次和Bob,就能够成功的向Alice假装自己是Bob,反之亦然。

而攻击者可以解密(读取和存储)任何一个人的信息并重新加密信息,然后传递给另一个人。因此通常都需要一个能够验证通讯双方身份的机制来防止这类攻击。

有很多种安全身份验证解决方案使用到了迪菲-赫尔曼密钥交换。例如当Alice和Bob共有一个公钥基础设施时,他们可以将他们的返回密钥进行签名。

dh算法源代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于DH算法主要用于、dh算法源代码的信息别忘了在本站进行查找喔。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/6307.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载