This demo uses the Qrypt entropy stream to derive a pre-shared key (PSK), and uses it to add additional layer of security for VPP WireGuard peers. VPP WireGuard PSK is an optional parameter that adds encryption on top of the standard key exchange. The PSK derived from a quantum-safe entropy source is intended to improve the resistance against future quantum-computing threats.
The entropy as a key material must be securely shared between endpoints to generate the same PSK in different endpoints at a different time. For this purpose Qrypt provides BLAST protocol for delivery and synchronization.
Both qp-vpp endpoints connect to Qrypt SDK. One endpoint is an initiator (marked in the config file) and generates AES
key with metadata. A part of the key configuration is the TLL that puts a time limit on how long can the metadata be
used to replicate the key.
The new key is generated every 10 seconds (the default key-rotation-ttl value in qp-vpp-1.yaml). The initiator
(qp-vpp-1) requests a new AES key and shares the metadata, both endpoints then reconfigure WireGuard endpoint peer to
keep the connection up.
- Login to Qrypt developer portal
- Download the Qrypt "BLAST C SDK Linux x86_64" v0.12.8 (under Changelogs) and save it to
/qrypt-sdk/QryptSecurity-c-linux-x86_64.tar.gz(do not extract it) - Generate a new token and put it to file
/qrypt-sdk/token
Make sure both files exist in /qrypt-sdk before building the image.
- Run
make build-binaryto build the qp-vpp binary - Build the qp-vpp docker container with
make build-demo-image. The VPP version with wireguard-psk feature enabled is pre-configured. The image is tagged asvpp:wireguard - Start the demo
make demo
- Starts two QP-VPP endpoints:
qp-vpp-1(initiator) andqp-vpp-2(synchronizer). qp-vpp-2starts a local server on port :7007 and waits for the initiator to share the metadata.qp-vpp-1uses Qrypt-SDK to generate AES key and shared the metadata withqp-vpp-2- Both endpoints configure VPP WireGuard interface and peer using an AES/PSK.
- The demo verifies connectivity by having both VPP instances ping each other.
All interface names, IP addresses, and public/private keys are pre-defined in the endpoint configuration files in resources.
Open a shell inside the containers:
docker exec qp-vpp-1 bash
docker exec qp-vpp-2 bash
Or inspect the VPP configuration directly:
docker exec qp-vpp-1 vppctl sh int
docker exec qp-vpp-2 vppctl sh wireguard peer