国标文件涉及密钥协商算法的函数

  • 生成密钥协商参数并输出
  • 计算会话密钥
  • 产生协商数据并且计算会话密钥

密钥协商(交换)算法及其原理

密钥交换/协商目的

  • “密钥协商机制”是:(在身份认证的前提下)规避【偷窥】的风险。通俗地说,即使有攻击者在偷窥客户端与服务器的网络传输,客户端(client)依然可以利用“密钥协商机制”与服务器端(server)协商出一个只有二者可知的用来对于应用层数据进行加密的密钥(也称“会话密钥”)。

密钥交换/协商机制的几种类型

1,依靠非对称加密算法

原理:

  • 拿到公钥的一方先生成随机的会话密钥,然后利用公钥加密它,再把加密结果发给对方,对方用私钥解密;于是双方都得到了会话密钥。

举例:

  • RSA、SM2

秘钥协商/交换步骤:

  1. 客户端连上服务端
  2. 服务端发送 CA 证书给客户端
  3. 客户端验证该证书的可靠性
  4. 客户端从 CA 证书中取出公钥
  5. 客户端生成一个随机密钥 k,并用这个公钥加密得到 k’
  6. 客户端把 k’ 发送给服务端
  7. 服务端收到 k’ 后用自己的私钥解密得到 k,此时双方都得到了密钥 k,协商完成。

例子:

  • RSA的秘钥协商流程

  • SM2的秘钥协商流程
  • 参考链接:https://wenku.baidu.com/view/a953fa07de80d4d8d15a4f0d.html#

2,依靠专门的密钥交换算法

简介:

  • DH 算法又称“Diffie–Hellman 算法”,它可以做到“通讯双方在完全没有对方任何预先信息的条件下通过不安全信道创建起一个密钥”, 即通讯双方事先不需要有共享的秘密。而且,使用该算法协商密码,即使协商过程中被别人全程偷窥(比如“网络嗅探”),偷窥者也无法知道最终协商得出的密钥结果。

缺点:

  • 此算法不支持认证,虽然可以抵抗偷窥但是无法抵抗篡改,无法对抗中间人攻击。一般此算法会配合其余的签名算法搭配使用,比如RSA、DSA算法。

例子:

  1. Alice和Bob约定使用一个模 p = 23和g = 5
  2. Alice选择一个保密的整数 a = 4作为私钥,计算出公钥 A = g^a mod p,将公钥A发送给Bob;A = 5^4 mod 23 = 4
  3. Bob选在一个保密的整数 b = 3,计算出公钥 B = g^b mod p,将公钥B发送给Alice;
  4. B = 5^3 mod 23 = 10
  5. Alice 计算出共享密钥  s = B^a mod p   s = 10^4 mod 23 = 18
  6. Bob 计算共享密钥    s = A^b mod p   s = 4^3 mod 23 = 18
  7. Alice和Bob现在就共享一个密钥(s = 18)

优势:

  1. 通信双方分别计算出来的 k 必定是一致的
  2. 通信双方都无法根据已知的数来推算出对方的私钥
  3. 对于一个旁观者(偷窥者),虽然能看到 p,g,A,B,但是无法推算出 a 和 b(旁观者无法推算出双方的私钥),自然也无法推算出 k

注意事项:

  1. p 必须是质数且足够大(至少300位)
  2. a,b 也要足够大(至少100位),且必须是随机生成。
  3. g 必须是质数,不需要很大,比如 2 或 3 或 5 都可以。g 如果太大并不能显著提升安全性,反而会影响性能。

步骤:

  1. 客户端连接上服务器;
  2. 服务器端生成一个随机数S作为自己的私钥,做模幂运算之后,得到公钥;
  3. 服务器,选择RSA,ECDSA,DSA的一种,对模幂运算的参数,以及公钥进行签名,并发送给客户端; 防止服务器被篡改
  4. 客户端验证签名是否有效; 客户端并不会对签名进行解密,DH的特性,双方只交换公钥,只做加密操作;
  5. 客户端也产生一个随机数C,加密之后,将公钥传给服务器;
  6. 客户和服务器,根据得到的公钥产生同一个会话密钥;

3,依靠通讯双方事先已经共享的“秘密”

简介:

  • 既然双方已经有共享的秘密(这个“秘密”可能已经是一个密钥,也可能只是某个密码/password),只需要根据某种生成算法,就可以让双方产生相同的密钥(并且密钥长度可以任意指定)
  • PSK 即“Pre-Shared Key”的缩写,就是预先让通信双方共享一些秘钥,这些秘钥通常是对称加密的秘钥,所谓的预先是指这些秘钥在双方尚未构建TSL协议之前,就已经部署在双方的系统之内了。

优势:

  • 不需要依赖公钥体系,不需要部属 CA 证书。不需要涉及非对称加密,TLS 协议握手(初始化)时的性能好于前述的 RSA 和 DH。

步骤:

  • 在通讯之前,通讯双方已经预先部署了若干个共享的密钥。为了标识多个密钥,给每一个密钥定义一个唯一的 ID。协商的过程很简单:客户端把自己选好的密钥的 ID 告诉服务端。如果服务端在自己的密钥池子中找到这个 ID,就用对应的密钥与客户端通讯,否则就报错并中断连接。

参考链接:

  • https://www.cnblogs.com/yungyu16/p/13332882.html
  • https://blog.csdn.net/youngbug/article/details/78740805
  • https://www.jianshu.com/p/b1d6996d2f51
  • https://www.cnblogs.com/qcblog/p/9016704.html
  • http://www.5g-cn.com/tls%E4%B8%AD%E7%9A%84%E5%AF%86%E9%92%A5%E5%8D%8F%E5%95%86%E7%AE%97%E6%B3%95/
  • https://wenku.baidu.com/view/a953fa07de80d4d8d15a4f0d.html#
  • https://halfrost.com/https_tls1-2_handshake/
  • https://www.wosign.com/SM2/SM2.htm

