
Framework zur Steuerung von QKD-Geräten und Verwaltung symmetrischer Schlüssel. Siehe die [Projektseite hier](https://qcomms.gitlab.io/cqptoolkit/)
Das System bietet verschiedene Komponenten zur Integration von QKD in ein Sicherheitssystem. Es ist in C++11 geschrieben, verwendet jedoch [GRPC][]-Schnittstellen, sodass es mit vielen verschiedenen Sprachen integriert werden kann.
Um die Software nativ auszuführen, entweder:
Um das Quellverzeichnis inklusive Submodule zu klonen:```bash git clone --recurse-submodules [email protected]:QComms/cqptoolkit.git
> Falls Sie ohne Verwendung von `--recurse-submodules` geklont haben, können die Submodule durch Ausführen von `git submodule update --init` aus dem Quellordner aktualisiert werden.
Hier ist eine Liste der Abhängigkeiten, die Sie zum Kompilieren des Projekts benötigen (bitte lesen Sie weiter unten für weitere Details zur Installation):```bash
sudo apt install pkg-config ca-certificates file build-essential cmake ninja-build libusb-1.0-0-dev libcurl4-openssl-dev \
libcrypto++-dev libcap-dev uuid-dev libssl-dev libsqlite3-dev libprotobuf-dev libgrpc++-dev \
libssl-dev protobuf-compiler protobuf-compiler-grpc checkinstall
mkdir build-cqptoolkit
cd build-cqptoolkit
cmake -G Ninja ../cqptoolkit && ninja
Schnelltest
Aus dem Build-Ordner, um zwei Standorte (auf demselben lokalen Computer) jeweils mit einem QKD-Gerät zu betreiben, starten Sie zunächst Standort "A", indem Sie einen Site-Agenten starten und einen Alice "Dummy-Treiber" damit verbinden: (Falls die Binärdateien installiert wurden, lassen Sie die Pfade zu den Befehlen aus den Anweisungen weg.)```bash ./src/Tools/SiteAgentRunner/SiteAgentRunner -p 8000 & ./src/Drivers/DummyQKDDriver/DummyQKDDriver -r localhost:8000 -a
EINGABE:```bash
./src/Tools/SiteAgentRunner/SiteAgentRunner -p 8001 &
./src/Drivers/DummyQKDDriver/DummyQKDDriver -r localhost:8001 -b
Dies wird nicht sofort mit der Schlüsselproduktion beginnen, da dieses System so konzipiert ist, dass es von einem Managementsystem gesteuert wird. Die Verbindung muss mit dem Befehl SiteAgentCtl hergestellt werden.
was standardmäßig etwas Ähnliches erzeugen sollte, wenn *SiteAgentRunner* und *DummyQKDDriver* ohne Angabe eines Konfigurations-JSON-String-Dateiarguments gestartet wurden:```json
{
"url": "<hostname>:8000",
"devices": [
{
"config": {
"id": "dummyqkd__0__16_alice",
"kind": "dummyqkd"
},
"controlAddress": "<hostname>:34219"
}
]
}
und Port 8001 sollte eine ähnliche Ausgabe wie```json
{
"url": ":8001",
"devices": [
{
"config": {
"id": "dummyqkd__0__16_bob",
"side": "Bob",
"kind": "dummyqkd"
},
"controlAddress": ":38367"
}
]
}
- Nun, die Verbindung kann nun durch Aufrufen von: hergestellt werden:```bash
./src/Tools/SiteAgentCtl/SiteAgentCtl -c localhost:8000 -j localhost:8001
Dadurch wird ein einzelner Hop von einer Site zur nächsten erstellt, wiederum können komplexere Routen definiert werden, indem die Option -a mit einer JSON-Zeichenfolge verwendet wird, die den Pfad angibt.
Nach einigen Sekunden sollte ein Schlüssel verfügbar sein, der durch Anfordern eines Schlüssels getestet werden kann.
HINWEIS: Der Parameter -k muss die URL sein, die in den Details der zweiten Site angezeigt wird, nicht "localhost:8001"```bash ./src/Tools/SiteAgentCtl/SiteAgentCtl -c localhost:8000 -k
hostname:8001
Der Link kann mit dem unjoin-Befehl gestoppt werden:```bash
./src/Tools/SiteAgentCtl/SiteAgentCtl -c localhost:8000 -u localhost:8001
Nicht, dass der Schlüssel noch verfügbar ist, auch wenn die Generierung gestoppt wurde, solange die Site-Agenten laufen. Er kann mit demselben Schlüsselanforderungsbefehl wie oben angefordert werden.
Verschlüsselungsbeispiel
Mit den gestarteten Site-Agenten und Treibern auf demselben lokalen Computer wie oben beschrieben und nachdem der Link für den Schlüsselaustausch gestartet wurde, können auch die Verschlüsselungsfunktionen getestet werden.
hostname:8001Starten Sie nun die Alice-Seite des VPN und definieren Sie den zu erstellenden Tunnel. Es werden zwei Ports geöffnet, einer für jede Seite auf 9000 und 9001; alles, was diese Ports erreicht, wird verschlüsselt, auf die andere Seite übertragen, entschlüsselt und auf dem anderen Port ausgegeben.```
./src/Tools/QTunnelServer/QTunnelServer --keystore-url=`hostname`:8000 --remote=localhost:9010 --start-node=tcpsrv://0.0.0.0:9000 --end-node=tcpsrv://0.0.0.0:9001
Alles, was TCP-Kommunikation verwendet, kann dann diesen Port nutzen. Netcat ist ein einfaches Programm, das Daten über die Ports sendet. Starten Sie einen auf einer Seite:``` nc localhost 9000
und eine auf der anderen:```
nc localhost 9001
Alles, was auf einer Seite eingegeben wird, erscheint auf der anderen, wenn die Eingabetaste gedrückt wird. Die Überprüfung der Pakete, die durch die Ports 9000 und 9001 reisen, mit einem Tool wie wireshark zeigt, dass die Daten verschlüsselt werden und die verwendete Schlüssel-ID angezeigt wird.
Andere Verbindungsformen können anstelle von tcpserv erstellt werden:
| Beispiel | Beschreibung | | ============================= | ===================================================== | | tcpserv://0.0.0.0:1234 | Ein lauschender Port wird auf Port 1234 erstellt | | tcp://127.0.01:1234 | Eine Verbindung zum TCP-Port 1234 auf localhost wird hergestellt | | udp://0.0.0.0:1234 | UDP-Pakete werden von diesem Port gesendet | | tun://192.168.101.1/?netmask=255.255.255.0 | Ein IP-Level-Tunnelgerät wird mit einer IP-Adresse erstellt | | tap://192.168.101.1/?netmask=255.255.255.0 | Ein Ethernet-Level-Tap-Gerät wird erstellt | | eth://eth0/?level=tcp | Erstellt einen Raw-Socket, Level kann tcp, ip oder eth sein. |
Geplante und abgeschlossene Funktionen