
Framework per il controllo di dispositivi QKD e la gestione di chiavi simmetriche. Vedi la [pagina del progetto qui](https://qcomms.gitlab.io/cqptoolkit/)
Il sistema fornisce vari componenti per integrare QKD in un sistema di sicurezza. È scritto in C++11 ma utilizza interfacce [GRPC][] che permettono l'integrazione con molti linguaggi diversi.
Per eseguire il software in modo nativo, è possibile:
Per clonare il sorgente inclusi i sottomoduli:```bash git clone --recurse-submodules [email protected]:QComms/cqptoolkit.git
> Se hai clonato senza usare `--recurse-submodules`, i sottomoduli possono essere aggiornati eseguendo `git submodule update --init` dalla cartella sorgente.
Ecco un elenco delle dipendenze necessarie per compilare il progetto (leggi più avanti per maggiori dettagli sull'installazione):```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
Test rapido
Dalla cartella di build, per eseguire due siti (sullo stesso computer locale) ciascuno con un dispositivo QKD, avvia prima il sito "A" avviando un agente del sito e collegandovi un "dummy driver" di Alice: (Se i binari sono stati installati, ometti i percorsi dei comandi dalle istruzioni.)```bash ./src/Tools/SiteAgentRunner/SiteAgentRunner -p 8000 & ./src/Drivers/DummyQKDDriver/DummyQKDDriver -r localhost:8000 -a
Le prestazioni, l'affidabilità e la compatibilità di ogni strumento possono variare in base al tuo caso d'uso specifico e all'ambiente.```bash
./src/Tools/SiteAgentRunner/SiteAgentRunner -p 8001 &
./src/Drivers/DummyQKDDriver/DummyQKDDriver -r localhost:8001 -b
Questo non inizierà a generare la chiave immediatamente, poiché questo sistema è progettato per essere controllato da un sistema di gestione; la connessione deve essere stabilita con il comando SiteAgentCtl.
che dovrebbe produrre qualcosa di simile a questo per impostazione predefinita, se *SiteAgentRunner* e *DummyQKDDriver* fossero avviati senza specificare un argomento di file di stringa JSON di configurazione:```json
{
"url": "<hostname>:8000",
"devices": [
{
"config": {
"id": "dummyqkd__0__16_alice",
"kind": "dummyqkd"
},
"controlAddress": "<hostname>:34219"
}
]
}
e la porta 8001 dovrebbe produrre qualcosa di simile a```json
{
"url": ":8001",
"devices": [
{
"config": {
"id": "dummyqkd__0__16_bob",
"side": "Bob",
"kind": "dummyqkd"
},
"controlAddress": ":38367"
}
]
}
- Ora, la connessione può ora essere effettuata chiamando:```bash
./src/Tools/SiteAgentCtl/SiteAgentCtl -c localhost:8000 -j localhost:8001
Questo creerà un singolo salto da un sito al successivo; ancora, rotte più complesse possono essere definite utilizzando l'opzione -a con una stringa JSON che specifica il percorso.
Dopo alcuni secondi dovrebbe essere disponibile una chiave, che può essere testata richiedendo una chiave.
NOTA: Il parametro -k deve essere l'url mostrato nei dettagli del secondo sito, non "localhost:8001"```bash ./src/Tools/SiteAgentCtl/SiteAgentCtl -c localhost:8000 -k
hostname:8001
Il collegamento può essere fermato con il comando unjoin:```bash
./src/Tools/SiteAgentCtl/SiteAgentCtl -c localhost:8000 -u localhost:8001
Non che la chiave sia ancora disponibile anche se la generazione è cessata, fintanto che gli agenti del sito sono in esecuzione. Può essere richiesta con lo stesso comando di richiesta chiave sopra.
Esempio di crittografia
Con gli agenti del sito e i driver avviati sullo stesso computer locale come descritto sopra e dopo aver avviato il collegamento per lo scambio di chiavi, è possibile testare anche le funzionalità di crittografia.
hostname:8001- Ora avvia il lato Alice della VPN, definendo il tunnel da creare. Verranno aperte due porte, una per ogni lato sulle porte 9000 e 9001, tutto ciò che entra in queste porte verrà crittografato, trasferito all'altro lato, decrittografato e prodotto sull'altra porta.```
./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
Qualsiasi cosa che utilizza comunicazioni tcp può quindi usare questa porta, netcat è un semplice programma che invierà dati attraverso le porte, avvia una da un lato:``` nc localhost 9000
e uno sull'altro:```
nc localhost 9001
Qualsiasi cosa digitata in un lato apparirà sull'altro quando viene premuto Invio. Ispezionando i pacchetti che viaggiano attraverso le porte 9000 e 9001 con uno strumento come wireshark, si vedrà che i dati sono crittografati e verrà mostrato l'ID della chiave utilizzato.
Altre forme di connessione possono essere create, invece di tcpserv:
| Esempio | Descrizione | | ============================= | ===================================================== | | tcpserv://0.0.0.0:1234 | Viene creata una porta in ascolto sulla porta 1234 | | tcp://127.0.01:1234 | Viene stabilita una connessione alla porta tcp 1234 su localhost | | udp://0.0.0.0:1234 | I pacchetti UDP vengono inviati da questa porta | | tun://192.168.101.1/?netmask=255.255.255.0 | Viene creato un dispositivo tunnel a livello IP con un indirizzo IP | | tap://192.168.101.1/?netmask=255.255.255.0 | Viene creato un dispositivo tap a livello ethernet | | eth://eth0/?level=tcp | Crea un raw socket, il livello può essere tcp, ip o eth. |
Funzionalità pianificate e completate