IKEv2的密钥生成过程
2012-05-21 18:05
204 查看
在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)
计算过程分成两步:第一步,根据协商的随机数Ni, Nr和DH大数g^ir算出prf+算法的第一个参数SKEYSEED,然后取Ni | Nr | SPIi | SPIr作为第二个参数,用prf算法反复迭代,直到输出的长度超过7个SK的总长度。然后将输出的结果从前往后进行截取,第一个为SK_d,第二个为SK_ai,然后分别为SK_ar,SK_ei,SK_er,SK_pr,SK_pr。
在讨论密钥生成之前,先了解下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)
计算过程分成两步:第一步,根据协商的随机数Ni, Nr和DH大数g^ir算出prf+算法的第一个参数SKEYSEED,然后取Ni | Nr | SPIi | SPIr作为第二个参数,用prf算法反复迭代,直到输出的长度超过7个SK的总长度。然后将输出的结果从前往后进行截取,第一个为SK_d,第二个为SK_ai,然后分别为SK_ar,SK_ei,SK_er,SK_pr,SK_pr。
相关文章推荐
- 公钥与密钥的生成与具体的机器没有关系,生成过程没有使用与具体机器相关的信息
- 为Secure Store Service生成新密钥,解决“生成密钥过程中发现错误”的问题
- CPU卡程序设计实例(二十四)生成过程密钥
- OpenSSL中服务端和客户端加密通信中密钥生成过程
- 支付宝密钥生成过程
- IKEv2的认证数据生成过程
- 自动生成Makefile的全过程详解
- PHP的GET/POST等大变量生成过程
- Android Studio打包,生成jks密钥,签名Apk,多渠道打包
- Android属性之build.prop生成过程
- 如何在ASP.NET中获取随机生成的cookie加密与验证密钥
- 用于生成交叉表的存储过程的存储过程
- STP生成树的选举过程。
- 蓝牙解析(part11):BLE SM(2):密钥生成方法(Key Generation Methods)
- MS SQL server 生成 insert 数据的存储过程脚本
- 在C#中保存Bouncy Castle生成的密钥对 【自用笔记】
- 为sql server 表数据生成创建的储存过程(生成insert 脚本) (转)
- Openwrt的S3C6410的编译固件生成过程研究
- 自动生成Makefile的全过程详解2
- 通过这个存贮过程生成实体类(sql2000)