採用情報 お問い合わせ

BLOG

研究開発ブログ

AlmaLinux 10 で PQC(耐量子計算機暗号)をお試し(その2)

― ハイブリッド鍵交換 (X25519MLKEM768) を Apache でお試し ―

Apache httpd のハイブリッド鍵交換 (X25519MLKEM768) 対応

今回「その2」では、ハイブリッド鍵交換 (X25519MLKEM768) を Apache で試します。
ちなみに、X25519MLKEM768 は、古典的暗号(X25519)と新しい量子耐性暗号(ML-KEM768: Module-Lattice Key Encapsulation Mechanism 768)を組み合わせた鍵交換方式で、前者の信頼性と、後者による「Harvest Now, Decrypt Later(HNDL)」攻撃への対応という、両者の強みが組み合わされたものであり、既に Google Chrome ブラウザ等が対応済みです。

まず、ベースの環境は「その1」に記載したとおり、AlmaLinux 10 に crypto-policies-pq-preview パッケージをインストールし、PQC を試すためにサブポリシー TEST-PQ を設定した環境です。
ここに Apache httpd と TLS 用のモジュール mod_ssl をインストールします。

# dnf -y install httpd mod_ssl

設定ファイル ssl.conf(/etc/httpd/conf.d/ssl.conf)を編集し、主要な設定としては以下としました
(一部、■■■で伏せています)。

Listen 443 https
<VirtualHost _default_:443> ServerName ■■■.■■■.cybertrust.co.jp SSLEngine on SSLHonorCipherOrder on SSLCipherSuite PROFILE=SYSTEM SSLProxyCipherSuite PROFILE=SYSTEM SSLCertificateFile /etc/pki/tls/certs/localhost.crt SSLCertificateKeyFile /etc/pki/tls/private/localhost.key </VirtualHost>

今回は、「鍵交換」についてはハイブリッド鍵交換 (X25519MLKEM768) を試す一方、「認証」は従来のアルゴリズムを使えばよいので、他の例に倣って、ECDSA を使った自己署名の TLS サーバー証明書を作ります。
まずは鍵生成を行います。

# cd /etc/pki/tls

# openssl genpkey -out private/localhost.key \
-algorithm EC -pkeyopt ec_paramgen_curve:P-256

# cat private/localhost.key
-----BEGIN PRIVATE KEY-----
MIGHA・・・ (略) ・・・oyfYhwgTEU2Oh
-----END PRIVATE KEY-----

次に証明書を作成します。

# openssl req -new -x509 -days 365 \
-key private/localhost.key -out certs/localhost.crt \
-subj "/C=JP/L=Tokyo/O=Cybertrust Japan Co Ltd/CN=■■■.■■■.cybertrust.co.jp" \
-addext "subjectAltName = DNS:■■■.■■■.cybertrust.co.jp" \
-addext "basicConstraints = critical,CA:false" 

# cat certs/localhost.crt
-----BEGIN CERTIFICATE-----
MIICbDCCAhOgAwIBAgIUTrstUf2JdoVHeKqAHAWYMeJ+4UgwCgYIKoZIzj0EAwIw
cjELMAkGA1UEBhMCSlAxDjAMBgNVBAcMBVRva3lvMSAwHgYDVQQKDBdDeWJlcnRy
(略)
LDAqgih3d3cucHEtYWxtYWxpbnV4LXRlc3QwMS5jeWJlcnRydXN0LmNvLmpwMAwG
A1UdEwEB/wQCMAAwCgYIKoZIzj0EAwIDRwAwRAIgDpslkxxSq4WeiEjSLZzM2hIe
CctCSWEDx/SR3vygWi8CIB3gKnlo5TukABIHV4fGtfRfu9Q5sL9zilB65ntMO530
-----END CERTIFICATE-----

上記で、他では記載のない「-addext "basicConstraints = critical,CA:false" 」を追加していますが、これを追加しないで証明書を作成したところ、証明書内の Basic Constraints(基本制約)拡張が以下のように「CA:TRUE」となっており、TLS サーバー証明書ではなく、認証局証明書を示すことから、これを追加しています。

X509v3 Basic Constraints: critical
   CA:TRUE

