PQC Docker 化ツールキットガイド

このガイドは PQC Docker 化ツールキット用です。DigiCert PQC ツールキットのセットアップ方法は、「PQC ツールキットガイド」を参照してください。

はじめに

DigiCert のポスト量子暗号 (PQC) Docker 化ツールキットには、ハイブリッド TLS 証明書を作成することができる Docker 環境を迅速にセットアップするのに必要なすべてが収録されています。このハイブリッド証明書は、従来型の暗号アルゴリズムと組み合わせてポスト量子暗号アルゴリズムを使用することで、ポスト量子ハイブリッド TLS 証明書のデプロイの利用強度を、後方互換性も維持しながら、試験することができます。

このガイドにしたがって DigiCert PQC Docker 化ツールキットを使用し、以下の操作を行います。

  • docker-compose を使用して、Docker コンテナをスタートします。
  • 実行中の PQC コンテナを入れます。
  • 付属のデモスクリプトを実行し、PQC 証明書の例をテストします。
  • ポスト量子暗号鍵を生成する。
  • ルート、中間およびサーバー証明書を含む、完全ハイブリッド証明書チェーンを作成する。
  • OpenSSL の s_servers_client ユーティリティを使用して、証明書を試験する。

DigiCert PQC Docker 化ツールキットは、すべてのグローバル サーバー ID 顧客向けにダウンロード利用が可能です。各グローバル サーバー ID 証明書の収録内容についてもっとみる.

PQC Docker 化ツールキットコンテンツ

DigiCert PQC Docker 化ツールキットには、以下のファイルが収録されています。

  • Dockerfile
  • docker-compose.yml
  • コンパイルされた OpenSSL - ISARA Catalyst OpenSSL コネクタでパッチ修正済
  • デモ証明書と config ファイル
  • 証明書生成と機能をテストするバッシュスクリプト

前提条件

このガイドの使用前に、以下の前提条件が満たされていることを確認します。

お使いの Docker バージョンをチェックする

PQC Docker 化ツールキットをダウンロードする前に、 Docker Engine および Docker Compose がお使いのシステムにインストールされているかを確認します。

これらのコマンドが認識されない場合、Docker はお使いのシステムにインストールされていません。お使いのシステムへの Docker のインストール方法は、「前提条件」を参照してください。

Linux/macOS

端末のウインドウを開き、docker --versiondocker-compose --version を実行します。これで、下記と同様の出力が返されます。

bash
$ docker --version
Docker version 18.03.0-ce, build 0520e24

$ docker-compose --version
docker-compose version 1.20.1, build 5d8c71b

Windows

Command Prompt または PowerShell ウインドウを開き、docker --version を実行します。これで、下記と同様の出力が返されます。

powershell
> docker --version
Docker version 18.03.0-ce, build 0520e24

PQC Docker 化ツールキットをダウンロードして展開します。

  1. CertCentral アカウントに サインイン します。
  2. サイドバーメニューで、[証明書] > [オーダー]の順でクリックします。
  3. [オーダー]ページで、グローバル サーバー ID .証明書オーダーを探し、オーダー番号をクリックします。
  4. [証明書のオーダー詳細]ページで、[PQC ツールキット]をクリックします。
  5. ポスト量子暗号 (PQC) ページで、「Docker サポートファイルをダウンロードする]ヲクリックして、zip ファイルを保存します。
  6. 保存した zip ファイル (DigiCert-PQC.zip) を探して、コンテンツを展開します。

PQC ツールキットコンテナを構築して実行します

PQC Docker 化ツールキットがダウンロードおよbい展開されている場合は、docker-compose を使用してコンテナを構築する準備は完了です。

端末ウインドウを開いて展開した digicert-pqc-docker ディレクトリに移動します。

bash
cd [path/to/dir/]digicert-pqc-docker

次に、PQC ツールキットコンテナを構築します。これで、すべてのイメージ依存をダンロードし、コンテナ環境が構成されます。

コマンドををはじめて実行する場合は、必要な Ubuntu イメージが Docker Hub からダウンロードされるまで待つ必要がある場合があります。

