Paul Ponchon \(pponchon\) writes:
> > > Using different real child SA’s was needed to ensure the
> > > cryptographic security properties.
> 
> Is this requirement only based on not reusing the same IV on different cores
> or is there an additional factor I missed?

IV space and replay counter are the problem. It is just so much easier
to use different Child SAs per CPU and than trying to solve the IV
space problem.

On the G-IKEv2 we had to solve the splitting IV space to separate
senders, and that causes all kind of issues, and we have to disable
replay protection on those SAs.

Getting replay protection working on the Child SA that is shared by
multiple CPUs is much harder than creating separate Child SA for each
CPU. 

> > This is something that is really a important. The keymat between the
> > CPUs can't be same, but we could in theory create a new key hierarchy
> > that generates keys for each sub Child SAs for each CPU, but I think
> > that will just complicate things more, and having real Child SAs for
> > each cpu is the correct solution.
> 
> We're are currently facing some scalability issues with using
> multiple Child SAs and we think it is possible to reuse the same
> keymat on all the per cpu SAs.

There must be something wrong in your implementation. There should be
no scaling difference for each cpu in cases where there is one Child
SA per cpu with different keymat than cases where there is one Child
SA per cpu with same keymat than some other cpu has.

Or more likely the problem is its much harder to scale to make them
share keymat, as in that case each of the cpu needs to talk to all
other cpus to make sure they do not reuse the replay counter, or IV
space, and keep track of number of bytes transmitted etc.

If your Child SA is local to your cpu all those issues are localized
and there should not be any scaling issues.

There will be scaling issues when generating those Child SA through
IKEv2, but IKEv2 should be able to create hundreds of Child SAs per
second when using proper window size and not doing PFS on the Child
SAs.

If you are not implementing proper window size on IKEv2 then you are
limited to your RTT, i.e., if your RTT is 50 ms, then you can create
dozen or so Child SA per second, as you need to wait each Child SA
packet before you can start new one.

All this is again not stable state scaling issue, all IKEv2 issues are
issues that should not affect stable state at all.

> For this to work and respect the uniqueness of the IV, some
> mechanism would be needed. But that can be implemented without
> per-packet locks for most ciphers (e.g., by splitting the IV space,
> or making bulk IV allocations). And we would also ensure that the
> keymat is used in a FIPS compliant manner.

I remember when we had discussion of the Implicit IV (RFC8750) people
were saying that it is not clear whether the IV generation must be
inside the fips boundary or not, and if so we are not allowed to bring
external data (sequence number) and generate IV from that as that
would violate the FIPS boundaries, meaning the FIPS boundary would
grow larger, and more of the implemenation needs to be FIPS certified,
not just the actual crypto.

If we are doing similar things here, same thing might happen, meaning
suddenly we need to start FIPS certifying the actual bulk IV
allocation process or something like that and that would mean much
larger boundary for FIPS certification. 

> Would there be any other concerns in reusing the same keymat between
> multiple SAs ?

Not really, but I do not also see any reason why there would be a need
to share KEYMAT between multiple SAs.

If the issues in the IKEv2 Child SA generation are overwhelming then
we can simply use the IKEv2 KEYMAT to create new per Child SA KEYMATs
for each CPU in the cryptographically safe way (i.e., make IKEv2
extension to do that).
-- 
kivi...@iki.fi

_______________________________________________
IPsec mailing list
IPsec@ietf.org
https://www.ietf.org/mailman/listinfo/ipsec

Reply via email to