作成された証明書の内容は次のようになっており、基本制約拡張において CA:FALSE になっていることが確認できます(一部、■■■で伏せています)。

# openssl x509 -text -noout -in certs/localhost.crt
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            4e:bb:  (略)  :e1:48
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: C=JP, L=Tokyo, O=Cybertrust Japan Co Ltd, CN=■■■.■■■.cybertrust.co.jp
        Validity
            Not Before: Sep  (略)  2025 GMT
            Not After : Sep  (略)  2026 GMT
        Subject: C=JP, L=Tokyo, O=Cybertrust Japan Co Ltd, CN=■■■.■■■.cybertrust.co.jp
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:80:7c:9d:4a:8a:1c:a9:16:0b:f6:41:35:5b:c0:
                            (略)  
                    04:c4:53:63:a1
                ASN1 OID: prime256v1
                NIST CURVE: P-256
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                DD:E3:  (略) :BC:27
            X509v3 Authority Key Identifier:
                DD:E3:  (略) :BC:27
            X509v3 Subject Alternative Name:
                DNS:■■■.■■■.cybertrust.co.jp
            X509v3 Basic Constraints: critical
                CA:FALSE
    Signature Algorithm: ecdsa-with-SHA256
    Signature Value:
        30:44:02:20:0e:9b:25:93:1c:52:ab:85:9e:88:48:d2:2d:9c:
                          (略)  
        5f:bb:d4:39:b0:bf:73:8a:50:7a:e6:7b:4c:3b:9d:f4

準備ができたので、httpd を起動し、ステータスも確認。

# systemctl start httpd

# systemctl status httpd
httpd.service - The Apache HTTP Server
     Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; preset: disabled)
     Active:active (running)since ・・・ (略) 

ハイブリッド鍵交換 (X25519MLKEM768) を扱えるブラウザ(今回は Windows PC 上の Google Chrome を使用)で上記 AlmaLinux 10 上の Apache に接続して確認。

図の右下部分で赤枠で囲ったとおり、鍵交換が「X25519MLKEM768」となっています。
ということで、ハイブリッド鍵交換を Apache で試すことができました。

「その2」はここまでとなります。
次回「その3」では、ハイブリッド鍵交換 (X25519MLKEM768) を nginx で試します。

関連 Web サイト
お問い合わせ

IT 環境全体が PQC レディーになるにはまだ多少時間を要するものと想像しますが、その中でご質問・相談事項などございましたら、お気軽にお問い合わせください(問合せ先:pqctrial@cybertrust.co.jp)。

この記事の著者
 サイバートラスト R&D センター
サイバートラスト R&D センター

「R&D センター」は、2022 年 4 月 1 日に立ち上げられた研究開発部門です。
サイバートラストは、お客様のサービスの信頼性を支えるプラットフォーマーとして、先々のプラットフォームや社会制度、他がどのように変化するのかを考えています。
さまざまな IoT 機器が普及し、OSS や AI やブロックチェーンが活用され、量子コンピュータが発達する一方で、それらによる新たなセキュリティリスクも生じると想像される未来においても、引き続き、安心・安全な社会を実現するため、サイバートラストが果たす役割を含め、研究開発を進めています。

* AlmaLinux は、The AlmaLinux OS Foundation の商標です。
* Linux は、Linus Torvalds 氏の日本およびその他の国における登録商標または商標です。
* Red Hat、Red Hat Enterprise Linux は、米国およびその他の国における Red Hat, Inc. およびその子会社の商標または登録商標です。
* その他、記載されている会社名、製品名、サービス名は、当社または各社、各団体の商標もしくは登録商標です。
* サイバートラストは、AlmaLinux OS Foundation に日本企業初のプラチナスポンサーとして参画する AlmaLinux OS の公式ディストリビューターですが、本ブログは当社の R&D チームで試行した結果の共有であり、AlmaLinux OS に関わる公式サポート情報ではなく、また、AlmaLinux OS Foundation の公式見解でもありません。併せて、本ブログはテクノロジープレビューパッケージを試したものであるため、機能的に完成していない可能性があり、本番用途への展開には適しません。

CentOS 7 延長サポートサービス
デジタルトランスフォーメーションのための電子認証基盤 iTrust
iTrust SSL/TLS サーバー証明書