在IKEv2的头两个消息中,通信双方会协商一系列的安全参数。包括,一个加密算法,一个完整性算法,一个DH Group,以及一个PRF伪随机数算法。其中,PRF算法被通信双方用来生成即将被用到的各种密钥。

在讨论密钥生成之前,先了解下IKEv2通信需要哪些密钥。首先,加解密需要一对密钥,称之为SK_ei和SK_er;然后,完整性算法需要一对密钥,称之为SK_ai和SK_ar;第三,在生成AUTH payload时也需要一对密钥,称之为SK_pi和SK_pr;最后,为了给Child SA生成加密材料,也需要一个密钥,称之为SK_d。

这些密钥,有的是固定长度,比如DES算法的密钥长度固定是56比特,而有些算法,比如AES算法,其密钥程度可能是128比特,也可能是192或者256比特。那么在协商时,双方需要通过一个额外的属性来协商出密钥长度。当协商结束完成之后,双方应该在算法和密钥长度方面都达成了一致。而SK_d,SK_Pi和SK_pr的长度则是PRF算法所需要的密钥长度,因为它们最终被用作PRF算法的密钥。

密钥的计算过程如下:

Pfr+ (K, S) = T1 | T2 | T3 | T4 …

其中:

T1 = prf (K, S | 0x01)

T2 = prf (K, T1 | S | 0x02)

T3 = prf (K, T2 | S | 0x03)

T4 = prf (K, T3 | S | 0x04)

如何理解以上过程呢?

以T1 = prf (K, S | 0x01)为例,K和S | 0x01为这个prf算法的输入,T1是它的计算结果。分隔符‘|’表示连接的意思,比如S的值是”0x08 0x07 0x06 0x05”,那么 S | 0x01的结果是” 0x080x07 0x06 0x05 0x01”。

T2,T3和T4的计算则是一个迭代的过程,将上一次的计算结果作为这一次的输入的一部分。最后Prf+则是将多次的计算结果连接起来,形成最终的结果。迭代结束的条件是,T1 | T2 | … | Tn 的长度超过所有需要的7个密钥长度之和。

了解了密钥的计算过程,那么一下的IKEv2密钥生成就很好理解了:

SKEYSEED = prf (Ni | Nr, g^ir)

{ SK_d | SK_ai | SK_ar | SK_ei | SK_er |SK_pi | SK_pr } = prf+ (SKEYSEED, Ni | Nr | SPIi | SPIr)

T1 = prf (K, S | 0x01)

T2 = prf (K, T1 | S | 0x02)

T3 = prf (K, T2 | S | 0x03)

T4 = prf (K, T3 | S | 0x04)

1、首先使用双方交互的随机数Ni,Nr以及DH算法中公开的部分gir生成基准密钥(种子密钥)

2、我们将种子密钥以及随机数Ni,Nr和双方的SPI放入伪随机函数中进行计算,在上面的公式中,K就是种子密钥,Tx就是上一轮计算的结果,S就是Ni,Nr和SPI,每一轮都有一次的计算结果,我们取第一次计算结果SK_d,第二个为SK_ai,然后分别为SK_ar,SK_ei,SK_er,SK_pr,SK_pr。

其中SK_d用于后续的IPsec的密钥产生

SK_ai和SK_ar用于后续IPsecSA协商时数据的完整性校验

SK_ei和SK_er用于后续IPsecSA协商时数据的加密

SK_pi和SK_pr用于后续IPsecSA协商时数据的来源性确认

和IKEv1不同的地方

IKEv1中总共是生成三个密钥用于协商双方的数据交互,但是在IKEv2中而是使用7个密钥,其中加密,完整性校验,数据来源校验都使用了一对密钥而不是仅仅使用一个密钥。

IKEv1下产生的密钥以及相关的用途

IKEv2下产生的密钥以及相关的用途

  IKE SA; SK_ai and SK_ar used as a key to the integrity protection algorithm for authenticating the component messages of subsequent exchanges;
(翻译:Sk_ai和Sk_ar主要用于后续数据交换时完整性算法时使用的密钥)
  SK_ei and SK_er used for encrypting (and of course decrypting) all subsequent exchanges;
(翻译:SK_ei和SK_er主要用于后续数据交换中的加密)
  and SK_pi and SK_pr, which are used when generating an AUTH payload. 
(翻译:SK_pi和SK_pr主要用于产生验证载荷,其实就是验证数据来源的作用)
The lengths of SK_d, SK_pi, and SK_pr MUST be the preferred key length of the PRF agreed upon. (翻译:SK_d,SK_pi,SK_pr的密钥长度一定要符合协商好的伪随机函数的长度)

