非对称加密AKA协议:安全认证与密钥交换

AKA协议

AKA协议,即认证的密钥协商协议(Authenticated key Agreement,AKA),使用一个协议完成身份认证与密钥分发

身份认证

通俗地说就是,A要求B证明自己的身份,B提供证明信息给A,A再去核验这个证明信息与B的真实身份是否相符

正式地说:一方实体向另一方实体提供证据证明自己的身份,另一方通过相应的机制来验证证据,以确定该实体是否与证据所宣称的身份一致

密钥分发

即如何安全地把密钥分发到目标手中

  • 对称密钥分发:机密性和真实性;这个很好理解,如果对称密钥泄露了,那么通信内容将被解密,机密性被破坏;同时,如果密钥被攻击者篡改,通信内容看似是被加密的,实则攻击者可以直接进行解密,机密性和安全性都被破坏
  • 公钥分发:真实性;公钥可以被所有人看到,需要防止公钥被伪造;如果攻击者的公钥被当做真实的公钥,那么用公钥加密的通信内容就可以被攻击者使用其私钥解密

挑战与应答

应用场景:好比你正在线上交易,对方声称自己是官方工作人员,让你告诉他你自己的密码,你会直接相信他的身份并告诉他吗?

面对这种不能直接传输密码口令等敏感信息的情况下,证明自己拥有相应的身份标识,这就是挑战与应答要做的事情

前提:双方共有一些知识

流程可分为3步:挑战、响应、验证

  • 挑战:即要求对方证明自己拥有相应的身份标识;验证方B向待认证方A发送一个挑战(可以是随机的一次性字符串/随机数等)
  • 响应:对方提供证明材料给自己;即待认证方A回送一个对挑战的响应
  • 验证:去验证对方提供的证明材料的真伪;即验证方B检查此响应,验证待认证方A的身份

如何区分待认证方和验证方?

  • 谁应答谁就是待认证方

根据加密算法类型,可分为基于对称加密和和基于非对称加密的认证,根据认证的模式,又可分为单向认证和双向认证

单向认证

我们前面提到的场景其实都是单向认证,比如客户验证工作人员的身份,而工作人员则不关系客户是否是真的客户

双向认证

顾名思义,就是通信双方互相验证对方的身份,并交换对话密钥

这里有两个要点:机密性和及时性

如何去理解呢?

机密性:交换会话密钥和身份敏感信息时,肯定要是以密文的的形式进行传输的(不然费老大劲生成的密钥用明文传输就白瞎了)

及时性:这个主要是为了抵抗重放攻击

上面提到的密文形式传输身份敏感信息与会话密钥,那么这个密文是用什么加密?

所以双向认证的前提是双方预先存有对称密钥或者拥有对方的公钥

基于非对称加密的AKA协议

基于非对称加密的单向认证

前提:验证方已安全获取待认证方的公钥

认证可以分为两种:基于公钥和私钥

  • 基于公钥:挑战是用待认证方的公钥加密的

验证方B事先已经获得了待认证方A的公钥PU_A

  1. 待认证方A首先向B表明自己的身份
  2. 验证方B向待认证方A发起挑战,使用A的公钥PU_A加密挑战R,并发送给A
  3. 待认证方A接收到E(PU_A,R)后,使用自己的私钥PR_A解密后,将得到的原文R'发给验证者B
  4. 验证者B去验证R'==R是否成立,若成立,则可以证明A的身份
  • 基于私钥:应答用待认证方的私钥加密
  1. 待认证方A首先向B表明自己的身份
  2. 验证方B向待认证方A发送挑战R
  3. A收到挑战R后,使用自己的私钥PR_A加密挑战R并发送给B
  4. B收到E(PR_A,R)后,使用A的公钥PU_A进行解密,得到R',随后验证R'==R,若相等,则完成B对A的身份验证

这样做很简单,并且可以防监听(挑战R是用公钥PU_A加密的),但是不能抵抗中间人攻击

为什么?

假设信道中存在攻击者E

在待认证者A向验证者B表明身份ID_A时,攻击者E拦截ID_A,转而将自己的ID_E发送给B

对于第一种方案,那么B就会发送E(PU_E,R)给攻击者E,这样一来E就可以拿到挑战R,使用A的公钥加密后再发给A

对于第二种方案,更简单,E只负责在第三条消息时,用A的公钥解密消息,随即验证A的身份,并用自己的私钥加密挑战再发回给B

基于非对称加密的双向认证

双方使用握手协议交换密钥,N1、N2是双方产生的随机数

前提:进行认证前,双方都已安全地获取到了对方的公钥

步骤1-2为A验证B的身份,而步骤3-4为B验证A的身份,A分发密钥

  1. A向B发送 使用B的公钥加密的、带有挑战N1以及自己身份信息的密文E(PU_b,[N1||ID_A])
  2. B收到密文后,使用自己的私钥PR_b进行解密,拿到挑战N1,并在本地生成新的挑战N2,将N1||N2使用A的公钥加密发送给A
  3. A收到E(PU_a,N1||N2)后,使用自己的私钥PR_a进行解密,首先去验证B解密的挑战N1是否正确,若正确,则A验证了B的身份;同时A也拿到了B生成的挑战N2,使用B的公钥PU_b加密N2,并发送给B;B收到E(PU_b,N2)后,解密验证N2是否正确,完成对A的身份验证
  4. 随后,A向B发送使用B的公钥PU_b加密的密文,密文为用A的私钥PR_a加密的会话密钥K_s,此时AB双方都已完成身份验证,B可以解密获取会话密钥K_s

