当前位置: 首页 > news >正文

IKE工作过程

1. IKE概述

互联网密钥交换Internet Key Exchange,简称IKE)用动态建立SA
IKE属于一种混合型协议,建立在由ISAKMP定义的一个框架之上RFC2408),实现了两种密钥管理协议的一部分—OakleySKEME,还定义了自己的两种密钥交换方式。
SKEME提供为认证目的使用公开密钥加密的机制。(定义一种密钥交换方式DH
Oakley提供在两个IPSEC对等体间达成相同加密密钥的基本模式的机制。(对多模式的支持,例如对新的加密技术。并没有具体的定义交换什么样的信息)
ISAKMP:定义了消息交换的体系结构,包括两个IPSEC对等体间分组形式和状态转变(定义封装格式和协商包交换的方式)

2. ISAKMP协议

       ISAKMPInternet Security Association Key Management ProtocolInternet安全联盟密钥管理协议,RFC2408
定义了协商、建立、修改和删除SA的过程和包格式
ISAKMP只是为协商、修改、删除SA的方法提供了一个通用的框架,并没有定义具体的SA格式。这个通用的框架是与密钥交换独立的,可以被不同的密钥交换协议使用。
ISAKMP报文可以利用UDP,端口都是500(cisco),一般情况下常用UDP协议。IKE使用ISAKMP消息来协商并建立SA

3. IPSec协议工作原理

       密钥管理IKE任务是在IPsec VPN协商过程中进行的。
IPSec协商建立分为两个阶段:管理连接的建立和数据连接的建立。
(1)阶段一(管理连接的建立)的任务/步骤:
目的:生成1个双向的ISAKMP SA用来保护阶段二。
        ①安全参数协商(加密算法、HASH算法、DH组、身份认证、生命周期)并建立“初始化”SA;
        ②DH算法(交换公钥、随机数)计算出Key DH、生成许多密钥;
        ③对等体/设备身份认证(Pre-shared、rsa-sig证书、加密随机数)。
(2)阶段二(数据连接的建立)的任务/步骤:
目的:生成2个单向的IPSec SA用来保护数据。
        ①协商安全参数(安全协议ESP或AH,工作模式、加密算法、HASH算法、生命周期)并建立“初始化”SA;
        ②为数据传输生成密钥;
        ③对等体/设备身份认证(Pre-shared、rsa-sig证书、加密随机数)。
ISAKMP SA和IPSec SA的区别是:
对比维度ISAKMP SAIPSec SA
定义与作用IKE 第一阶段建立,双向安全通道,为后续 IPSec SA 协商提供安全环境IKE 第二阶段建立,单向数据保护规则,定义 IP 数据加密、认证的具体方式
建立阶段IKE 协商第一阶段,先于 IPSec SA 建立IKE 协商第二阶段,依赖 ISAKMP SA 已建立的安全通道
安全参数侧重保障 IKE 控制消息安全,含加密 / 认证算法(如 AES、HMAC - SHA1 )、DH 组、身份认证方式(预共享密钥 / 证书)保护实际 IP 数据,含协议(AH/ESP )、工作模式(隧道 / 传输)、加密 / 认证算法(如 AES - 256、HMAC - SHA256 )、密钥周期等
生命周期管理独立生命周期(时间 / 流量触发),过期后需重新走 IKE 第一阶段协商独立生命周期(时间 / 流量触发),过期后需重新走 IKE 第二阶段协商重建
数据保护范围仅保护IKE 协商的控制消息,确保协商过程安全可信直接保护实际传输的 IP 数据包,实现数据加密、认证、抗重放等
方向特性双向(单条 SA 覆盖双端通信)单向(入站、出站需分别建立 SA )
两个IPSec实体之间的IKE协商分为两个阶段:
       第一阶段:建立ISAKMP SA(也可称为IKE SA
       • 两种模式:
              主模式(main mode):6ISAKMP消息交互
              野蛮模式(aggressive mode):3ISAKMP消息交
       ISAKMP SA是为第二阶段的ISKMP消息提供安全保护
       第二阶段:建立IPSec SA
       • 一种模式:
             快速模式(quick mode:3ISAKMP消息交互
       IPSec SA是为IP数据提供安全保护,即前面概念中介绍的SA

ISAKMP SA(阶段一相同)可以用来保护多个第二阶段IPSec SA协商的通信过程。

ISAKMP SA 保护多个第二阶段 IPSec SA 协商的核心条件可总结为:

  1. 基础安全机制有效:第一阶段成功完成身份认证(预共享密钥 / 证书等方式匹配),且通过 DH 算法生成有效共享密钥,确保双方身份可信、密钥基础一致。
  2. 安全参数兼容稳定:ISAKMP SA 协商的加密 / 认证算法、DH 组等参数在多个 IPSec SA 协商期间保持一致且适用,生存周期设置合理以覆盖多次协商。
  3. 通信与策略适配:设备配置稳定(不修改核心安全参数)、网络链路通畅,且安全策略允许并支持基于同一 ISAKMP SA 进行多 IPSec SA 协商,设备具备相应管理能力。

3.1 ISAKMP报文格式

ISAKMP消息报头:

1、发起方CookieInitiator Cookie):64 bit

Cookie可以帮助通信双方确认一个ISAKMP报文是否真的来自对方。
在发起方,如果收到的某报文的应答方Cookie字段和以前收到的该字段不同,则丢弃该报文;同样,在应答方,如果收到的某报文的发起方Cookie和以前收到的该字段不同,则丢弃该报文。这种机制可以防止DOS攻击
尽管Cookie的生成方法在实现不同的ISAKMP时可能不同,但无论发起方还是响应方,Cookie必须满足两个条件:
      • Cookie必须是用各自的机密信息生成的,该机密信息不能从Cookie中推导出来;
      • 对于一个SA,其Cookie是惟一的,也就是说对于一次SA协商过程,Cookie不能改变。
常用的一个生成Cookie的方法是对下述信息进行HASHMD5SHA1或其他HASH算法)之后,取结果的前64位:
      • IP地址+目的IP地址+UDP源端口+UDP目的端口+随机数+当前日期+当前时间
      • 散列算法不可逆

2、应答方CookieInitiator Cookie):64 bit

