很多资料都没有清晰的禅述IKE中PFS的实现原理,这里结合IKE密钥交换过程说明IPSec中PFS的实现。
IKEv2的SA协商分为三个过程,分别是IKE_SA_INIT,IKE_AUTH,CREATE_CHILD_SA。
IKE_SA_INIT和IKE_AUTH是合在一起的,前两个包完成DH密钥交换和IKE SA生成,后两个包完成认证和IPSec SA生成,这里认证和协商IPSec的包是合在一起的。
IKE_SA_INIT过程只能生成一个IPSec SA,如果有多个IPSec SA需要生成则要执行CREATE_CHILD_SA过程。
CREATE_CHILD_SA过程只有两个数据包,其中DH公钥(就是KEi和KEr)是可选的,当开启PFS时每个CREATE_CHILD_SA过程都要包含DH公钥。
当IKE SA和IPSec SA将要过期时需要执行CREATE_CHILD_SA创建新的等效SA替换旧的SA,新的SA创建完成后删除旧的SA。如果是基于更新密钥的原因执行CREATE_CHILD_SA需要携带REKEY_SA类型的Notify负载(记为N(REKEY_SA)。其中IKE SA的rekey协商必须要包含DH公钥(KEi,KEr)的,不管是否开启PFS(RFC 7296 2.18节)。
以下为用于rekey的CREATE_CHILD_SA过程
知识点:
IKE的DH交换是互相的,需要交换两个DH公钥,同时也会生成两个共享密钥,一个用于加密发出的流量,一个用于解密收到的流量。
IKEv1和IKEv2的区别
参考:
IKEv2
https://datatracker.ietf.org/doc/rfc7296/
IKEv2协议详解
https://cshihong.github.io/2019/04/09/IPSec-VPN%E4%B9%8BIKEv2%E5%8D%8F%E8%AE%AE%E8%AF%A6%E8%A7%A3/
量子安全密码
https://datatracker.ietf.org/doc/rfc9370/