问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Diffie-Hellman密钥协商算法

发布网友 发布时间:2022-12-21 22:33

我来回答

1个回答

热心网友 时间:2024-09-01 14:21

目前常用的加密算法主要有:哈希算法(比如MD5、SHA族、Hmac),对称加密算法(比如AES),非对称加密算法(RSA),以及Diffie-Hellman密钥协商算法等等,这几种算法都有各自的特点,适合的场景也不一样,这里只做简单的介绍,想详细了解的话,网上资料很多,可以自行查看相关的资料。

各类算法的特点:

哈希算法:正向快速,不可逆性,即加密后是很难解密出明文的。经常用于数据加密和数据校验。

对称加密算法:AES是一种常用的对称加密算法,其特点是加解密都用同一个密钥。

非对称加密算法RSA:RSA算法是一种非对称加密算法,由一个私钥和一个公钥构成的密钥对,通过私钥加密,公钥解密,或者通过公钥加密,私钥解密。其中,公钥可以公开,私钥必须保密。

Diffie-Hellman密钥协商算法:Diffie-Hellman是一种密钥协商算法(简称DH算法),DH算法基于一种数学原理,能够在双方不泄露密钥的情况下协商出一种密钥来。

在客户端向服务器端发送数据的过程中,如果是比较重要的数据(比如密码,敏感数据等),一般需要先在客户端进行加密后再发送,服务器接收到数据后再进行解密得到原始数据。(反过来服务器返回数据给客户端也是一样的道理)

这里假设客户端和服务器端采用AES(对称加密算法)进行加解密传输的数据,AES加密算法有一个特点就是加解密都用同一个密钥(这里把该密钥称作secretKey),所以双方都通过secretKey进行数据加解密。

因此在客户端向服务器第一次传输数据的时候,客户端需要先向服务器端获取secretKey,并且保存在客户端,而这种直接向服务器获取明文secretKey的过程是很容易被第三者拦截的,也就是说这一过程是不安全的。(哈哈,除非是服务器把secretKey写到纸上,亲手偷偷地递给客户端)

因此呢,客户端向服务器获取secretKey的这一过程,也是需要进行加密的。

那么,服务器需要怎么做才能把secretKey安全的送达客户端呢?

目前常采用的方法有:RSA 或 Diffie-Hellman

RSA有一个公钥和一个私钥,公钥是允许公开出去的,私钥是保留的。RSA的要点在于用公钥加密的数据需要用私钥解密,用私钥加密的数据,需要用公钥解密。因此,比如这时候客户端把公钥发送给服务器,服务器利用客户端的公钥对secretKey进行加密,那么这份加密后的secretKey数据,就只有客户端的私钥能解开啦。即使第三者拿到了这份数据也解密不了,除非能获取到客户端的私钥。

所以,通过RSA的方式,服务器就能把secretKey安全的传递到客户端的手里啦。(不过,RSA也是有安全漏洞的,被称作中间人攻击,由于篇幅原因,这里就先不讲啦!大家自行百度。)

虽然使用RSA能够安全的传输secretKey密钥,但是麻烦点在于需要生成一对公钥和私钥,并且把公钥发送给对方,而且加解密速度比较慢。所以,介绍第二种:Diffie-Hellman密钥协商算法。

严格来说,DH算法其实并不是一种加密算法,因为它本身并不是用于加密的,我的理解是用于双方协商计算,即双方按照某种合约进行计算,从而计算出一种相同的结果。

原理如下:

第一步:初始化

    比如现在服务器提供了两个随机公钥数字(允许公开):pubN=10,modN=3;

       客户端自己生成了一个随机私钥数字(不可公开,服务器也不知道):cPrivN=2;

服务器端也自己生成了一个随机私钥数字(不可公开,客户端也不知道):sPrivN=4;

第二步:客户端、服务器端分别基于相同的数学公式进行计算,计算结果称作公钥结果:pubResult

