
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 डिवाइस है, पहले साइट "A" को एक साइट एजेंट शुरू करके और उससे एक एलिस "डमी ड्राइवर" कनेक्ट करके शुरू करें: (यदि बाइनरी स्थापित हो चुके हैं, तो निर्देशों से कमांड के पथ हटा दें।)```bash ./src/Tools/SiteAgentRunner/SiteAgentRunner -p 8000 & ./src/Drivers/DummyQKDDriver/DummyQKDDriver -r localhost:8000 -a
## पर्यावरण सेटअप
### पर्यावरण चर```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
यह एक साइट से दूसरी साइट तक एक single hop बनाएगा, फिर से -a विकल्प का उपयोग करके पथ निर्दिष्ट करने वाली JSON स्ट्रिंग के साथ अधिक जटिल रूट परिभाषित किए जा सकते हैं।
कुछ सेकंड के बाद एक key उपलब्ध होनी चाहिए, जिसे key का अनुरोध करके परखा जा सकता है।
नोट: -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
नोट करें कि उत्पादन बंद होने के बाद भी कुंजी उपलब्ध है, जब तक साइट एजेंट चल रहे हैं। इसे ऊपर दिए गए उसी कुंजी अनुरोध कमांड से अनुरोध किया जा सकता है।
एन्क्रिप्शन उदाहरण
ऊपर वर्णित अनुसार एक ही स्थानीय कंप्यूटर पर लॉन्च किए गए साइट एजेंट और ड्राइवरों के साथ और कुंजी विनिमय के लिए लिंक शुरू करने के बाद, कोई एन्क्रिप्शन सुविधाओं का भी परीक्षण कर सकता है।
hostname:8001- अब VPN के एलिस पक्ष को शुरू करें, बनाए जाने वाले टनल को परिभाषित करते हुए। दो पोर्ट खोले जाएंगे, प्रत्येक पक्ष के लिए एक 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 जैसे उपकरण से निरीक्षण करने पर डेटा एन्क्रिप्टेड और उपयोग किए गए कुंजी आईडी को दिखाएगा।
tcpserv के बजाय कनेक्शन के अन्य रूप बनाए जा सकते हैं:
| उदाहरण | विवरण | | ============================= | ===================================================== | | tcpserv://0.0.0.0:1234 | पोर्ट 1234 पर एक श्रवण पोर्ट बनाया जाता है | | tcp://127.0.01:1234 | लोकलहोस्ट पर टीसीपी पोर्ट 1234 से एक कनेक्शन बनाया जाता है | | udp://0.0.0.0:1234 | इस पोर्ट से यूडीपी पैकेट भेजे जाते हैं | | tun://192.168.101.1/?netmask=255.255.255.0 | एक आईपी स्तर का टनल डिवाइस एक आईपी पते के साथ बनाया जाता है | | tap://192.168.101.1/?netmask=255.255.255.0 | एक ईथरनेट स्तर का टैप डिवाइस बनाया जाता है | | eth://eth0/?level=tcp | एक रॉ सॉकेट बनाएं, स्तर tcp, ip या eth हो सकता है। |
योजनाबद्ध और पूर्ण की गई सुविधाएँ
उम्मीद है कि यह परियोजना वैज्ञानिक अनुसंधान कार्य और बड़ी परियोजनाओं दोनों के लिए उपयोगी साबित हो सकती है। परियोजना के बारे में अधिक जानकारी इस पेपर में पाई जा सकती है।