验证方 B (Bob) 待认证方 A (Alice) 验证方 B (Bob) 待认证方 A (Alice) 前提:双方已安全获取对方公钥 PU_a, PU_b 第一阶段:双向身份认证 (挑战-应答) 1. 使用 PR_b 解密 2. 提取 N1 和 ID_A 1. 使用 PR_a 解密 2. 验证 N1 是否匹配 3. 若匹配,则 A 信任 B 的身份 1. 使用 PR_b 解密 2. 验证 N2 是否匹配 3. 若匹配,则 B 信任 A 的身份 第二阶段:会话密钥分发 1. 使用 PR_b 解密外层 2. 使用 PU_a 解开内层(验证签名) 3. 获取会话密钥 K_s 认证完成:后续通信使用 K_s 进行对称加密 E(PU_b, [N1 || ID_A]) 1 E(PU_a, [N1 || N2]) 2 E(PU_b, N2) 3 E(PU_b, E(PR_a, K_s)) 4

重放攻击

可分为:

  • 简单重放攻击:攻击者只是复制消息,然后重放给消息接收者

    • 协议场景:无状态的UDP服务支付请求
    • 漏洞出处:验证者的验证逻辑是无状态的,所以它区分不了哪个数据包是已经被处理过的,导致同一个数据包可以无限的重放
  • 记录重放攻击:攻击者在有效的时间窗口内重放一个时间戳给接收者

    • 协议场景:带时间戳的无状态UDP服务支付请求
    • 攻击案例:此攻击针对使用时间戳作为防重放机制的协议;因为要考虑到网络时延等因素,消息的时间戳合法性是用一个时间窗口来衡量的;合法消息的时间戳需要在一个可接受的时间窗口Δt
    • 漏洞所在:当攻击者截获了时间戳为T的消息M(T),若当前时间T_current-T <= Δt,那么重放该消息到目标服务器时,目标服务器会认为这条重放消息合法;时间戳只能保证新鲜度,但是不能保证唯一性
    • 攻击结果:服务器会认为用户发起了一次新的认证请求
  • 截获重放攻击:截获原始消息使之不能到达,只有重放消息可以到达接收者

    • 协议场景:一个设计拙劣的基于TCP的挑战-应答协议
    • 攻击案例:服务器Bob假定:任何能正确完成TCP三次握手并且发来正确认证包的人,就是TCP会话的合法所有者
    • 正常流程:
      1. Alice向Bob发送TCP SYN请求连接
      2. Bob回复SYN-ACK
      3. Alice回复ACK,TCP Established
      4. Alice发送认证包M=E(K,"LOGIN_NAME")
      5. Bob验证M并且授权此TCP会话
    • 攻击流程:攻击者Eve监视者Alice
      • 一旦Alice发送认证包,Eve就拦截这个认证包,同时向Alice发送伪造的RST包中断Alice与Bob之间的TCP连接
      • Eve与Bob完成三次握手,建立新的TCP连接
      • Eve将截获的Alice的认证包重放,则Bob验证Eve通过
    • 脆弱点:TCP的三次握手与应用层认证像是硬凑在一起的,没有进行密码学绑定
  • 无更改的重放攻击(反射攻击):针对对称的协议,发送不同的报文可以使A/B即是验证者也是待认证者,会被充当加密机或者解密机

    • 漏洞成因:由自己和别人发送的挑战无法被区分

    • 攻击案例:一个基于共享密钥的拙劣相互认证协议

    • 攻击流程

      • Alice发起挑战,发送N_A=114514给Bob,但是被攻击者Eve截获
      • Eve并不会把这个消息转发给Bob,而是直接反射回Alice
      • 因为挑战中不附带身份信息,Alice收到N_A=114514后会以为这是Bob向他发起了新的挑战,于是返回E(K,N_A+1)
      • E(K,N_A+1)被Eve截获,Eve再将E(K,N_A+1)发送给Alice,于是Alice认证Eve通过
    • 防御手段:

      • 应答的时候要带上身份信息

    攻击者 Eve (冒充 Bob) 受害者 Alice 攻击者 Eve (冒充 Bob) 受害者 Alice 共享密钥 K 【会话 1】Alice 发起认证请求 Eve 无法计算 E(K, N_A+1) 于是启动反射 【会话 2】Eve 开启新连接 (或反射) Alice 以为这是 "Bob" 发来的新挑战 【回到会话 1】 Alice 收到会话 1 的应答 验证正确! N_A (挑战) 1 N_A (将挑战反射给 Alice) 2 E(K, N_A + 1) (Alice 帮忙算出了答案) 3 E(K, N_A + 1) 4 认证通过:Eve 就是 Bob 5

相关推荐
yi个名字1 小时前
AI 应用的 SRE 视角:延迟、可靠性、成本与安全如何在一套系统里闭环
人工智能·安全
乾元1 小时前
红队 / 蓝队:用 AI 自动生成攻击场景并评估防御效果——从“安全演练”到“可计算的网络对抗系统”
运维·网络·人工智能·网络协议·安全·web安全·架构
xiatianxy1 小时前
有限空间作业安全如何更有保障!
安全·有限空间作业·有限空间监测设备
金士镧(厦门)新材料有限公司2 小时前
稀土阻燃协效剂:让木质地板更安全、更持久
科技·安全·全文检索·生活·能源
llxxyy卢2 小时前
JAVA安全-目录遍历访问控制XSS等安全
前端·安全·xss
G31135422732 小时前
人脸核身:从 “线下跑“ 到 “线上办“ 的安全基石
安全
Ha_To10 小时前
2025.12.22 OSPF多区域原理与配置方法
网络
Smile_25422041812 小时前
vlc的使用
网络·webrtc·实时音视频