bash
docker-compose build

これで、PQC ツールキットコンテナを個別モードでスタートする準備は完了です。

bash
docker-compose up -d
Starting digicert-pqc-docker_pqc_1 ... done

おめでとうございます!PQC Docker 化ツールキットコンテナが起動して実行されます。

コンテナ環境にアクセスし、実験を開始するには、「コンテナを入れる」を参照してください。

コンテナを入れる

付属のデモスクリプトと修正済 OpenSSL アプリで実験するには、はじめに、コンテナ環境を入れる必要があります。

docker-compose exec を使用して、実行中のコンテナ内でバッシュセッションを開始します。

bash
docker-compose exec pqc /bin/bash

ディレクトリツリー

コンテナを初めて入れる場合、/app ディレクトリにあります。このディレクトリは、全 PQC ツールキットと補足リソースの基本です。下表は、/app ディレクトリに含まれる、重要なサブディレクトリを示します。

ディレクトリ / ファイル 説明
digicert-pqc/ プライマリツールキットディレクトリ。
 certs/ 生成した証明書を保存するディレクトリ。
 connector/ ISARA Catalyst OpenSSL コネクタリソース。
 demo/ デモスクリプトとリソース。
  certs/ 生成したデモ証明書を保存するディレクトリ。
  configs/ デモ証明書の生成時に使用する証明書構成ファイルが含まれます。
   demo.html ウェブサーバーモードで実行したときに run_server.sh スクリプトから利用できる HTML ファイル。
   cert_gen_demo.sh /app/digicert-pqc/demo/configs にある config ファイルを使用して、耐量子証明書チェーン全体を生成およびテストします。
「デモ証明書を生成する」を参照してください。
   run_client.sh 実行中の s_server using OpenSSL's s_client ユーティリティに接続して、証明書機能をテストします。
「基本モード:run_client.sh scriptを使用して接続します。
   run_server.sh OpenSSL's s_server ユーティリティを使用して基本ウェブサーバーを起動し、 /app/digicert-pqc/demo/certs にある証明書を読み取ります。
「デモサーバーを起動する」を参照してください。
 pqpki-openssl-1.0.2r/ コンパイルされた OpenSSL バージョン 1.0.2r - ISARA OpenSSL コネクタパッチを使用して修正済
resources/ 補助 PQC ツールキットリソースファイル。

デモ証明書を生成する

証明書のフィールド値のいずれかをカスタマイズするには、証明書構成ファイル (/app/digicert-pqc/demo/configs にあります) を修正します。

耐量子証明書チェーンを生成するには、cert_gen_demo.sh スクリプト (/app/digicert-pqc/demo にあります) を使用します。これを実行すると、以下のようになります。

  • /app/digicert-pqc/demo/certs ディレクトリのすべてのファイルが消去される。
  • 耐量子証明書チェーン全体(ルート、中間およびサーバー証明書を含む)が作成される。ファイルは /app/digicert-pqc/demo/certs に保存される。
  • 証明書チェーンは、レガシー暗号を使用して確認する。
  • 証明書チェーンは、耐量子暗号を使用して確認する。

デモ証明書を生成する前に、/app/digicert-pqc/demo ディレクトリにいるかを確認してください。

次に、スクリプトを実行します。

bash
cd /app/digicert-pqc/demo
./cert_gen_demo.sh

出力は以下のようになります。