应答方的Cookie,紧跟在发起方Cookie之后

3、下一个载荷(Next Payload):4 bit

表示紧跟在ISAKMP头部之后的第一个载荷的类型值
ISAKMP双方交换的内容称为载荷(payload)。对于一个用基于ISAKMP的密钥管理协议交换的消息来说,其构建方法是:将ISAKMP所有载荷链接到一个ISAKMP报头头。
目前定义了13种载荷,它们都是以相同格式的头开始的。
不论何种载荷,都有一个相同格式的载荷头部
     • 1)下一个载荷(Next Payload):8 bit
                 – 表示紧跟在本载荷后面的下一个载荷的类型。
                 – 第一个载荷的类型在ISAKMP头部中指明,最后一个载荷的Next Payload类型为0
     • 2) 保留(reserved):8 bit,全0
     • 3) 载荷长度(Payload Length):16 bit
以字节为单位表示的载荷长度(包括载荷头部),定义了每个载荷的边界

4、版本号:8 bit

主版本(Major Version):4 bit
    • 表示ISAKMP协议的主版本号
次版本(Minor Version):4 bit
    • 表示ISAKMP协议的次版本号

5、交换类型(Exchange Type):4 bit

表示该报文所属的交换类型。通常标识为主模式(main mode或野蛮模式(aggressive mode

6、标志(Flags):4 bit

目前只有后3位有用,其余保留,用0填充。后3位的含义从最后一位往前依次为
      • 加密位(encryption),0x01。加密位如果是1,表示ISAKMP头部后面的所有载荷都被加密了;如果是0,表示载荷是明文,没有加密。
      • 提交位(commit),0x02。用于确保在发送被保护的数据之前完成SA协商。
      • 纯验证位(Authentication Only),0x04。主要由哪些希望为ISAKMP引入密钥恢复机制的人使用。

7、报文IDMessage ID):32 bit

IKE第一阶段该值为全0
IKE第二阶段是由发起方生成的随机值,这个惟一的报文标识可以
惟一确定第二阶段的协议状态。

8、报文长度(length):32

以字节为单位表示了ISAKMP整个报文(头部 +若干载荷)的总长度。

一个完整的ISAKMP报文结构:

3.2 IPSec协议工作过程

情况一(主模式+快速模式):

阶段一(主模式):

·目的:ISAKMP SA/IKE SA

1、协商加密套件(加密算法、HSAH算法、DH组、身份认证方式、生命周期)

① 发起方I -> 应答方R:I的Cookie,支持所有加密套件(加密算法、HASH算法、DH组、身份认证方式、生命周期)

② 发起方I <- 应答方R:I和R的Cookie,选出一套加密套件(选序号最小的策略)

2、交换密钥计算材料,生成密钥

① 发起方I -> 应答方R:I和R的Cookie,DH算法交换公钥I、随机数I

② 发起方I <- 应答方R:I和R的Cookie,DH算法交换公钥R、随机数R

·交换完材料后计算密钥:

① 首先发起方I和应答方R都配置了相同的pre-share key(预共享密钥)

② K(DH)(DH密钥):

     发起方:用公钥R和私钥I通过DH算法计算K(DH);

     应答方:用公钥I和私钥R通过DH算法计算K(DH)

注意:只要双方的DH组是相同的,DH算法算出来的Key(DH)就相同。

③ SkeyID(身份认证密钥):

       用pre-share-key、随机数I、随机数R通过PRF算法计算SkeyID;

       用SkeyID、Key DH、I和R的Cookie、0(常数)通过PRF算法计算SkeyID-d【SkeyID-d密钥仅仅做加密密钥、完整性密钥的材料使用】

④ SkeyID-a(完整性校验密钥):

       用SkeyID、SkeyID-d、K(DH)、I和R的Cookie、1(常数,且与上面的常数不相同)通过PRF算法计算SkeyID

⑤ SkeyID-e(数据加解密密钥):

       用SkeyID、SkeyID-a、K(DH)、I和R的Cookie、2(常数,且与上面的常数不相同)通过PRF算法计算SkeyID

3、身份认证(这两个报文都是加密的)

① 发起方I -> 应答方R:SkeyID-a完整性校验{ SkeyID-e加密(HASH(I)和I的身份ID)}

② 发起方I <- 应答方R:SkeyID-a完整性校验{ SkeyID-e加密(HASH(R)和R的身份ID)}

阶段二(快速模式):

目的:IPSec SA

1、安全参数(保护的协议AH/ESP,工作模式传输/隧道,加密算法、校验算法,生命周期)
发起方I -> 应答方R:
{ I和R的Cookie,[ 安全参数(保护的协议AH/ESP,工作模式传输/隧道,加密算法、校验算法,生命周期),DH公钥I,随机数I,I的身份ID ]SkeyID-e }SkeyID-a

2、交换密钥计算材料,生成密钥
发起方I <- 应答方R:
{ I和R的Cookie,[ 确认安全参数(保护的协议AH/ESP,工作模式传输/隧道,加密算法、校验算法,生命周期),DH公钥R,随机数R,R的身份ID,R的身份认证HASH载荷 ]SkeyID-e }SkeyID-a

3、身份认证

发起方I -> 应答方R{ I和R的Cookie,[ I的身份认证HASH载荷 ]SkeyID-e }SkeyID-a


情况二(野蛮模式+快速模式):

阶段一(野蛮模式):

目的:ISAKMP SA/IKE SA

1、加密套件(加密算法、HSAH算法、DH组、身份认证方式、生命周期)

发起方I -> 应答方R:I的Cookie,加密套件(加密算法、HASH算法、DH组、身份认证方式、生命周期),DH公钥I,随机数I,I的身份ID

2、交换密钥计算材料,生成密钥

发起方I <- 应答方R:I和R的Cookie,确认加密套件(加密算法、HASH算法、DH组、身份认证方式、生命周期),DH公钥R,随机数R,R的身份ID,R的身份认证HASH载荷

3、身份认证

发起方I -> 应答方R:{ I和R的Cookie,[ I的身份认证HASH载荷 ]SkeyID-e }SkeyID-a

阶段二(快速模式):

目的:IPSec SA

1、安全参数(保护的协议AH/ESP,工作模式传输/隧道,加密算法、校验算法,生命周期)
发起方I -> 应答方R:{ I和R的Cookie,[ 安全参数(保护的协议AH/ESP,工作模式传输/隧道,加密算法、校验算法,生命周期),DH公钥I,随机数I,I的身份ID ]SkeyID-e }SkeyID-a

2、交换密钥计算材料,生成密钥
发起方I <- 应答方R:{ I和R的Cookie,[ 确认安全参数(保护的协议AH/ESP,工作模式传输/隧道,加密算法、校验算法,生命周期),DH公钥R,随机数R,R的身份ID,R的身份认证HASH载荷 ]SkeyID-e }SkeyID-a

3、身份认证

发起方I -> 应答方R:{ I和R的Cookie,[ I的身份认证HASH载荷 ]SkeyID-e }SkeyID-a

http://www.dtcms.com/a/342826.html

相关文章:

  • 树表转换成有层次的List列表(无限层级)
  • 北京-15k测试-入职甲方金融-上班第二天
  • Python面向对象高级编程——多重继承
  • (LeetCode 面试经典 150 题) 129. 求根节点到叶节点数字之和 (深度优先搜索dfs)
  • 麒麟系统播放图片 速度比较
  • 【Python代码】谷歌专利CSV处理函数
  • 【双极性ocl放大电路原理图】2022-11-11
  • 计算机网络:网络基础、TCP编程
  • Seaborn数据可视化实战:Seaborn基础与实践-数据可视化的艺术
  • 数据安全管理——解读银行保险机构数据安全管理办法【附全文阅读】
  • 哈希:最长连续序列
  • 如何根据团队技术能力选择最适合的PHP框架?
  • Python 标准库--python012
  • 机器学习集成算法与K-means聚类
  • Spring两个核心IoCDI(二)
  • 【信创系统】信创系统传输文件
  • 科普:Python 中颜色的格式: RGB 格式 v.s. RGBA 格式
  • Terraform vs Ansible:基础设施即代码(IaC)工具深度对比与实战指南
  • 哈尔滨服务器托管,如何实现高效稳定运行?
  • 泛型与反射
  • MySQL--MVCC
  • MPS MPQ2013AGQ-AEC1-Z MPS芯源汽车级 同步降压转换器IC 电源传感器IC
  • 【密码学】深入浅出栅栏密码:原理、流程与实现
  • Android:compose-Scaffold组件
  • 【CS创世SD NAND征文】存储芯片在工业电表中的应用与技术演进
  • 基于Python与Tkinter开发的微博多功能自动化助手
  • 构建包含IK插件(中文分词插件)的Elasticsearch镜像
  • 分治思想在系统分流削峰中的实践与Golang前沿实现
  • RK3568项目(十六)--linux驱动开发之块设备介绍
  • C++ 序列式容器深度解析:vector、string、deque 与 list