密钥协商(密钥交换)机制的讲解相关推荐

  1. RSA加密算法和DH密钥协商的比较

    最近在知乎上看到一篇关于RSA和DH的比较,简单明了,以此记录一下. 问题1:  RSA做密钥协商(密钥交换)时,是否可以防范中间人攻击? 答:单就RSA本身而言,是无法防范中间人攻击的. 和其它加密 ...

  2. HTTPS 和 SSL/TLS 协议:密钥交换(密钥协商)算法及其原理

    转自:https://blog.csdn.net/andylau00j/article/details/54583769 本系列的前一篇,咱们聊了"密钥交换的难点"以及" ...

  3. 扫盲 HTTPS 和 SSL/TLS 协议[3]:密钥交换(密钥协商)算法及其原理

    文章目录 ★密钥交换/协商机制要达到啥目的? ★密钥交换/协商机制的几种类型 ★基于 RSA 的密钥协商 ★基于 DH 的密钥协商 ★DH 的变种 ★基于 PSK 的密钥协商 ★基于 SRP 的密钥协 ...

  4. 在服务器密钥交换握手信息,TLS的握手流程-密钥协商与身份认证过程 | 程序小兵...

    在安全HTTPS中提及到的密钥协商(安全通讯前的准备工作)中,包含了身份认证和密钥协商2大过程如下,其中SSL协议包含记录协议和握手协议,在握手协议中协商通讯传输的的对称加密密码.压缩算法.加密算法等 ...

  5. 密钥协商算法的演变 —— RSA算法 - DH算法 - DHE算法 - ECDHE算法

    文章目录 1. RSA算法 RSA握手过程 RSA秘钥协商算法最大的缺陷 2. DH算法 3. DHE算法 4. ECDHE算法 ECDHE秘钥协商算法的TSL握手: 1. RSA算法 传统的 TLS ...

  6. 公钥密码--Diffie-Hellman密钥协商算法

    公钥密码--Diffie-Hellman密钥协商算法 算法过程 正确性 安全性 博主是初学公钥密码,本意是想整理一些经典的密码系统,加深记忆也方便日后查找:整理成一个系列公钥密码,方便检索. 如果有错 ...

  7. 图表——SM2密钥协商与ECMQV对比

    1. SM2密钥协商流程图 2. SM2密钥协商与ECMQV对比 1995年,Menezes等人给出MQV方案,该方案与SM2方案仅在少量几个地方有差异: 紫色高亮的部分为SM2方案特有. 青色高亮的 ...

  8. mbedtls学习(8)ECDH密钥协商

    ECDH密钥协商 ECDH密钥协商算法基于椭圆曲线密码系统(ECC),使用较短的密钥长度可提供与RSA或DH算法同等的安全等级,密钥长度位160 ~ 256比特的椭圆曲线算法与密钥长度位1024 ~ ...

  9. 认证密钥协商(Authentication key agreement)的安全目标

    安全目标 几种常见的攻击 密钥协商的目的是在不可靠或者充满恶意的通信环境下实现参.参与者的安全会话.在这种环境中,存在着多种多样的攻击方式,它们可以是数学上的,也可以是物理方式上的:可以利用通信手段的 ...

最新文章

  1. yii2 后台权限验证获取用户身份_Yii2搭建后台并实现rbac权限控制完整实例教程...
  2. 概率x^2 t F三大分布的联系
  3. Windows网络通信(二):socket异步编程
  4. Oracle 11g R2 常见问题处理
  5. django中使用POST方法 获取POST数据
  6. python | 三种可变参数简述
  7. 26 WM配置-策略-入库策略6-定义批量仓储的策略B(Bulk Storage Strategy)
  8. 为什么资源文件名以类型开头
  9. python医药数据,PostgreSQL+Python实现药品规格数值与单位拆分
  10. cad数字签名制作制作_电影制作部门按数字变化
  11. 在VUE框架的WEB网页端播放海康威视RTSP视频流完全方案
  12. 全靠这套面试题,历经一年学弟从家里到了阿里,只要有梦想总会实现的
  13. c语言浮点数乘法算法,单精度浮点数乘法的实现
  14. 虚拟化技术 — 硬件辅助的虚拟化技术
  15. Linux如何退出VI编辑
  16. GPU 资源消耗原因和解决方案:
  17. PigGo配置Gitee仓库出现“Not Found Project“的错误解决方案
  18. 艾司博讯:拼多多企业店铺和个人店的区别在哪里?
  19. Java常用10种设计模式详解
  20. SAP MM模块常用的标准报表

热门文章

  1. c malloc 头文件_C/C++笔试题:主要考察C/C++语言基础概念算法及编程,附参考答案...
  2. Java swing 实现下拉框和文本框同步显示
  3. 【转】3.3(译)构建Async同步基元,Part 3 AsyncCountdownEvent
  4. 【转】理解SQL Server的安全对象和权限
  5. 由浅到深理解ROS(7)-URDF
  6. 【Python CheckiO 题解】The Warriors
  7. 网页传世服务器端,传世服务端文件分析
  8. 【2019牛客暑期多校训练营(第五场)- E】independent set 1(最大独立集,状压dp)
  9. 【2019牛客暑期多校训练营(第二场)- E】MAZE(线段树优化dp,dp转矩阵乘法,线段树维护矩阵乘法)
  10. 【牛客 - 297C】little w and Segment Coverage(差分数组,区间差分,思维,卡线段树)☆