Libreswan's Online Documentation
View the Project on GitHub libreswan/libreswan.github.io
SupportThe Intermediate Exchange, or IKE_INTERMEDIATE, is an addition to the IKEv2 protocol to enable the use of quantum computer (QC) resistant algorithms. It is expected that these algorithms require the transfer of large amounts of data before the peers can complete a quantum safe encryption and authentication. However, the IKE_SA_INIT exchange does not allow fragmentation and thus cannot carry this additional data. And the IKE_AUTH exchange already requires a working encryption algorithm. The IETF draft proposal is to add support for an unlimited number of INTERMEDIATE exchanges that take place between the IKE_SA_INIT and the IKE_AUTH exchange. These new INTERMEDIATE exchanges enable message fragmentation via the standard IKEv2 Fragmentation mechanism specified in RFC 7383. All data required to setup a quantum safe encryption algorithm can then be transferred before the IKE_AUTH exchange.
While the Intermediate Exchange was originally designed to support new Quantum Safe algorithms, it can also be used for other large amounts of data that might need to be exchanged. Another such example is the data required for Remote Attestation of VPN clients before these are allowed to connect to VPN servers and the remote network.
Both NIST and the IETF have not yet defined any quantum safe algorithms to use. So any implementation of the intermediate exchange cannot yet support any specific post-quantum algorithm.
The Intermediate Exchange draft document is available at draft-ietf-ipsecme-ikev2-intermediate.
To allow the use of Intermediate Exchange in libreswan, the following modifications were made:
The current implementation successfully interoperated with Elvis Plus.
This code was merged into libreswan 4.0
Code commit: https://github.com/libreswan/libreswan/commit/6b3b669ef08793ef7ea1a6b4e483d78bd5e97bfc
Testing commit: https://github.com/libreswan/libreswan/commit/d609e4aaeabdb59d5df1c608cb45da565f380e4a
The implementation for this project is done by Yulia Kuzovkova (ukuzovkova@gmail.com) under the mentorship of Sahana Prasad and Paul Wouters and sponsored by Google as part of Google Summer of Code 2020 Program.