On Tue, Jul 08, 2025 at 11:25:05AM +0300, Valery Smyslov wrote:
> Hi Antony,
> 
> > > I think that the problem that the draft addresses can be solved
> > > in more simple and elegant way. Just lift prohibition for KE transforms
> > > to appear in the SA payload in IKE_AUTH.
> > >
> > > Rationale. Currently all the parameters of the initial Child SA are
> > > negotiated
> > > in the IKE_AUTH exchange except for KE methods. Section 1.2 of RFC 7296
> > > says:
> > >
> > >    Note that IKE_AUTH messages do not contain KEi/KEr or Ni/Nr payloads.
> > >    Thus, the SA payloads in the IKE_AUTH exchange cannot contain
> > >    Transform Type 4 (Diffie-Hellman group) with any value other than
> > >    NONE.  Implementations SHOULD omit the whole transform substructure
> > >    instead of sending value NONE.
> > >
> > > The only difference between negotiation of Child SA parameters in
> IKE_AUTH
> > > and in CREATE_CHILD_SA is that in the latter case KE method is
> negotiated
> > > too, so that the full set of needed parameters is negotiated. Thus, the
> > > solution -
> > > let negotiation in IKE_AUTH be the same as negotiation in
> CREATE_CHILD_SA -
> > > lift the prohibition for KE method transforms to appear there. But do
> not
> > > use the negotiated KE method(s) for computing session keys for initial
> Child
> > > SA -
> > > just check that negotiation is successful, which means that you will not
> > > have
> > > problems with the following rekey(s).
> > >
> > > To maintain backward compatibility negotiate this feature in IKE_SA_INIT
> > > via exchange of a new notification.
> > 
> > 
> > If this payload is sent in IKE_SA_INIT, it would apply to all subsequent
> > CHILD_SAs, potentially restricting flexibility. I wonder whether placing
> it
> > in CREATE_CHILD_SA or IKE_AUTH would be more appropriate, to allow
> > per-CHILD_SA PFS negotiation.
> > 
> > I remember the use case Valery used to mention if the SA is short lived no
> > need for pfs.
> > 
> > >
> > >    Initiator                         Responder
> > >    -------------------------------------------------------------------
> > >    HDR, SAi1, KEi, Ni
> > >              N(EARLY_CHILD_PFS_INFO) -->
> > >
> > >                              <--  HDR, SAr1, KEr, Nr, [CERTREQ],
> > >                                              N(EARLY_CHILD_PFS_INFO)
> > 
> > what is in the payload EARLY_CHILD_PFS_INFO is it single value or list?
> > I propse a list.
> 
> You seems to miss the point (perhaps my message wasn't clear enough).


> EARLY_CHILD_PFS_INFO cannot be single or list - it contains no data.
> Its purpose is to allow peers negotiate support for the pfs-info extension.
> If peers successfully exchange EARLY_CHILD_PFS_INFO in IKE_SA_INIT,
> then the initiator can include (A)KE transforms into the SA payload

Thanks for pointing it out. Now I understan EARLY_CHILD_PFS_INFO which is 
capability annoucemnt.

I will wait for the updated I.D, it is not yet clear to me how KE from RFC
7296 would alllow multiple KE or would it be ADDKE* from RFC9370? 

> in IKE_AUTH (currently this is prohibited by Section 1.2 of RFC 7296)
> and the responder will not be choked. This would allow peers to negotiate
> the _whole_ set of Child SA parameters in IKE_AUTH, including (A)KE methods,
> exactly as if they created IKE SA childless and immediately perform
> CREATE_CHILD_SA.
> The only difference between these two cases is that in case of IKE_AUTH
> the negotiated (A)KE methods will not be used for calculating keys of the
> initial Child SA,
> peers just will make sure that their Child SA policies are compatible and
> they
> will not have problems with the following rekeys of this Child SA.
> 
> Hope this helps.
> 
> Regards,
> Valery.
> 
> 
> > 
> > >
> > >
> > >    HDR, SK {IDi, [CERT,] [CERTREQ,]
> > >        [IDr,] AUTH, SAi2_with_KE,
> > >        TSi, TSr}  -->
> > >
> > >                                 <--  HDR, SK {IDr, [CERT,] AUTH,
> > >                                          SAr2_with_KE, TSi, TSr}
> > 
> > If the above is a list. The responder should choose one from the list.
> > 
> > EARLY_CHILD_PFS_INFO_LIST from I -> R
> > EARLY_CHILD_PFS_INFO from R-> I
> > 
> > This idea could also support one of the initial ideas floated around --
> use
> > the same KE method as IKE. Which could be either used one element of the
> > proposed list.  Or it could be special notify.
> > 
> > Also both EARLY_CHILD_PFS_INFO_LIST should allow no KE, a.k.a. no PFS too.
> > 
> > > In my opinion this solution has the following advantages:
> > >
> > > 1. It allows full-fledged negotiation of KE methods identical to what
> > > CREATE_CHILD_SA allows with no restrictions on the policy
> > >     (or these restrictions are the same as for CREATE_CHILD_SA).
> > > 2. It is easy to implement - note that you already have code for
> handling SA
> > > payload
> > >     in CREATE_CHILD_SA, which does all the work.
> > > 3. If it is used with optimized rekey, then the problem of initial Child
> SA
> > > rekey will gone -
> > >      just save the negotiated KE method(s) and use them in the following
> > > rekeys.
> > 
> > I wonder if this would work with PQC scenario? what would
> > EARLY_CHILD_PFS_INFO look like if the peer is going to rekey immediately
> > following the AUTH?
> > 
> > 
> > > Opinions?
> > 
> > I like this one better than the previous proposals.
> 
> _______________________________________________
> IPsec mailing list -- [email protected]
> To unsubscribe send an email to [email protected]

_______________________________________________
IPsec mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to