【密码学】密码协议的分类:③认证的密钥建立协议

devtools/2024/11/15 0:15:06/

        让我们来回顾一下三种密钥协议,第一种是认证协议,它的目的只是确认对方是不是合法身份;第二种是密钥建立协议,它的目的只是实现会话密钥的共享,没有考虑对方的身份是否合法。而本文要介绍的是第三种——认证的密钥建立协议。

一、什么是认证的密钥建立协议?

        所谓认证的密钥建立协议,就是将认证和密钥建立结合在一起的协议,使得Alice和Bob确信他们正在与可信赖的对方进行保密通信。即验证了对方身份的合法性又建立了彼此用于通信的会话密钥。

 所以在实际应用中,认证的密钥建立协议通常包含以下关键步骤:

  1. 身份验证:通信双方相互验证对方的身份。这可以通过数字证书、预共享密钥、公钥基础设施(PKI)或其他认证机制来实现。
  2. 密钥协商:在身份验证成功后,双方协商出一个会话密钥。这通常涉及随机数交换、密钥派生函数(KDF)或其他密钥协商算法。
  3. 密钥确认:双方确认协商出的会话密钥是一致的,并且没有被篡改。这可以通过消息认证码(MAC)、哈希函数或其他完整性保护机制来实现。

【注】密钥建立 = 密钥协商 + 密钥确认

认证的密钥建立协议中所采用的符号

 二、具体有哪些认证的密钥建立协议?

        协议各有特点,在不同的场景下有着不同的适用性和安全性考量。例如,Kerberos被广泛应用于企业网络环境中,而EKE则更适用于需要高度安全性的场景,尤其是在密码可能较弱的情况下。下面我们逐一介绍:

(1)大嘴青蛙协议(单钥)

步骤:

  1. 初始化: Alice 和 Bob 分别与 TTP (可信第三方)交换密钥K_A,K_B
  2. 请求会话: Alice 请求与 Bob 建立连接,向 TTP 发送一个请求,包含 Alice 的身份标识A,使用K_A加密Alice向对话的对象Bob的身份标识B和会话密钥K
  3. 转发: TTP 用 Bob和他事先共享的密钥K_B 进行加密,发送给Bob加密好的内容,包含期望与Bob建立会话的对象标识符A,双方的会话密钥K,以及时间戳
  4. 完成: Bob 收到密文后,用他的密钥K_B解密得到 K,现在 Alice 和 Bob 拥有相同的会话密钥 K

【注】大嘴青蛙协议有很多的安全隐患。

(2)Yahalom协议(单钥)

        Yahalom 协议与大嘴青蛙协议非常相似,因此步骤基本相同,主要区别在于协议设计时的细节处理上。

步骤:

  1. 初始化: Alice 和 Bob 分别与 TTP 交换密钥K_A,K_B
  2. 发起挑战: Alice 向 Bob 发送一个挑战值R_A,同时附上 Alice 的身份标识A。
  3. 请求会话: Bob向TTP发送请求会话信息,包含Bob的身份标识B,用与 Bob与TTP的会话密钥K_A加密Bob请求对话的对象Alice的身份标识A,和先前Alice发来的挑战值R_A,以及Bob自己生成的挑战值R_B
  4. 生成密钥: TTP 生成一个临时密钥 K,并用与 Alice 的会话密钥K_A加密 K,和Bob的身份标识B,和双方的挑战值,发送给 Alice。再用与Bob的会话密钥K_B加密K和Alice的身份标识A
  5. 确认: Alice 使用 K_A 解密得到K,并验证R_A与之前发给Bob的是否相同。然后将TTP发来的E_B(A,K)转发给Bob,并相应挑战R_B
  6. 确认: Bob 收到密文后,用他的K_B解密得到 K,然后用 K 解密得到R_B,并验证是否与自己生成的R_B相同
  7. 完成: 现在 Alice 和 Bob 拥有相同的会话密钥 K

(3)Kerberos协议(单钥)

        Kerberos协议引入了时间戳和有效期,实现了抗重放攻击。Kerberos协议非常常见,是重点理解对象。

步骤:

  1. 初始化: Alice 和 Bob 分别与 TTP 交换密钥K_A,K_B
  2. 请求密钥: Alice向TTP发送会话请求,包括会话双方的身份标识A,B
  3. 响应: TTP分别用双方实现共享给TTP的密钥生成两份密文,密文中包含会话密钥K和身份标识,和时间戳与有效期,把两份密文都发送给Alice
  4. 转发: Alice解密第一份消息得到K,然后向Bob发送用K加密附带时间戳的自己的身份A,第二份密文直接转发给Bob
  5. 确认:Bob对第二份收到的消息解密,得到会话密钥K和时间戳,然后Bob将时间戳加一,采用K加密后发给Alice
  6. 确认:Alice对收到的消息用K解密出运算后的时间戳,验证其正确性。

(4)EKE协议(单钥+双钥)


http://www.ppmy.cn/devtools/92045.html

相关文章

深度学习--长短期记忆网络

1.引入 RNN 可以将以前的信息与当前的信息进行连接。例如,在视频中,可以用前面的帧来 帮助理解当前帧的内容;在文本中,可以用前面半句话的内容来预测后面的内容。但是, RNN 存在一个记忆消失的问题。例如,…

算法面试合集:DDPM、DDIM、Transformer、WideDeep......

本人今年(2023年)参加了很多面试,也有幸拿到了一些大厂的开发和算法offer,整理了众多面试资料,后续还会分享众多面试资料。 整理成了面试系列,由于时间有限,每天整理一点,后续会陆续…

分布式锁选型 Redis vs Zookeeper

分布式锁作为分布式环境下并发控制利器,使用场景广泛。分布式锁通常可利用中间件Redis或Zookeeper来实现, 例如针对Java语言Redis有Redisson组件, Zk有Curator组件。 Redis是一款内存数据库,通常可用来做缓存,由于其执…

【漏洞复现】常见框架漏洞复现 合集

Web框架(Web framework)或者叫做Web应用框架(Web application framework),是用于进行Web开发的一套软件架构。大多数的Web框架提供了一套开发和部署网站的方式。为Web的行为提供了一套支持支持的方法。使用Web框架,很多的业务逻辑外的功能不需要自己再去…

electron调用c++ dll lib

主要的工具包 node-addon-apinode-gyp 主要的配置 {"variables": {# module_mac: "./../sdk/mac",},"targets": [{"target_name": "native_module","defines": ["NAPI_DISABLE_CPP_EXCEPTIONS"],&qu…

pygame小游戏

代码存在一些bug,感兴趣可自行修改,游戏运行后玩法与吃金币游戏类似。(代码及结果比较粗糙,仅供参考) 注:(图片、音乐、音效文件老是上传上传不上,想要可私,也可以自己找…

docker安装redis单机部署的redis.conf配置

下面是一个简单的 Redis 配置文件 (redis.conf) 示例,它适合docker单机部署环境,并且启用了密码保护。这个配置文件包含了最基本的设置,您可以根据需要进行扩展。 # 服务器监听的地址 bind 0.0.0.0# 服务器监听的端口 port 6379# 设置密码 r…

【mars3d】LayerType 的arcgis_feature类型的图层配置聚合属性,达到聚合效果

相关api文档: Global - V3.7.23 - Mars3D API文档 Global - V3.7.23 - Mars3D API文档 ArcGisWfsLayer - V3.7.23 - Mars3D API文档 实现代码: export function onMounted(mapInstance) {map mapInstance // 记录首次创建的map// 添加参考三维模型co…