DH密钥协商算法报告文档.docx
- 文档编号:2323081
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:27
- 大小:429.23KB
DH密钥协商算法报告文档.docx
《DH密钥协商算法报告文档.docx》由会员分享,可在线阅读,更多相关《DH密钥协商算法报告文档.docx(27页珍藏版)》请在冰豆网上搜索。
DH密钥协商算法报告文档
XXXX学院
课程设计报告
DH密钥协商算法
课程名称:
密码算法程序设计
学生姓名:
学生学号:
专业班级:
任课教师:
2014年12月1日
指导老师评阅成绩表
学习与工作态度(30%)
选题意义(10%)
研究水平与设计能力(25%)
课程设计说明说(论文)撰写质量(25%)
设计创新(10%)
总分
指导老师签名:
年月日
课程设计答辩记录及评价表
学生
讲述情况
教师主要
提问记录
学生回答
问题情况
答辩评分
评分项目
分值
评价参考标准
评分
总分
优
良
中
及格
差
选题意义
10
9
8
7
6
4
研究水平与设计能力
25
23
20
18
15
10
课程设计说明书(论文)撰写质量
25
23
20
18
15
10
设计创新
10
9
8
7
6
4
答辩效果
30
28
25
22
19
15
答辩小组成员签名
答辩小组组长签名:
年月日
课程设计成绩评定表
成绩汇总
评分项目
评分
比例
分数
课程设计总分
指导老师评分
50%
答辩小组评分
50%
1.选题背景
密钥协商实际上是一个协议,它通过两个或多个成员在一个公开的信道上通信联合地建立一个秘密密钥,一般情况下,一个密钥协商方案的密钥是某个函数的值,其输入量由通信双方提供,协商过程是由一系列的顺序步骤完成的。
会话密钥由每个协议参与者分别产生的参数通过一定的计算得出。
常见的密钥协商协议,如IKE。
密钥协商协议的生成方式则可分为证书型和无证书型。
证书型是指在会话密钥的产生过程中,由一个可信的证书中心(CA)给参与密钥协商的各方各分发一个证书,此证书中含有此方的公钥,ID及其他信息。
证书型密钥协商协议的优点是提供认证,目前PKI(公钥密码体制)广泛部署,比较成熟,应用面广,且由PKG管理公私钥对有利于统一管理,缺点是计算代价大,需要一个可信的CA,同时证书还需要维护。
无证书型是指各方在进行会话密钥的协商过程中不需要证书的参与,这是目前密钥协商协议的主流种类,优点是不需要CA的参与,减少了计算量,尤其是在低耗环境下应用的更多,同时安全性也不比证书型弱。
几乎没有明显的缺点,只是设计一个安全的更加低耗的无证书密钥协商方案不是很容易。
现有的流行的密钥协商协议,都使用了Diffie-Hellman,它们基本上可以看成是Diffie-Hellman的扩展。
也就是说,群组密钥协商协议可以理解成如何使用Diffie-Hellman来实现群的密钥交换。
2.DH密钥协商算法
2.1算法的产生
Diffie-Hellman密钥交换协议是第一个被提出的密钥协商方案,是美国斯坦福大学的W.Diffie和M.E.Hellman于1976年提出的,它是第一个发表的公钥密码体制,Diffie-Hellman算法的唯一目的就是使两个用户能安全的交换密钥,从而得到一个共享的会话密钥(秘密密钥)。
需要注意的是,该算法本身不能用于加密解密,只能用于密钥的交换,双方确定要用的密钥后,要使用其他对称密钥操作加密算法实际加密和解密消息。
2.2算法的描述
1.离散对数的概念:
1)原根:
如果a是素数p的一个原根,那么数值:
a mod p,a^2 mod p,…,a^(p-1) mod p是各不相同的整数,且以某种排列方式组成了从1 到p-1 的所有整数。
2)离散对数:
如果对于一个整数b和素数p的一个原根a,可以找到一个唯一的指数i,使得b =(a^i)modp,其中0≦i≦p-1,那么指数i称为b的以a为基数的模p的离散对数。
2.算法有效性
Diffie-Hellman 算法的有效性依赖于计算离散对数的难度,其含义是:
当已知大素数p和它的一个原根a后,对给定的b,要计算 i ,被认为是很困难的,而给定 i 计算b 却相对容易。
3.Diffie-Hellman算法:
假如用户A和用户B希望交换一个密钥。
取素数p和整数a,a是p的一个原根,公开a和p。
1)A选择大的随机数RA(0<=RA<=p-2),并计算SA=(a^RA)modp,并且把SA发送给用户B。
2)B选择随机数RB(0<=RB<=p-2),并计算SB=(a^RB)modp,并且把SB发送给用户A。
3)A计算密钥的方式是:
K=(SB)^RAmod p,B计算密钥的方式是:
K=(SA)^RBmod p,
证明:
(SB)^RAmod p =(a^RBmod p)^RAmod p
=(a^RB)^RAmod p
=(a^RA)^RBmod p
(--密钥即为a^(RA*RB)mod p)
=(a^RAmod p)^RBmod p
=(SA)^RBmod p
由于RA和RB是保密的,而第三方只有p、a、SB、SA可以利用,只有通过取离散对数来确定密钥,但对于大的素数p,计算离散对数是十分困难的。
4.例子:
假如用户Alice和用户Bob希望交换一个密钥,取一个素数p =97和97的一个原根a =5,Alice和Bob分别选择秘密密钥RA=36和RB=58 ,并计算各自的公开密钥:
SA=a^RAmod p =5^36mod97=50
SB=a^RBmod p =5^58mod97=44
Alice和Bob交换了公开密钥之后,计算共享密钥如下:
Alice:
K=(SB)^RAmod p=44^36mod97=75
Bob:
K=(SA)^RBmod p=50^58mod97=75
Diffie-Hellman密钥交换协议的基本模式如图2-1所示:
图2-1Diffie-Hellman密钥交换协议的基本模式
2.3算法的安全性
当然,为了使这个例子变得安全,必须使用非常大的RA, RB以及p,否则可以实验所有的可能取值。
(总共有最多97个这样的值,就算RA和RB很大也无济于事)。
如果 p 是一个至少300位的质数,并且RA和RB至少有100位长,那么即使使用全人类所有的计算资源和当今最好的算法也不可能从a, p和a^(RA*RB)mod p 中计算出RA*RB。
这个问题就是著名的离散对数问题。
注意g则不需要很大,并且在一般的实践中通常是2或者5。
在最初的描述中,迪菲-赫尔曼密钥交换本身并没有提供通讯双方的身份验证服务,因此它很容易受到中间人攻击。
一个中间人在信道的中央进行两次迪菲-赫尔曼密钥交换,一次和Alice另一次和Bob,就能够成功的向Alice假装自己是Bob,反之亦然。
而攻击者可以解密(读取和存储)任何一个人的信息并重新加密信息,然后传递给另一个人。
因此通常都需要一个能够验证通讯双方身份的机制来防止这类攻击。
有很多种安全身份验证解决方案使用到了迪菲-赫尔曼密钥交换。
例如当Alice和Bob共有一个公钥基础设施时,他们可以将他们的返回密钥进行签名。
有攻击的Diffie-Hellman密钥交换协议如图2-2所示:
图2-2有攻击的Diffie-Hellman密钥交换协议
3.DH密钥协商算法的实现
3.1设计要求
3.1.1功能要求
(1)产生一个奇数p,判断是否是素数。
素数要求介于2^14-2^15。
先用小于20的素数去试除,再使用Miller-Rabin概率检测算法进行检测;
(2)求得模p的一个原根,要求原根的值介于32-1024之间;
(3)输出双方选择的随机数,随机数介于2^5-2^7,使用模重复平方法进行计算,输出双方的计算结果;
(4)网络传输方面,可以是C/S模式,也可以是B/S模式;
(5)输出最后协商的密钥;
3.1.2输出要求
(1)输出奇数的产生过程,用函数实现产生满足要求的奇数;
(2)输出用小素数试除的判断过程,并输出每次试除之后的余数,用函数实现一次试除并返回试除之后的余数;
(3)Miller-Rabin概率检测算法运行5次,输出检测过程及结果。
用函数实现一次Miller-Rabin概率检测算法并返回检测结果;
(4)如果不是奇素数,输出下一个奇数产生的规则;
(5)输出产生模的一个原根的过程;
(6)输出使用模重复平方法进行计算的过程和结果。
3.2模块划分及实现
3.2.1小素数试除
算法描述:
小素数试除主要是用随机产生的数来试除小于20的素数,以此简单判定该随机数是否是素数。
实现方式:
以本次程序编写为例,取小素数数组S_PrimeTable[7]={3,5,7,11,13,17,19},用产生的大随机数来除以数组中的元素,若所得余数不为0,则能暂时判断该随机数为素数。
具体实现代码如下:
intSPrime(intodd)
{
inti,remainder,k=0;
for(i=0;i<7;i++)
{
remainder=odd%S_PrimeTable[i];
printf("第%d次小素数%d试除的余数为%d.\n",i+1,S_PrimeTable[i],remainder);
if(remainder==0)
k++;
}
if(!
k)
{
printf("小素数试除判断%d是素数。
\n\n",odd);
}
else
{
printf("小素数试除判断%d不是素数。
\n\n",odd);
}
return!
k;
}
3.2.2模重复平方法
算法描述:
模重复平方法是对大整数模m和大整数e计算b^e(modm)。
在本次设计中,模重复平方法主要使用在米勒检测算余值部分、求原根部分、SA和SB的计算以及最后密钥的计算过程中,
其中,SA和SB的计算以及最后密钥的计算要求输出计算过程。
(为了界面显示美观,在此写了两个模重复平方算法的代码,思路相同,只是在其中一个函数中写了输出计算过程,该函数用来计算SA和SB以及最后的密钥。
)
实现方式:
令a=1,并将十进制数e写成二进制,若二进制数值为1,则计算a≡(a*b)modn,b≡(b*b)modn;若二进制数值为0,则计算a≡amodn,b≡(b*b)modn。
最后a即为最终计算结果。
具体实现代码如下:
intMoChongFu(intm,inte,intn)
{
intbinary[22];
intcount=0,i;
inta=1,b;
b=m;
do{
binary[count]=e%2;
e=e/2;
count++;
}while(e!
=0);
for(i=0;i { if(binary[i]==1) { a=(a*b)%n; b=(b*b)%n; //printf("a=%d,b=%d\n",a,b); } if(binary[i]==0) { a=a; b=(b*b)%n; //printf("a=%d,b=%d\n",a,b); } } returna; } 3.2.3Miller-Rabin检测算法 算法描述: 米勒检测
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DH 密钥 协商 算法 报告 文档