Oracle Database 26aiでは、PQC(Post-Quantum Cryptography)、日本語ではポスト量子暗号に対応した機能が追加されています。これは量子コンピュータによって将来起こるだろうと予測されている暗号化アルゴリズムに対するリスクに対して、今のうちから準備を進める必要性を示唆しているように思います。
下記のOracle公式ブログでも紹介されていますが、ここではもう少しかみ砕いてその必要性と26aiの新機能について紹介していきたいと思います。
Securing Oracle AI Database 26ai for the Quantum Era
Preparing for Post Quantum Cryptography
量子コンピュータによって暗号データが抱えるリスクとは何か。まずは、以下のスライドをご覧ください。現在広く使われている暗号化アルゴリズムが量子コンピュータの高速演算によって、将来破られるのではないかという懸念が高まっています。たとえ今は量子コンピュータが暗号解読を突破できるレベルには到達していなくても、早くて5年~20年後には一気に解読できるようになるのではないか、その来るべき日のために大量にデータを収集しておくハーベスト攻撃という脅威も指摘されています。
Oracle Databaseの場合、クライアントとデータベース間の暗号化通信、TDEによる格納データの暗号化の機能はこの潜在的なリスクを抱えています。

この量子コンピュータの暗号解読リスクには、ポスト量子暗号 (PQC:Post-Quantum Cryptography)という次世代の暗号アルゴリズムを用いて対抗することが可能です。
以下のスライドのように、暗号化には共通鍵暗号方式と公開鍵暗号方式の2種類があり、AESの暗号アルゴリズムを用いる共通暗号鍵の場合は、鍵長を256bitまで大きくすれば量子コンピュータに対する暗号強度を確保することができると考えられています。
一方、公開鍵暗号方式の場合は、鍵長では不十分で、鍵交換方式をML-KEMというポスト量子暗号に対応した鍵交換アルゴリズムを用いて暗号強度を高める必要があります。
Oracle ClientとDatabaseのネットワーク暗号化はこれまでTLS1.2でしたが、26aiではTLS1.3をサポートし、鍵交換方式にML-KEMを明示的に指定することで、ポスト量子暗号(PQC)を有効にすることができます。

ポスト量子暗号について詳しくは、CRYPTREC暗号技術ガイドラインやNISTのPQCのドキュメント(FIPS 203, 204, 205)、もしくは分かりやすく解説して下さっている専門家やセキュリティベンダーの記事が参考になります。
Oracle Database 26aiでのポスト量子暗号
では実際に、Oracle Database 26aiでサポートされたポスト量子暗号を使用する手順を紹介していきます。設定手順は、拍子抜けするほど簡単でsqlnet.oraにTLS_KEY_EXCHANGE_GROUPS=ml-kemを記述するだけです。ただし、Oracle DatabaseがTLS接続できるようになっている必要があります。ネイティブ・ネットワーク暗号ではなく、TLSによるネットワーク暗号なので注意して下さい。
※ネイティブ・ネットワーク暗号は、Diffie-Hellmanキー交換アルゴリズムなので、この量子コンピュータのリスクを同様に持っています。
Oracle Databaseが26aiかつTLSが未設定という場合は、以下の記事を参考にTLSの設定行って下さい。記事では、SSL_VERSION=1.2となっていますが、SSL_VERSION=1.3を指定します。もしくは、SSL_VERSION自体を記述しなくてもOK。また、Oracle Databaseに接続するInstant Clientのバージョンは、26aiを使用する。
Oracle Databaseの外部認証 - Oracle DatabaseのTLS接続 -
- まず、Oracle ClientからDatabaseに接続し、TLSが1.3になっていることを確認する
SQL> select sys_context('USERENV','TLS_VERSION');
SYS_CONTEXT('USERENV','TLS_VERSION')
--------------------------------------------------------------------------------
TLS 1.3
- Oracle Databaseのsqlnet.oraに以下の一行を追加する
TLS_KEY_EXCHANGE_GROUPS = ml-kem
設定は以上です。変更後、データベースに接続しても特に何も変化がないとは思いますが、ml-kemのポスト量子暗号が使用されています。サーバー側だけにTLS_KEY_EXCHANGE_GROUPSを追加したのは、サーバーに接続するすべてのクライアントにml-kemを強制させるためです。
- 試しにクライアントのsqlnet.oraに以下のに以下の一行を追加する
TLS_KEY_EXCHANGE_GROUPS = ec
- 今度はOracle Databaseに接続できない。クライアントは、ec (従来のECDHE:楕円曲線暗号による鍵交換)のみを要求、サーバーはml-kemのみを許可しており、不一致が発生しているため
$ sqlplus xxxx/xxxx@xxxxx
SQL*Plus: Release 23.26.0.0.0 - Production on Wed Jan 14 14:17:53 2026
Version 23.26.0.0.0
Copyright (c) 1982, 2025, Oracle. All rights reserved.
ERROR:
ORA-28860: Fatal SSL error
Help: https://docs.oracle.com/error-help/db/ora-28860/
サーバー、クライアントのそれぞれにTLS_KEY_EXCHANGE_GROUPSを指定した場合の動作についてはドキュメントを参照して下さい。
また、共通鍵暗号については、TDEで暗号化されている表領域がAES128またはAES196を使用している場合、ALTER TABLESPACE ... USING 'AES256' REKEYによってAES256へ再暗号化することが可能です。
もうひとつのサポートされているポスト量子暗号であるML-DSAは、認証およびデータ整合性に使用するデジタル署名アルゴリズムに使用されるもので、orapkiでの自己署名ML-DSAの作成、ML-DSA認証の読取り、およびJDK 24以降を使用したOracleウォレットへのML-DSA証明書の追加がサポートされています。