IKEv2的密钥计算方式相关推荐

  1. python损失函数实现_pytorch 实现cross entropy损失函数计算方式

    均方损失函数: 这里 loss, x, y 的维度是一样的,可以是向量或者矩阵,i 是下标. 很多的 loss 函数都有 size_average 和 reduce 两个布尔类型的参数.因为一般损失函 ...

  2. 模型评估指标micro avg、macro avg和weighted avg的计算方式及区别

    模型评估指标micro avg.macro avg和weighted avg的计算方式及区别-技术圈

  3. Java基础-时间复杂度计算方式

    Java基础-时间复杂度计算方式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   时间复杂度通常是衡量算法的优劣的,衡量算法的时间严格来讲是很难衡量的,由于不同的机器性能不用环境 ...

  4. java时间格式转换_Java中System.currentTimeMillis()计算方式与时间的单位转换

    学会与时间赛跑才能赢得时间的尊重,把握好每一天,趁年轻! java中获取系统当前时间相信大家都会,这是经常用到的也是非常简单的,但还是要经常回顾下一些小细节哦! 一.时间的单位转换 1秒=1000毫秒 ...

  5. Smooth_L1_Loss函数的计算方式

    Smooth_L1_Loss函数的计算方式 从今天开始,阅读faster rcnn的相关代码,并记录我对faster rcnn中特别的层的理解.本篇主要是对smooth_L1_Loss层进行解读.  ...

  6. 火币网的macd怎么算的_黄金投资中MACD的计算方式

    俗语有云:一子错,满盘皆落索.这句话在黄金投资中得到现实意义的最大化.黄金投资风险时刻存在,每一个小细节都可能导致亏损.所以我们不可以忽略一些小知识.大田环球贵金属将会大家介绍一些关于平滑异同移动平均 ...

  7. python模型预测_python:目标检测模型预测准确度计算方式(基于IoU)

    训练完目标检测模型之后,需要评价其性能,在不同的阈值下的准确度是多少,有没有漏检,在这里基于IoU(Intersection over Union)来计算. 希望能提供一些思路,如果觉得有用欢迎赞我表 ...

  8. 搭建卷积神经网络时loss计算方式的选择

    最近在利用卷积神经网络跑模型的时候,总会出现一些奇奇怪怪的问题,而其中出现次数最多的就是loss值计算方式选择错误问题.在tensorflow中封装的loss值的计算方式有三种:BinaryCross ...

  9. [css] absolute的containing block(容器块)计算方式和正常流有什么区别?

    [css] absolute的containing block(容器块)计算方式和正常流有什么区别? absolute会先向上找到第一个position不为static或者fixed的祖先元素,然后根 ...

  10. java 日期 年数_java 日期加减天数、月数、年数的计算方式

    因为某个项目需要统计 近1周.近1个月.近6个月 等数据,所以在时间的加减上面想了很多方式,最后决定用java.util.Calendar java.util.Calendar ,提供了计算时间的方式 ...

最新文章

  1. 安装 ssh 的公开密匙到 iPhone 上
  2. php 负载监控_PHP监控linux服务器负载
  3. Linux 内核同步(二):自旋锁(Spinlock)
  4. 自定义权限 android,Android权限控制之自定义权限
  5. 电脑睡眠快捷键_电脑快速进入睡眠的快捷键是什么?
  6. 解决JPA的枚举局限性
  7. 数据建模-聚类分析-K-Means算法 --聚类可视化工具TSNE
  8. 关于C#关闭窗体后,依旧有后台进程在运行的解决方法
  9. ST25读FeliCa卡记录
  10. novatel中DGPS和RTK以及ppp的terrraStar-x的记录
  11. MapReduce:Combiner与Shuffle阶段之Reducer输入
  12. dogcs2.1 粗略预防CVE-2022-39197 XSS to RCE探究
  13. Golang 多版本管理
  14. docker pull报错:Timeout exceeded while awaiting headers解决思路
  15. win10自动修复重启失败,无法进入桌面,解决办法
  16. 深入理解Apache虚拟主机
  17. 英飞凌基础学习笔记(GTM)Generic Timer Module
  18. 【产品设计】浅析产品新手引导设计
  19. 关于学术期刊,你应该知道这些
  20. 计算机毕业设计asp.net的高校科研项目管理系统(源码+系统+mysql数据库+Lw文档)

热门文章

  1. C语言知识层次结构图
  2. “眼界大开 声临其境”网易首届音视频技术大会圆满落幕
  3. 不用命令行WinRAR解压7z.001格式的文件
  4. mac os sierra卸载java_如何删除Install macOS High Sierra.app
  5. 迅捷路由器设置找不到服务器,迅捷(fast)路由器怎么设置?
  6. php 时分秒选择联动,jquery.datepair日期时分秒选择器
  7. mysql 1138_mysql ERROR 1138: Invalid use of NULL value
  8. Vmware_jjbLite_jb51不是有效的短文件名
  9. 适合所有手环的app_Redmi Watch体验:手环终结者?
  10. pmp考试【5】emv期望货币价值计算