
QKD 장치를 제어하고 대칭 키를 관리하기 위한 프레임워크입니다. [프로젝트 페이지](https://qcomms.gitlab.io/cqptoolkit/)를 참조하세요.
이 시스템은 QKD를 보안 시스템에 통합하기 위한 다양한 구성 요소를 제공합니다. C++11로 작성되었지만 [GRPC][] 인터페이스를 사용하므로 다양한 언어와 통합될 수 있습니다.
이 소프트웨어를 네이티브로 실행하려면 다음 중 하나를 수행하세요:
서브모듈을 포함하여 소스를 클론하려면:```bash git clone --recurse-submodules [email protected]:QComms/cqptoolkit.git
> `--recurse-submodules`를 사용하지 않고 클론한 경우, 소스 폴더 안에서 `git submodule update --init`을 실행하여 서브모듈을 업데이트할 수 있습니다.
프로젝트를 컴파일하는 데 필요한 종속성 목록은 다음과 같습니다 (자세한 설치 방법은 아래에서 계속 읽어주세요):```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
빠른 테스트
빌드 폴더에서 로컬 컴퓨터에서 각각 QKD 장치가 있는 두 사이트를 실행하려면 먼저 사이트 에이전트를 시작하고 Alice "더미 드라이버"를 연결하여 사이트 "A"를 시작합니다. (바이너리가 설치된 경우 명령어에서 경로를 생략하세요.)```bash ./src/Tools/SiteAgentRunner/SiteAgentRunner -p 8000 & ./src/Drivers/DummyQKDDriver/DummyQKDDriver -r localhost:8000 -a
사전 인증 요청 전송
`_tgt`를 사용하여 responder에서 사용하는 TGT 프로토콜 값을 지정합니다
티켓을 가져옵니다.
**krbtgt 비밀번호**
위 명령의 출력을 보면, `ntds`와 다른 사용자의 TGT 티켓(예: krbtgt 사용자)을 덤프하는 데 성공했음을 알 수 있습니다.```bash
./src/Tools/SiteAgentRunner/SiteAgentRunner -p 8001 &
./src/Drivers/DummyQKDDriver/DummyQKDDriver -r localhost:8001 -b
이 시스템은 관리 시스템에 의해 제어되도록 설계되어 있으므로, 명령어 SiteAgentCtl을 사용하여 연결을 설정해야 하며, 즉시 키를 생성하지 않습니다.
이는 기본적으로 *SiteAgentRunner*와 *DummyQKDDriver*가 구성 JSON 문자열 파일 인수를 지정하지 않고 실행된 경우 이와 유사한 결과를 생성해야 합니다:```json
{
"url": "<hostname>:8000",
"devices": [
{
"config": {
"id": "dummyqkd__0__16_alice",
"kind": "dummyqkd"
},
"controlAddress": "<hostname>:34219"
}
]
}
그리고 포트 8001은 다음과 유사한 결과를 생성해야 합니다.```json
{
"url": ":8001",
"devices": [
{
"config": {
"id": "dummyqkd__0__16_bob",
"side": "Bob",
"kind": "dummyqkd"
},
"controlAddress": ":38367"
}
]
}
- 이제, 호출을 통해 연결을 설정할 수 있습니다:```bash
./src/Tools/SiteAgentCtl/SiteAgentCtl -c localhost:8000 -j localhost:8001
이것은 한 사이트에서 다음 사이트로의 단일 홉을 생성합니다. -a 옵션에 경로를 지정하는 JSON 문자열을 사용하여 더 복잡한 경로를 정의할 수도 있습니다.
몇 초 후에 키를 요청하여 테스트할 수 있는 키가 생성되어야 합니다.
참고: -k 매개변수는 두 번째 사이트의 세부 정보에 표시된 URL이어야 하며, "localhost:8001"이 아닙니다.```bash ./src/Tools/SiteAgentCtl/SiteAgentCtl -c localhost:8000 -k
hostname:8001
링크는 unjoin 명령어로 중지할 수 있습니다:```bash
./src/Tools/SiteAgentCtl/SiteAgentCtl -c localhost:8000 -u localhost:8001
Not that key is still available even though generation has stopped, as long as the site agents are running. It can be requested with the same key request command above.
Encryption example
With the launched site agents and drivers on the same local computer as described above and after having started the link for key exchange, one can also test the encryption features.
hostname:8001- 이제 VPN의 Alice 측을 시작하여 생성할 터널을 정의합니다. 두 개의 포트가 열리며, 각 측에 대해 9000과 9001 포트가 열립니다. 이 포트로 들어오는 모든 데이터는 암호화되어 상대방 측으로 전송된 후 복호화되어
다른 포트에서 출력됩니다.```
./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
tcp 통신을 사용하는 모든 것은 이 포트를 사용할 수 있습니다, netcat은 포트를 통해 데이터를 전송하는 간단한 프로그램입니다, 한쪽에서 시작하세요:``` nc localhost 9000
그리고 다른 하나는:```
nc localhost 9001
한쪽에 입력된 내용은 엔터를 누르면 다른 쪽에 나타납니다. 9000 및 9001 포트를 통과하는 패킷을 Wireshark와 같은 도구로 검사하면 데이터가 암호화되고 사용된 키 ID가 표시됩니다.
다른 형태의 연결도 tcpserv 대신 생성할 수 있습니다:
| 예시 | 설명 | | ============================= | ===================================================== | | tcpserv://0.0.0.0:1234 | 포트 1234에 수신 포트가 생성됩니다 | | tcp://127.0.01:1234 | localhost의 tcp 포트 1234로 연결이 이루어집니다 | | udp://0.0.0.0:1234 | 이 포트에서 UDP 패킷이 전송됩니다 | | tun://192.168.101.1/?netmask=255.255.255.0 | IP 주소로 IP 레벨 터널 장치가 생성됩니다 | | tap://192.168.101.1/?netmask=255.255.255.0 | 이더넷 레벨 탭 장치가 생성됩니다 | | eth://eth0/?level=tcp | Raw 소켓을 생성합니다. 레벨은 tcp, ip 또는 eth가 될 수 있습니다. |
계획 및 완료된 기능
이 프로젝트가 과학 연구 작업과 대규모 프로젝트 모두에 유용하게 사용될 수 있기를 바랍니다. 프로젝트에 대한 자세한 내용은 이 논문에서 확인할 수 있습니다.
이 프로젝트에 기여하려면 기여 파일을 참조하십시오.
이 시스템은 현재 리눅스에서 작동합니다 - 윈도우는 향후 계획입니다. 현재 가장 쉬운 방법은 소스에서 빌드하는 것입니다
[gitlab registry][]에 실행 준비가 된 Docker 이미지가 있습니다. sudo docker run -it --rm registry.gitlab.com/qcomms/cqptoolkit/runtime로 실행할 수 있습니다. 끝에 명령을 추가하여 직접 실행할 수 있습니다. 예를 들어 QKDSim으로 QKD 키 생성 시뮬레이션을 실행하려면:```bash
sudo docker run -it --rm registry.gitlab.com/qcomms/cqptoolkit/runtime AlignmentTests
### Ubuntu 18.04+
Gitlab에서 바이너리 패키지를 설치할 수 있습니다. zip 파일을 추출하고 `dpkg`로 도구를 설치하면 종속성 누락에 대한 오류가 발생하지만 걱정하지 마세요. 두 번째 줄이 해결해 줍니다.```bash
sudo dpkg -i setup/*.deb build/gcc/CQP-*-Linux-{Algorithms,Networking,CQPToolkit,KeyManagement,QKDInterfaces,CQPUI,Simulate,Tools,UI,Drivers,IDQDevices}.deb
sudo apt install -fy
개발 파일(헤더 및 정적 라이브러리)을 설치하려면 대신 sudo dpkg -i build/gcc/CQP-*-Linux-*-dev.deb ; sudo apt install -fy를 실행하십시오.
물론 시스템 라이브러리 및 종속성 버전을 변경하고 싶지 않다면, 모든 종속성이 이미 설치된 Docker 컨테이너 내에서 빌드할 수 있습니다. 다음 명령으로:```bash sudo docker run -it registry.gitlab.com/qcomms/cqptoolkit/buildenv
그렇지 않으면, 소스에서 빌드하려면 `setup/setupbuild.sh`에 나열된 종속성을 설치해야 하며, 현재 Ubuntu와 Arch Linux에서 작동합니다.