bash
engine "IQREngine" set.
XMSS key pair has been generated:
engine "IQREngine" set.
DILITHIUM key pair has been generated:
engine "IQREngine" set.
RAINBOW key pair has been generated:
engine "IQREngine" set.
engine "IQREngine" set.
engine "IQREngine" set.
Generating a EC private key
writing new private key to '/app/digicert-pqc/demo/certs/ecdsa_without_xmss_catalyst_mixed_chain_root_private_key.pem'
-----
Signature ok
subject=/C=US/ST=Utah/L=Lehi/O=DigiCert, Inc./OU=DigiCert PQC/CN=DigiCert PQC Root
Getting Private key
engine "IQREngine" set.
Successfully created XMSS signature
Generating a EC private key
writing new private key to '/app/digicert-pqc/demo/certs/ecdsa_without_dilithium_catalyst_mixed_chain_intermediate_private_key.pem'
-----
engine "IQREngine" set.
Signature ok
subject=/C=US/ST=Utah/L=Lehi/O=DigiCert, Inc./OU=DigiCert PQC/CN=DigiCert PQC Test Intermediate CA
Getting CA Private Key
engine "IQREngine" set.
Successfully created XMSS signature
Generating a EC private key
writing new private key to '/app/digicert-pqc/demo/certs/ecdsa_without_rainbow_catalyst_mixed_chain_private_key.pem'
-----
engine "IQREngine" set.
Signature ok
subject=/C=US/ST=Utah/L=Lehi/O=DigiCert, Inc./OU=DigiCert PQC/CN=digicert.pqc
Getting CA Private Key
engine "IQREngine" set.
engine "IQREngine" set.
/app/digicert-pqc/demo/certs/rainbow_ecdsa_x509_catalyst_mixed_chain_server_certificate.pem: OK
engine "IQREngine" set.
2 : ok : /C=US/ST=Utah/L=Lehi/O=DigiCert, Inc./OU=DigiCert PQC/CN=DigiCert PQC Root
1 : ok : /C=US/ST=Utah/L=Lehi/O=DigiCert, Inc./OU=DigiCert PQC/CN=DigiCert PQC Test Intermediate CA
0 : ok : /C=US/ST=Utah/L=Lehi/O=DigiCert, Inc./OU=DigiCert PQC/CN=digicert.pqc
Success!!

デモサーバーを起動する

生成されたデモ証明書をテストするには、run_server.sh スクリプトを実行します。このスクリプトは、基本か、HTTP の2つのモードのいずれかで実行できます。

  • 基本モードについては、オプションの http 引数を省略します。
  • HTTP モードについては、オプションの http 引数を含めます。
モード コマンド 説明
基本 ./run_server.sh 接続を承認する OpenSSL s_server を OpenSSL s_client ユーティリティを使用して、起動します。
HTTP ./run_server.sh http ポート 443 上の HTTPS 接続を承認する OpenSSL s_server を起動します。

s_server を,サーバーを実行中の端末ウインドウで停止するには、CTRL+C を押します。

基本モードでサーバーを起動する

基本モードでデモサーバーを起動する前に、/app/digicert-pqc/demo ディレクトリにいて、デモ証明書を生成している ことを確認してください。

次に、スクリプトを実行します。

bash
./run_server.sh

出力は以下のようになります。

bash
engine "IQREngine" set.
Using default temp DH parameters
ACCEPT

これで、s_server ユーティリティが基本モードで実行され、 s_client から接続を承認することができます。実行中のデモに接続するには、「基本モード:run_client.sh scriptを使用して接続する」を参照してください。

HTTP モードでサーバーを起動する

HTTP モードでデモサーバーを起動する前に、/app/digicert-pqc/demo ディレクトリにいて、デモ証明書を生成している ことを確認してください。

続いて、スクリプトを実行し、 http 引数を含めます。

bash
./run_server.sh http

出力は以下のようになります。

bash
engine "IQREngine" set.
Using default temp DH parameters
ACCEPT

これで、s_server ユーティリティが HTTP モードで実行され、ポート 443 上の HTTPS から接続を承認することができます。実行中のデモサーバーに接続するには、「cURL を使用して接続する」 を参照してください。

実行中のデモサーバーに接続する

run_server.sh スクリプトを実行してデモサーバーを起動した後、接続の準備と、デモ証明書チェーンのテスト準備は完了です。

実行中のデモサーバーを使用した接続方法は、サーバーの起動に使用するモードによって異なります。

基本モード:run_client.sh script を使用して接続する

run_client.sh スクリプトは OpenSSL s_client ユーティリティを使用して、実行中の s_server に接続します。このスクリプトを実行する前に、s_server を起動したことを、基本モードで run_server.sh スクリプトを実行することで、確認してください。「基本モードでサーバーを起動する」 を参照してください。

