2.2. OpenSSL 中的 post-quantum 加密算法
您可以使用 OpenSSL TLS 工具包使用 post-quantum 算法生成密钥和证书。这有助于增强新兴威胁的安全性,同时保持与传统算法的兼容性。
从 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. 将 ML-DSA 用于 OpenSSL 中的密钥
$ 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. 将 ML-DSA 用于 OpenSSL 中的证书
由于当前没有公共证书颁发机构(CA)支持 post-quantum 签名,因此只能使用带有 ML-DSA 签名的本地 CA 或自签名证书。例如:
$ 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 服务器和客户端可以建立 post-quantum 连接,以及仅使用传统算法的连接。
$ 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. 建立只使用非 post-quantum 加密算法的连接
$ 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)和 post-quantum 证书。服务器会自动和透明地选择客户端首选和支持的证书。它将 post-quantum 用于新客户端,而传统的客户端则用于旧客户端。
如需更多信息,请参阅系统中的 openssl (1), openssl-genpkey (1), openssl-pkey (1), openssl-dgst (1), 和 openssl-verify (1) 手册页。