
Framework para controlar dispositivos QKD e gerenciar chaves simétricas. Veja a [página do projeto aqui](https://qcomms.gitlab.io/cqptoolkit/)
O sistema fornece vários componentes para integrar QKD em um sistema de segurança. É escrito em C++11, mas usa interfaces [GRPC][], portanto pode ser integrado com muitas linguagens diferentes.
Para executar o software nativamente, siga uma das opções:
Para clonar o código-fonte incluindo submódulos:```bash git clone --recurse-submodules [email protected]:QComms/cqptoolkit.git
> Se você clonou sem usar `--recurse-submodules`, os submódulos podem ser atualizados executando `git submodule update --init` a partir da pasta de origem.
Aqui está uma lista de dependências necessárias para compilar o projeto (leia mais abaixo para mais detalhes sobre a instalação):```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
Teste rápido
A partir da pasta de compilação, para executar dois sites (no mesmo computador local) cada um com um dispositivo QKD, primeiro inicie o site "A" iniciando um agente de site e conectando um "dummy driver" Alice a ele: (Se os binários foram instalados, omita os caminhos para os comandos das instruções.)```bash ./src/Tools/SiteAgentRunner/SiteAgentRunner -p 8000 & ./src/Drivers/DummyQKDDriver/DummyQKDDriver -r localhost:8000 -a
ENTRADA:```bash
./src/Tools/SiteAgentRunner/SiteAgentRunner -p 8001 &
./src/Drivers/DummyQKDDriver/DummyQKDDriver -r localhost:8001 -b
Isso não começará a produzir chave imediatamente, pois este sistema foi projetado para ser controlado por um sistema de gerenciamento; a conexão precisa ser estabelecida com o comando SiteAgentCtl.
o que deve produzir algo semelhante a isto por padrão, se *SiteAgentRunner* e *DummyQKDDriver* forem iniciados sem especificar um argumento de arquivo de string de configuração JSON:```json
{
"url": "<hostname>:8000",
"devices": [
{
"config": {
"id": "dummyqkd__0__16_alice",
"kind": "dummyqkd"
},
"controlAddress": "<hostname>:34219"
}
]
}
e a porta 8001 deve produzir algo semelhante a```json
{
"url": ":8001",
"devices": [
{
"config": {
"id": "dummyqkd__0__16_bob",
"side": "Bob",
"kind": "dummyqkd"
},
"controlAddress": ":38367"
}
]
}
- Agora, a conexão pode ser feita chamando:```bash
./src/Tools/SiteAgentCtl/SiteAgentCtl -c localhost:8000 -j localhost:8001
Isso criará um único salto de um site para o próximo, novamente, rotas mais complexas podem ser definidas usando a opção -a com uma string JSON especificando o caminho.
Após alguns segundos, deve haver uma chave disponível que pode ser testada solicitando uma chave.
NOTA: O parâmetro -k deve ser a url mostrada nos detalhes do segundo site, não "localhost:8001"```bash ./src/Tools/SiteAgentCtl/SiteAgentCtl -c localhost:8000 -k
hostname:8001
O link pode ser interrompido com o comando unjoin:```bash
./src/Tools/SiteAgentCtl/SiteAgentCtl -c localhost:8000 -u localhost:8001
Observe que a chave ainda está disponível mesmo que a geração tenha parado, desde que os agentes do site estejam em execução. Ela pode ser solicitada com o mesmo comando de solicitação de chave acima.
Exemplo de criptografia
Com os agentes do site e drivers lançados no mesmo computador local conforme descrito acima e após ter iniciado o link para troca de chaves, também é possível testar os recursos de criptografia.
hostname:8001- Agora inicie o lado Alice da VPN, definindo o túnel a ser criado. Duas portas serão abertas, uma para cada lado nas portas 9000 e 9001, qualquer coisa que entrar nessas portas será criptografada, transferida para o outro lado, descriptografada e entregue na outra 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
Qualquer coisa que use comunicações tcp pode então usar esta porta, netcat é um programa simples que enviará dados pelas portas, inicie um de cada lado:``` nc localhost 9000
e um no outro:```
nc localhost 9001
Qualquer coisa digitada de um lado aparecerá do outro quando Enter for pressionado. Inspecionar os pacotes que viajam pelas portas 9000 e 9001
com uma ferramenta como o Wireshark mostrará os dados sendo criptografados e o ID da chave usado.
Outras formas de conexão podem ser criadas, em vez de tcpserv:
| Exemplo | Descrição | | ============================= | ===================================================== | | tcpserv://0.0.0.0:1234 | Uma porta de escuta é criada na porta 1234 | | tcp://127.0.01:1234 | Uma conexão à porta TCP 1234 no localhost é feita | | udp://0.0.0.0:1234 | Pacotes UDP são enviados desta porta | | tun://192.168.101.1/?netmask=255.255.255.0 | Um dispositivo de túnel de nível IP é criado com um endereço IP | | tap://192.168.101.1/?netmask=255.255.255.0 | Um dispositivo tap de nível Ethernet é criado | | eth://eth0/?level=tcp | Cria um socket bruto, o nível pode ser tcp, ip ou eth. |
Funcionalidades planeadas e concluídas