端末ウインドウの1つで有効 s_server 実行中の基本モードで、新しい端末ウインドウを開きます。新しいウインドウで、 docker-compose exec で別のバッシュセッションを起動します。

bash
cd [path/to/dir/]digicert-pqc-docker
docker-compose exec pqc /bin/bash

デモディレクトリに移動して、run_client.sh スクリプトを実行します。

bash
cd /app/digicert-pqc/demo
./run_client.sh

出力は以下のようになります。

bash
engine "IQREngine" set.
CONNECTED(00000003)
depth=1 C = US, ST = Utah, L = Lehi, O = "DigiCert, Inc.", OU = DigiCert PQC, CN = DigiCert PQC Root
verify return:1
depth=0 C = US, ST = Utah, L = Lehi, O = "DigiCert, Inc.", OU = DigiCert PQC, CN = DigiCert PQC Test Intermediate CA
verify return:1
---
Certificate chain
 0 s:/C=US/ST=Utah/L=Lehi/O=DigiCert, Inc./OU=DigiCert PQC/CN=DigiCert PQC Test Intermediate CA
   i:/C=US/ST=Utah/L=Lehi/O=DigiCert, Inc./OU=DigiCert PQC/CN=DigiCert PQC Root
-----BEGIN CERTIFICATE-----
[...]
-----END CERTIFICATE-----
---
Server certificate
subject=/C=US/ST=Utah/L=Lehi/O=DigiCert, Inc./OU=DigiCert PQC/CN=DigiCert PQC Test Intermediate CA
issuer=/C=US/ST=Utah/L=Lehi/O=DigiCert, Inc./OU=DigiCert PQC/CN=DigiCert PQC Root
---
No client certificate CA names sent
Peer signing digest: SHA512
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 9868 bytes and written 2331 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-NHDH-DILM-AES256-GCM-SHA384
Server public key is 521 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-NHDH-DILM-AES256-GCM-SHA384
    Session-ID: {{Session-ID}}
    Session-ID-ctx: 
    Master-Key: {{Master-Key}}
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 7200 (seconds)
    TLS session ticket:
    [...]


    Start Time: 1563994600
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
---

また、有効な s_server 実行中の他の端末ウインドウでは、以下のような出力になります。

