2.2. OpenSSL の耐量子計算機暗号アルゴリズム
OpenSSL TLS ツールキットを使用すると、耐量子計算機アルゴリズムを使用して鍵と証明書を生成できます。これにより、従来のアルゴリズムとの互換性を維持しながら、新たな脅威に対するセキュリティーを強化できます。
RHEL 10.1 以降では、OpenSSL を使用して、鍵の生成、メッセージの署名、署名の検証、ML-DSA 耐量子計算機アルゴリズムを使用した X.509 証明書の作成を行うことができます。
OpenSSL 3.5 以降からは、TLS 1.3 ハンドシェイクで、ハイブリッド型の ML-KEM (Module-Lattice-Based Key-Encapsulation Mechanism) 方式が優先的に使用されます。OpenSSL には、従来のアルゴリズムと ML-KEM の両方を使用した鍵を組み込んでいます。ML-KEM を使用すると、TLS 接続の開始にわずかな遅延が生じます。しかし、この遅延はハンドシェイク後のパフォーマンスには影響しません。その後の通信ではより効率的な対称鍵が使用されるためです。
例2.1 OpenSSL の鍵に対する ML-DSA の使用
$ openssl genpkey -algorithm mldsa65 -out <mldsa-privatekey.pem>- ML-DSA-65 アルゴリズムを使用して秘密鍵を作成します。
$ openssl pkey -in <mldsa-privatekey.pem> -pubout -out <mldsa-publickey.pem>- ML-DSA-65 で暗号化された秘密鍵に基づいて公開鍵を作成します。
$ openssl dgst -sign <mldsa-privatekey.pem> -out <signature_message>- 秘密鍵を使用してメッセージに署名します。
$ openssl dgst -verify <mldsa-publickey.pem> -signature <signature_message>- 公開鍵を使用して ML-DSA-65 署名を検証します。
例2.2 OpenSSL の証明書に対する ML-DSA の使用
現在、耐量子計算機署名をサポートする公開認証局 (CA) はないため、使用できるのはローカル CA または ML-DSA 署名を使用した自己署名証明書のみです。以下に例を示します。
$ openssl req \
-x509 \
-newkey mldsa65 \
-keyout <localhost-mldsa.key> \
-subj /CN=<localhost> \
-addext subjectAltName=DNS:<localhost> \
-days <30> \
-nodes \
-out <localhost-mldsa.crt>
例2.3 PQC 鍵交換と PQC 証明書による接続の確立
OpenSSL サーバーとクライアントは、量子攻撃に耐える接続と、従来のアルゴリズムのみを使用する接続を確立できます。
$ openssl s_server \
-cert <localhost-mldsa.crt> -key <localhost-mldsa.key> \
-dcert <localhost-rsa.crt> -dkey <localhost-rsa.key> >/dev/null &
$ openssl s_client \
-connect <localhost:4433> \
-CAfile <localhost-mldsa.crt> </dev/null \
|& grep -E '(Peer signature type|Negotiated TLS1.3 group)'
Peer signature type: mldsa65
Negotiated TLS1.3 group: X25519MLKEM768
例2.4 耐量子計算機暗号アルゴリズムではないアルゴリズムのみを使用する接続の確立
$ openssl s_client \
-connect <localhost:4433> \
-CAfile <localhost-rsa.crt> \
-sigalgs 'rsa_pss_pss_sha256:rsa_pss_rsae_sha256' \
-groups 'X25519:secp256r1:X448:secp521r1:secp384r1' </dev/null \
|& grep -E '(Peer signature type|Server Temp Key)'
Peer signature type: RSA-PSS
Server Temp Key: X25519, 253 bits
従来の証明書 (RSA、ECDSA、EdDSA) と耐量子計算機証明書を同時に使用するようにサーバーを設定することもできます。サーバーは、クライアントが優先およびサポートする証明書 (新しいクライアントの場合は耐量子計算機証明書、従来のクライアントの場合は従来の証明書) を自動的かつ透過的に選択します。
詳細は、システム上の openssl(1)、openssl-genpkey(1)、openssl-pkey(1)、openssl-dgst(1)、および openssl-verify(1) man ページを参照してください。