客户端进行数学计算:cPubResult = pubN * cPrivN % modN = 10 * 2 % 3 = 2;(计算结果允许公开)

服务器进行数学计算:sPubResult = pubN * sPrivN % modN = 10 * 4 % 3 = 1;(计算结果允许公开)

客户端和服务器端交换公钥结果,客户端得到sPubResult=1,服务器端得到cPubResult=2。

第三步:协商出一致的密钥数字:keyN(客户端和服务器端得出的结果是一致的)

客户端:cKeyN = sPubResult * cPrivN % modN= 1 * 2 % 3 = 2;
服务器:sKeyN = cPubResult * sPrivN % modN= 2 * 4 % 3 = 2;

到目前为止呢,双方都协商出了密钥,并且是一致的,但是呢,有没有见过密钥是number类型的?想必都没有吧,所以需要进行第四步,生成更长的密钥。

第四步:对密钥数字进行hash生成密钥串
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
凉拌黑木耳:泡发后需要用沸水焯多长时间啊? 请问怎样截图视频某段然后制作GIF动画呢???另外截图后,每个帧怎样做相... 手把手教你用 Chrome 制作 GIF 截图 四川达州中考录取分数线,? 宣汉昆池职业中学2024年分数线是多少 大竹县石子职业中学2024年分数线是多少 韦博开心豆少儿英语教学如何创新并保持学习动力与成果? 有什么好看的日漫?【 不要太老的 人物都很漂漂 】 谢谢na~ 推荐好看的日漫 类型无所谓,老一点也可以,新出的也可以。但绝对不... 兔属相和龙属相合不合 兔属相和什么相冲相克 Diffie-Hellman算法 在美国得了癌症会免费治疗吗 求作文《幸福就在身边》600字 济南真正医药连锁总店这个网站上都是治疗癌症的国药准字号药物吗?我想... 富裕起来的父母 大湾北路和谐小区二期属于哪个街道 家长拥有哪些品质才能更好地助力孩子成长呢? 微信如何解除人脸识别支付 花都为啥突然停电? 鄢陵县彭店乡今天停电吗 木桶饭店里停电通知怎么发朋友圈 济南哪家药店可以在网上买药啊? 豆腐是碱性食品为什么尿酸高的人却不能吃, 作文我原来也这样幸福600字 悲剧和戏剧的区别! 请龙龟需要生辰八字吗 女孩名字叫高子宸好不好? ...如果你也要捐赠长椅,你会在长椅上写些什么? 常州独具匠心股份有限公司怎么样 ”心怀感恩”的下一句是什么? 担保单位向银行回函同意乙公司申请贷款延期的函 司法会计鉴定工作细则 济南有药店可以买到爽耳通组合吗? 在济南哪个药店能买到三七养血胶囊,吉林敖东产的 济南市区哪里买药全 我想买 耐信(埃索美拉唑肠溶片) 结维乐(磷酸铝凝胶... 前段时间在济南立和中医院拿了中药,网上买的,效果挺好,快吃完了,网... dnf暗黑神殿怎么选择装备 鲜桂圆如何晒干 鲜桂圆怎么晒干 幸福快乐作微信名好吗 乌鲁木齐天山区是不是高风险地区 中国邮政储蓄银行乌鲁木齐中环路营业所行号多少? 天山区中环路支行的行号是多少号 我在昌吉市石油大厦要去乌鲁木齐天山区大湾北路泰洋旅馆怎么走_百度知 ... 陶宝上买东西后待收货和评价上记录单子时间长了会不会他自己没了_百度... 零陵古城和东山古城距离 杜甫草堂导游团队怎么租讲解器(本地出行攻略) 比西特讲解器每次都要对码吗 无线导游讲解器说话范围有多大?成都哪里可以租凭? 森林里的歌唱大赛童话作文 兰蔻焕亮眼霜和发光眼霜区别