
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
クイックテスト
ビルドフォルダから、2つのサイト(同一ローカルコンピュータ上)をそれぞれQKDデバイスで実行するには、まず、サイトエージェントを起動し、それにAliceの「ダミードライバ」を接続してサイト「A」を起動します: (バイナリがインストールされている場合は、指示にあるコマンドへのパスを省略してください。)```bash ./src/Tools/SiteAgentRunner/SiteAgentRunner -p 8000 & ./src/Drivers/DummyQKDDriver/DummyQKDDriver -r localhost:8000 -a
以下のパッケージが必要です:
- [Python3](https://www.python.org/downloads/release/python-397/) - Python インタプリタ、YAML と Jinja2 の組み込みサポート
- [rsync](https://rsync.samba.org/) - リモートのファイルとフォルダの同期
- [aria2c](https://aria2.github.io/) - 高速ダウンロードユーティリティ
- [fzf](https://github.com/junegunn/fzf) - コマンドラインのあいまいファインダー
- [md5sum](http://www.microbrew.org/tools/md5sum/)
これらは任意ですが推奨します:
- [rofi](https://github.com/davatorium/rofi) - アプリケーションランチャー、ウィンドウスイッチャー、および dmenu 代替
- [tmux](https://github.com/tmux/tmux) - ターミナルマルチプレクサ
- [megatools](https://megatools.megous.com/) - Mega 向けコマンドラインクライアントアプリケーション
- [gallery-dl](https://github.com/mikf/gallery-dl) - イメージギャラリーやコレクションをダウンロードするためのコマンドラインプログラム
すべての機能を利用するには、上記のすべてのパッケージが必要です。```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
これにより、あるサイトから次のサイトへのシングルホップが作成されます。より複雑なルートは、パスを指定したJSON文字列を-aオプションで使用することで定義できます。
数秒後、キーが利用可能になるはずです。これはキーを要求してテストできます。
注: -k パラメータは、2番目のサイトの詳細に表示される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のAlice側を起動し、作成するトンネルを定義します。2つのポートが開かれ、各側に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の代わりに、他の形式の接続を作成できます:
| Example | 説明 | | ============================= | ===================================================== | | tcpserv://0.0.0.0:1234 | ポート1234に待受ポートが作成されます | | tcp://127.0.01:1234 | ローカルホストの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 | 生のソケットを作成します。レベルはtcp、ip、ethのいずれかです。 |
計画済みおよび完了済みの機能
このプロジェクトが科学研究と大規模プロジェクトの両方に有用であることが期待されています。プロジェクトの詳細はこの論文をご覧ください。
このプロジェクトに貢献するには、Contributionファイルを参照してください。
現在のシステムはLinux上で動作します。Windowsは将来対応予定です。現時点ではソースからビルドするのが最も簡単です
すぐに実行可能なDockerイメージが[gitlab registry][]にあります。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](https://gitlab.com/QComms/cqptoolkit/-/jobs/artifacts/master/download?job=package%3Adeb) からバイナリパッケージをインストールできます。zip ファイルを展開し、`dpkg` でツールをインストールします。依存関係が不足していると警告されますが、心配はいりません。2行目で修正されます。```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 を実行してください。