现代密码学-认证协议

2024-06-07 13:28
文章标签 认证 协议 现代 密码学

本文主要是介绍现代密码学-认证协议,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

A.B两个用户想通过网络先建立安全的共享密钥再进行保密通信?A(B)如何确信自己正在和B(A)通信而不是C?这种通信方式为双向通信,此时的认证为相互认证。

相互认证

A/B两个用户在建立共享密钥时需要考虑的核心问题:保密性和实时性;

保密性:防止会话密钥伪造或泄露,会话密钥组哎通信双方之间交换时应该以密文的形式--所以通信双方事先应该有密钥或公钥。

实时性:防止消息的重放攻击。常用两种方法:时间戳(要求各方的时钟同步,每次收到的消息里都包含一个时间戳,接收方需要用该时间戳和自己本地的时间作比较;该方法不能用于面向连接的应用过程)和询问-应答(发送者发一个一次性随机数询问,接收者回应正确的一次性随机数;该方法不适合于无连接场景)。

单钥加密体制

单密钥体制需要有一个可信的密钥分配中心KDC,每个用户与KDC都有一个共享的密钥--主密钥K_A,K_B。KDC为通信双方建立一个短期的会话密钥,用主密钥加密会话密钥后分配给用户。

  1. A向KDC发起向B通信的请求:A\rightarrow KDC:ID_{A}||ID_{B}||N_1
  2. A从KDC处获得会话密钥K_sKDC\rightarrow A:E_{K_A}[K_s||ID_B||N_1||E_{K_B}[K_s||ID_A]]
  3. A将KDC发来的消息用自己的密钥解密,获得会话密钥K_s和要发给B的密文信息E_{K_B}[K_s||ID_A]发给B:A\rightarrow B:E_{K_B}[K_s||ID_A]
  4. B用自己的密钥解密获得会话密钥 ,B生成一次性随机数并用会话密钥加密发给A:B\rightarrow A:E_{K_s}[N_2]
  5. A收到消息用会话密钥解密获得B发的随机数,并应答B的消息:A\rightarrow B:E_{K_s}[f(N_2)]

第4,5步用于防止重放攻击。攻击者可以截获第3步消息进行重放攻击,如果没有第4,5步,B无法检测出自己得到的会话密钥式重放的旧的密钥。

攻击者在截获第3部消息后,可进一步截获第4步B发出的询问,然后假冒A做出第5步回答。对于这一攻击场景,可以在第2,3步加上时间戳。

  1. A\rightarrow KDC:ID_{A}||ID_{B}
  2. KDC\rightarrow A:E_{K_A}[K_s||ID_B||T||E_{K_B}[K_s||ID_A||T]]
  3. A\rightarrow B:E_{K_B}[K_s||ID_A||T]
  4. B\rightarrow A:E_{K_s}[N_1]
  5. A\rightarrow B:E_{K_s}[f(N_1)]

时间戳用于保证会话密钥的时效性。|Clock-T|< \Delta t_1+\Delta t_2,Clock为本地时钟。t1为本地时钟与KDC时钟差,t2为网络时延。

上面的改进还存在问题:等待重放攻击:利用时钟同步差异进行攻击,若发送方时钟超前,攻击者截获发送方消息并等待消息时间戳接近接收方时间再重发该消息。---应对方法:网络各方以KDC时钟为基准定期检测调整;还可增加使用一次性随机数握手协议

A\rightarrow B:ID_A||N_A

B\rightarrow KDC:ID_B || N_B||E_{K_B}[ID_A||N_A||T_B]

KDC\rightarrow A:E_{K_A}[ID_B || N_A||K_s||T_B]||E_{K_B}[ID_A||K_s||T_B]||N_B

A\rightarrow B:E_{K_B}[ID_A||K_s||T_B]||E_{K_s}[N_B]

 


公钥加密体制

认证服务器AS密钥对SK_{AS},PK_{AS},A的密钥对SK_A,PK_A,B的密钥对SK_B,PK_B

  1. A将自己的身份和想通信的对象身份一起发给AS:A\rightarrow AS:ID_A ||ID_B
  2. AS发给A两个链接的数据项都利用AS的私钥加密(AS签名),分别作为分发给双方的公钥证书AS\rightarrow A:E_{SK_{AS}}[ID_A||PK_{A}||T]||E_{SK_{AS}}[ID_B||PK_B||T]
  3. A选取会话密钥并经自己的密钥和B的公钥加密后连同两个证书一起发给BA\rightarrow B:E_{SK_{AS}}[ID_A||PK_{A}||T]||E_{SK_{AS}}[ID_B||PK_B||T]||E_{PK_B}[E_{SK_{A}}[K_s]||T]

时间戳T用于防止重放 攻击,需要各方时间同步。

也可使用一次性随机数,不要要同步时钟。

 KDC密钥对SK_{KDC},PK_{KDC}

  1. A\rightarrow KDC:ID_A||ID_B
  2. KDC\rightarrow A:E_{SK_{KDC}}[ID_B||PK_B]
  3. A\rightarrow B:E_{PK_B}[N_A||ID_A]
  4. B\rightarrow KDC:ID_B||ID_A||E_{PK_{KDC}}[N_A]
  5. KDC\rightarrow B:E_{SK_{KDC}}[ID_A||PK_A]||E_{PK_B}[{E_{SK_{KDC}}[N_A||K_s||ID_B]}]
  6. B\rightarrow A:E_{PK_A}[E_{SK_{KDC}}[N_A||K_s||ID_B]||N_B]
  7. A\rightarrow B:E_{K_s}[N_B]

这篇关于现代密码学-认证协议的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1039307

相关文章

springboot security使用jwt认证方式

《springbootsecurity使用jwt认证方式》:本文主要介绍springbootsecurity使用jwt认证方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录前言代码示例依赖定义mapper定义用户信息的实体beansecurity相关的类提供登录接口测试提供一

SpringSecurity 认证、注销、权限控制功能(注销、记住密码、自定义登入页)

《SpringSecurity认证、注销、权限控制功能(注销、记住密码、自定义登入页)》SpringSecurity是一个强大的Java框架,用于保护应用程序的安全性,它提供了一套全面的安全解决方案... 目录简介认识Spring Security“认证”(Authentication)“授权” (Auth

一文详解kafka开启kerberos认证的完整步骤

《一文详解kafka开启kerberos认证的完整步骤》这篇文章主要为大家详细介绍了kafka开启kerberos认证的完整步骤,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、kerberos安装部署二、准备机器三、Kerberos Server 安装1、配置krb5.con

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

java如何通过Kerberos认证方式连接hive

《java如何通过Kerberos认证方式连接hive》该文主要介绍了如何在数据源管理功能中适配不同数据源(如MySQL、PostgreSQL和Hive),特别是如何在SpringBoot3框架下通过... 目录Java实现Kerberos认证主要方法依赖示例续期连接hive遇到的问题分析解决方式扩展思考总

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