bash
read from 0x5581e0750b80 [0x5581e07656f3] (5 bytes => 5 (0x5))
0000 - 16 03 01 00 96                                    .....
read from 0x5581e0750b80 [0x5581e07656f8] (150 bytes => 150 (0x96))
0000 - 01 00 00 92 03 03 d9 c0-5a 73 35 d0 4e f2 31 f6   ........Zs5.N.1.
[...]
write to 0x5581e0750b80 [0x5581e076e100] (71 bytes => 71 (0x47))
0000 - 16 03 03 00 42 02 00 00-3e 03 03 c2 3b df 2f 01   ....B...>...;./.
[...]
write to 0x5581e0750b80 [0x5581e0769c43] (4953 bytes => 4953 (0x1359))
0000 - 16 03 03 13 54 0b 00 13-50 00 13 4d 00 13 4a 30   ....T...P..M..J0
[...]
write to 0x5581e0750b80 [0x5581e0769c43] (4609 bytes => 4609 (0x1201))
0000 - 16 03 03 11 fc 0c 00 11-f8 03 00 17 41 04 0d 97   ............A...
[...]
write to 0x5581e0750b80 [0x5581e076e100] (9 bytes => 9 (0x9))
0000 - 16 03 03 00 04 0e 00 00-00                        .........
read from 0x5581e0750b80 [0x5581e07656f3] (5 bytes => 5 (0x5))
0000 - 16 03 03 08 48                                    ....H
read from 0x5581e0750b80 [0x5581e07656f8] (2120 bytes => 2120 (0x848))
0000 - 10 00 08 44 41 04 29 0a-07 84 0c f3 a4 e4 3e d1   ...DA.).......>.
[...]
read from 0x5581e0750b80 [0x5581e07656f3] (5 bytes => 5 (0x5))
0000 - 14 03 03 00 01                                    .....
read from 0x5581e0750b80 [0x5581e07656f8] (1 bytes => 1 (0x1))
0000 - 01                                                .
read from 0x5581e0750b80 [0x5581e07656f3] (5 bytes => 5 (0x5))
0000 - 16 03 03 00 28                                    ....(
read from 0x5581e0750b80 [0x5581e07656f8] (40 bytes => 40 (0x28))
0000 - e1 d7 30 8b 12 ef d1 dc-31 90 97 d0 0e 54 9c aa   ..0.....1....T..
[...]
write to 0x5581e0750b80 [0x5581e076e100] (175 bytes => 175 (0xAF))
0000 - 16 03 03 00 aa 04 00 00-a6 00 00 1c 20 00 a0 02   ............ ...
[...]
write to 0x5581e0750b80 [0x5581e076e100] (6 bytes => 6 (0x6))
0000 - 14 03 03 00 01 01                                 ......
write to 0x5581e0750b80 [0x5581e076e100] (45 bytes => 45 (0x2D))
0000 - 16 03 03 00 28 d0 99 97-94 6d a1 5c f8 b0 c0 65   ....(....m.\...e
[...]
-----BEGIN SSL SESSION PARAMETERS-----
[...]
-----END SSL SESSION PARAMETERS-----
Shared ciphers:ECDHE-NHDH-DILM-AES256-GCM-SHA384:ECDHE-NHDH-SIDH-DILM-AES256-GCM-SHA384
Signature Algorithms: RSA+SHA512:DSA+SHA512:ECDSA+SHA512:RSA+SHA384:DSA+SHA384:ECDSA+SHA384:RSA+SHA256:DSA+SHA256:ECDSA+SHA256:RSA+SHA224:DSA+SHA224:ECDSA+SHA224:RSA+SHA1:DSA+SHA1:ECDSA+SHA1:HSS+SHA512:XMSS+SHA512:XMSSmt+SHA512:DILITHIUM+SHA512:DILITHIUM+SHA512:0xE0+SHA512
Shared Signature Algorithms: RSA+SHA512:DSA+SHA512:ECDSA+SHA512:RSA+SHA384:DSA+SHA384:ECDSA+SHA384:RSA+SHA256:DSA+SHA256:ECDSA+SHA256:RSA+SHA224:DSA+SHA224:ECDSA+SHA224:RSA+SHA1:DSA+SHA1:ECDSA+SHA1:HSS+SHA512:DILITHIUM+SHA512:DILITHIUM+SHA512
Supported Elliptic Curve Point Formats: uncompressed:ansiX962_compressed_prime:ansiX962_compressed_char2
Supported Elliptic Curves: P-256:P-521:brainpoolP512r1:brainpoolP384r1:P-384:brainpoolP256r1:secp256k1:B-571:K-571:K-409:B-409:K-283:B-283:0xFE01
Shared Elliptic curves: P-256:P-521:brainpoolP512r1:brainpoolP384r1:P-384:brainpoolP256r1:secp256k1:B-571:K-571:K-409:B-409:K-283:B-283:UNDEF
CIPHER is ECDHE-NHDH-DILM-AES256-GCM-SHA384
Secure Renegotiation IS supported

HTTP モード:cURL を使用して接続する

cURL を使用して、実行中の s_server に接続するには、,HTTP モードで s_server を起動したかを確認します。「HTTP モードでサーバーを起動する」 を参照してください。

お使いの端末ウインドウの1つで有効な デモサーバーを HTTP モードで実行している 場合は、はじめに、新しい端末ウインドウを開区必要があります。新しいウインドウで、 docker-compose exec で別のバッシュセッションを起動します。

bash
cd [path/to/dir/]digicert-pqc-docker
docker-compose exec pqc /bin/bash

次に、cURL を使用して、実行中のサーバーに接続します。お客様が生成したデモ証明書は自己署名され、案トラスト証明書警告が発せられます。これらの警告を無視するには、 -k スイッチを含める必要があります。

bash
curl -k https://digicert.pqc/demo.html

出力は以下のようになります。

bash
<html>
<head></head>
<body>
  <h1>Hello world! PQC FUTURE IS HERE!</h1>
</body>
</html>

また、有効な s_server 実行中の他の端末ウインドウでは、以下のような出力になります。

bash
read from 0x556d44ced1e0 [0x556d44cf61a3] (5 bytes => 5 (0x5))
0000 - 16 03 01 02 00                                    .....
read from 0x556d44ced1e0 [0x556d44cf61a8] (512 bytes => 512 (0x200))
0000 - 01 00 01 fc 03 03 a3 d2-a7 5e 12 44 88 93 78 fd   .........^.D..x.
[...]
write to 0x556d44ced1e0 [0x556d44d05120] (94 bytes => 94 (0x5E))
0000 - 16 03 03 00 59 02 00 00-55 03 03 36 a7 a4 2d 57   ....Y...U..6..-W
[...]
write to 0x556d44ced1e0 [0x556d44cffc53] (4954 bytes => 4954 (0x135A))
0000 - 16 03 03 13 55 0b 00 13-51 00 13 4e 00 13 4b 30   ....U...Q..N..K0
[...]
write to 0x556d44ced1e0 [0x556d44d05120] (220 bytes => 220 (0xDC))
0000 - 16 03 03 00 d7 0c 00 00-d3 03 00 17 41 04 5a 06   ............A.Z.
[...]
write to 0x556d44ced1e0 [0x556d44d05120] (9 bytes => 9 (0x9))
0000 - 16 03 03 00 04 0e 00 00-00                        .........
read from 0x556d44ced1e0 [0x556d44cf61a3] (5 bytes => 5 (0x5))
0000 - 16 03 03 00 46                                    ....F
read from 0x556d44ced1e0 [0x556d44cf61a8] (70 bytes => 70 (0x46))
0000 - 10 00 00 42 41 04 c3 ce-7a a8 53 76 28 fc 55 c5   ...BA...z.Sv(.U.
[...]
0040 - 6b c7 1a 5e f5 0e                                 k..^..
read from 0x556d44ced1e0 [0x556d44cf61a3] (5 bytes => 5 (0x5))
0000 - 14 03 03 00 01                                    .....
read from 0x556d44ced1e0 [0x556d44cf61a8] (1 bytes => 1 (0x1))
0000 - 01                                                .
read from 0x556d44ced1e0 [0x556d44cf61a3] (5 bytes => 5 (0x5))
0000 - 16 03 03 00 28                                    ....(
read from 0x556d44ced1e0 [0x556d44cf61a8] (40 bytes => 40 (0x28))
0000 - 77 07 27 75 71 54 a9 bc-89 2f 69 df 45 6a 6c d8   w.'uqT.../i.Ejl.
[...]
write to 0x556d44ced1e0 [0x556d44d05120] (6 bytes => 6 (0x6))
0000 - 14 03 03 00 01 01                                 ......
write to 0x556d44ced1e0 [0x556d44d05120] (45 bytes => 45 (0x2D))
0000 - 16 03 03 00 28 78 f8 92-c1 cd d0 73 6b 72 6e 4c   ....(x.....skrnL
[...]
read from 0x556d44ced1e0 [0x556d44cf61a3] (5 bytes => 5 (0x5))
0000 - 17 03 03 00 6d                                    ....m
read from 0x556d44ced1e0 [0x556d44cf61a8] (109 bytes => 109 (0x6D))
0000 - 77 07 27 75 71 54 a9 bd-0c 8f e3 9c f3 90 35 a1   w.'uqT........5.
[...]
FILE:demo.html
write to 0x556d44ced1e0 [0x556d44cffc53] (117 bytes => 117 (0x75))
0000 - 17 03 03 00 70 78 f8 92-c1 cd d0 73 6c 14 de 14   ....px.....sl...
[...]
ACCEPT

おめでとうございます!PQC Docker 化ツールキット環境のセットアップおよびテストが正常に完了しました。証明書の作成および耐量子接続の設定の実験の実施は自由に行ってください。