TLSにおける量子安全暗号
耐量子対応 TLS 接続を使用して、以下に要求を送信できます。 IBM® Key Protect for IBM Cloud® サービス・エンドポイント。
耐量子暗号化とは
耐量子暗号化 (別名、ポスト量子暗号化) は、NIST で審査されている新世代の公開鍵暗号方式です。 この新しい量子暗号アルゴリズムは、大型量子コンピューターでも解けない、最新の研究をベースにした難解な計算問題に基づいています。
このような量子暗号アルゴリズムを TLS 通信で使用すると、クライアントとサーバーの間で公開鍵を交換するときのセキュリティーが、現在の RSA および ECC のアルゴリズムよりも高いセキュリティー・レベルになることが期待されます。 ただし、NIST がこのアルゴリズムをまだ標準化していないため、Key Protect では、標準化されるまでの間、転送中のデータを保護するために、耐量子アルゴリズムと現在の ECC アルゴリズムの両方を組み合わせたハイブリッド方式を採用しています。
耐量子 TLS が重要である理由
量子コンピューターが進化し、進歩し続けるにつれて、大規模な量子コンピューターは、次のようなことを可能にするだろう。 を実行できるようになるだろう。 「SHOR」アルゴリズム 現在のTLS通信アルゴリズム(RSA/ECC)を数分で破ることができる。 数分で 現在はまだ大型量子コンピューターは利用可能ではありませんが、転送中の TLS データが傍受されて保管されていたとすると、このような大型量子コンピューターが利用可能になったときに、データが解読されるおそれがあります。 データの寿命は長いので、Key Protect で耐量子暗号アルゴリズムをサポートして TLS 通信を保護することが重要です。
転送中のデータの回復力を維持するには、 Key Protect は、鍵交換プロセス中にデータの安全性を確保するために、耐量子対応 TLS 接続を使用する機能が導入されました。
耐量子暗号化の考慮事項
耐量子対応の Key Protect サービス・エンドポイントを介して Key Protect に要求を送信するようにサービスを設定する前に、次の考慮事項に留意してください。
-
米国立標準技術研究所(NIST)は、量子安全アルゴリズムの標準化を進めている。 NISTは現在、量子安全暗号の候補を評価している。 標準化プロセスを完了するのは2023年以降になる見込みだ。 2023年以降になる見込みだ。Key Protectは以下のアルゴリズムを使用しています。 Kyberアルゴリズムを使用しています、 これは評価中の第3ラウンド候補の1つです。 Kyber アルゴリズムが耐量子でないことが NIST の調査で判明したとしても、ハイブリッド・モードで Kyber アルゴリズムを使用していれば、従来の TLS アルゴリズムによって鍵交換メカニズムは保護されます。
-
パフォーマンスが、従来の鍵アルゴリズムとは異なる可能性があります。 耐量子アルゴリズムで使用される鍵のサイズは、従来の公開鍵アルゴリズムより大きいので、ネットワーク帯域幅の使用量が増えます。 また、耐量子アルゴリズムのパフォーマンスは、ネットワークの特性、CPU 処理速度、および API 呼び出し率の影響も受ける可能性があります。
-
耐量子 TLS は、転送中のデータのみを保護し、保存データは保護しません。 以下で使用される耐量子アルゴリズムは (Key Protect) は、データが Key Protect サービス・エンドポイントに移動するときにデータが侵害されるのを防ぎます。 インポートされたルート鍵 (関連するペイロードを含む) は、TLS セッション鍵で暗号化されます。 保存データの暗号化には対称鍵が使用されます。AES 256 対称鍵は、大型量子コンピューターによる攻撃に対しても安全です。
-
Key Protect は、Linux プラットフォームでのみ耐量子 TLS をサポートします。 将来的には、他のオペレーティング・システムでも Key Protect が耐量子 TLS 接続をサポートするようになる予定です。
-
耐量子 TLS は、Key Protect の Software Development Kit (SDK) でのみサポートされます。 将来的には、耐量子 TLS サポートが Key Protect コマンド・ライン・インターフェース (CLI) に追加される予定です。 未来のものです 以下へのアクセスの詳細については (Key Protect SDK)、SDK のセットアップを参照してくださ。
Key Protect での耐量子 TLS の使用
以下に要求を送信するときに、ハイブリッドと非ハイブリッドの耐量子 TLS 接続モードを選択できます。 Key Protect.
耐量子モードとハイブリッド・モード
Key Protect は、TLS 接続時に鍵を保護するモードとして、耐量子モードとハイブリッド・モードの 2 つをサポートしています。
-
ハイブリッド・モード: ハイブリッド・モードでは、転送中のデータを保護するために、耐量子アルゴリズムと従来の鍵交換アルゴリズムの組み合わせを使用します。 このモードを使用して要求を行うと、従来の楕円アルゴリズムと耐量子アルゴリズムが鍵交換メカニズムで使用され、データが以下に到達するときに暗号的に保護されるようになります。 Key Protect サービス。
ハイブリッド・モードでは、以下のパラメーター・セット (鍵サイズ) のハイブリッド Kyber アルゴリズムがサポートされます。
p256_kyber512
: p_256 曲線を使用した ECDH と kyber512 の組み合わせです。 これは L1 セキュリティーを提供します。p384_kyber768
: p_384 曲線を使用した ECDH と kyber768 の組み合わせです。 これは L3 セキュリティーを提供します。p521_kyber1024
: p_521 曲線を使用した ECDH と kyber1024 の組み合わせです。 これは L5 セキュリティーを提供します。
ハイブリッド・アルゴリズムは、Open Quantum Safe (OQS) プロジェクト・コミュニティーからのガイダンスに基づいて使用されます。 プロジェクト・コミュニティー。 アルゴリズムとそれに関連する 鍵のサイズについては ポスト量子鍵交換とハイブリッド鍵交換のプロトタイピング。
-
耐量子モード: 耐量子モードでは、転送中のデータを保護するために耐量子アルゴリズムが使用されます。 このモードを使用して要求を行うと、耐量子アルゴリズムが鍵交換メカニズムで使用され、データが以下に到達するときに暗号的に保護されるようになります。 Key Protect サービス。
耐量子モードでは、以下のパラメーター・セット (鍵サイズ) の Kyber アルゴリズムがサポートされます。
kyber512
kyber768
kyber1024
Kyber アルゴリズムは、以下の推奨に基づいて使用されます。 IBM Cloud. アルゴリズムとそれに関連するキー・サイズの詳細については 関連するキー・サイズについては CRYSTALS-Kyberを参照。
耐量子対応エンドポイント
IBM® Key Protect for IBM Cloud® では、US-South
と EU-GB
の 2 つのリージョンに、耐量子対応エンドポイントが用意されています。 以下の表を参照して、IBM® Key Protect for IBM Cloud® サービスに要求を送信するときに使用すべき耐量子対応エンドポイントを確認してください。
リージョン | パブリック・エンドポイント |
---|---|
ダラス | qsc.us-south.kms.cloud.ibm.com |
ロンドン | qsc.eu-gb.kms.cloud.ibm.com |
フランクフルト | qsc.eu-de.kms.cloud.ibm.com |
リージョン | プライベート・エンドポイント |
---|---|
ダラス | private-qsc.us-south.kms.cloud.ibm.com |
ロンドン | private-qsc.eu-gb.kms.cloud.ibm.com |
フランクフルト | private-qsc.eu-de.kms.cloud.ibm.com |
従来の Key Protect サービス・エンドポイントは、耐量子に対応していません。
SDK による Key Protect での耐量子 TLS の構成
前提条件
SDK を使用できるようにアプリケーションをセットアップする前に、以下の手順を実行します。
-
ダウンロード Open Quantum Safe Software Stack(OQSSA)スクリプト。 このスクリプトは、必要なすべての依存関係 (
liboqs
、openssl
、およびlibcurl
) をビルドして HOME ディレクトリー・フォルダー ($HOME/opt/oqssa/
) にインストールします。 -
OQSSA のビルドに必要な依存関係パッケージがインストールされたことを確認します。 依存関係パッケージをインストールするには、
sudo
権限が必要です。- Debian (Ubuntu) 依存関係:
libtool automake autoconf cmake (3.5 or above) make openssl libssl-dev build-essential git wget golang (1.14 or above) patch perl diffutils
Debian ディストリビューションを使用している場合は、以下のコード・スニペットをファイルにコピーして実行することで、必要なすべてのパッケージがインストールされたことを確認してください。
echo "Starting prerequisites verification" CMAKE_VER_REQUIRED="3.*" packages="libtool automake autoconf cmake make openssl libssl-dev git wget build-essential golang patch perl diffutils" for REQUIRED_PKG in $packages do PKG_STATUS=$(dpkg-query -W --showformat='${Version},${Status}\n' $REQUIRED_PKG|grep "install ok installed") if [ "" = "$PKG_STATUS" ] then echo "$REQUIRED_PKG is NOT installed" #sudo apt-get -y install $REQUIRED_PKG else PKG_VER=$(echo $PKG_STATUS| cut -d',' -f 1) if [ "cmake" == $REQUIRED_PKG ] && ! [[ $PKG_VER =~ $CMAKE_VER_REQUIRED ]] then echo "$REQUIRED_PKG Version is: $PKG_VER. OQSSA requires cmake 3.5 and above." fi fi done echo "Prerequisites verification completed"
- RHEL (Centos/Fedora) 依存関係:
libtool automake autoconf cmake (3.5 or above) make openssl ncurses-devel gcc-c++ glibc-locale-source glibc-langpack-enopenssl-devel git wget golang (1.14 or above) patch perl diffutils 'Developement Tools'
RHEL ディストリビューションを使用している場合は、以下のコード・スニペットをファイルにコピーして実行することで、必要なすべてのパッケージがインストールされたことを確認してください。
echo "Starting prerequisites verification" CMAKE_VER_REQUIRED="3.*" packages="git libtool automake autoconf cmake make openssl ncurses-devel gcc-c++ openssl-devel wget glibc-locale-source glibc-langpack-en sudo golang patch perl diffutils" for REQUIRED_PKG in $packages do PKG_STATUS=$(rpm -q --qf '%{VERSION},%{INSTALLTIME}\n' $REQUIRED_PKG) if [[ "$PKG_STATUS" == *"not installed"* ]]; then echo "$REQUIRED_PKG is NOT installed" #sudo yum -y install $REQUIRED_PKG else PKG_VER=$(echo $PKG_STATUS| cut -d',' -f 1) if [ "cmake" == $REQUIRED_PKG ] && ! [[ $PKG_VER =~ $CMAKE_VER_REQUIRED ]] then echo "$REQUIRED_PKG Version is: $PKG_VER. OQSSA requires cmake 3.5 and above." fi fi done PKG_STATUS=$(yum grouplist Dev* |grep "Development Tools") if [ "" = "$PKG_STATUS" ] then echo "Developement Tools is NOT installed" fi echo "Prerequisites verification completed"
- Debian (Ubuntu) 依存関係:
-
前提条件パッケージのインストールと確認が終了したら、スクリプトを実行して OQSSA のビルドおよびインストールを実行します。
bash build-oqssa.sh
-
以下のコマンドを実行して、Quantum ライブラリー・パスを設定します。
export LD_LIBRARY_PATH=$HOME/opt/oqssa/lib:$LD_LIBRARY_PATH
アプリケーションでの Key Protect SDK の構成
前提条件がインストールされたら、以下の手順に従って、 アプリケーションでの Key Protect SDK:
-
以下のコマンドを実行して、go クライアントが存在するフォルダーに移動します。
cd $HOME/keyprotect-go-client
-
以下の初期化で Kyber アルゴリズムを設定します。 アプリケーション・コード内の Key Protect クライアント。 アルゴリズムを指定しない場合、アプリケーションはデフォルトで
p384_kyber768
アルゴリズムを使用します。 アルゴリズム構成の例として、以下のコードを使用してください。qscConfig := kp.ClientQSCConfig{ AlgorithmID: kp.KP_QSC_ALGO_p384_KYBER768, }
-
以下のコマンドを実行して、Key Protect SDK をコンパイルします。
LD_LIBRARY_PATH=$HOME/opt/oqssa/lib PKG_CONFIG_PATH=$HOME/opt/oqssa/lib/pkgconfig go build –-tags quantum
CURL による耐量子 Key Protect エンドポイントの使用
前提条件
以下に curl
要求を送信する前に (Key Protect 耐量子対応エンドポイント)、次の手順に従ってください。
-
ダウンロード Open Quantum Safe Software Stack(OQSSA)スクリプト。 このスクリプトは、必要なすべての依存関係 (
liboqs
、openssl
、およびlibcurl
) をビルドして HOME ディレクトリー・フォルダー ($HOME/opt/oqssa/
) にインストールします。 -
OQSSA のビルドに必要な依存関係パッケージがインストールされたことを確認します。 依存関係パッケージをインストールするには、
sudo
権限が必要です。- Debian (Ubuntu) 依存関係:
libtool automake autoconf cmake (3.5 or above) make openssl libssl-dev build-essential git wget golang (1.14 or above) patch perl diffutils
Debian ディストリビューションを使用している場合は、以下のコード・スニペットをファイルにコピーして実行することで、必要なすべてのパッケージがインストールされたことを確認してください。
echo "Starting prerequisites verification" CMAKE_VER_REQUIRED="3.*" packages="libtool automake autoconf cmake make openssl libssl-dev git wget build-essential golang patch perl diffutils" for REQUIRED_PKG in $packages do PKG_STATUS=$(dpkg-query -W --showformat='${Version},${Status}\n' $REQUIRED_PKG|grep "install ok installed") if [ "" = "$PKG_STATUS" ] then echo "$REQUIRED_PKG is NOT installed" #sudo apt-get -y install $REQUIRED_PKG else PKG_VER=$(echo $PKG_STATUS| cut -d',' -f 1) if [ "cmake" == $REQUIRED_PKG ] && ! [[ $PKG_VER =~ $CMAKE_VER_REQUIRED ]] then echo "$REQUIRED_PKG Version is: $PKG_VER. OQSSA requires cmake 3.5 and above." fi fi done echo "Prerequisites verification completed"
- RHEL (Centos/Fedora) 依存関係:
libtool automake autoconf cmake (3.5 or above) make openssl ncurses-devel gcc-c++ glibc-locale-source glibc-langpack-enopenssl-devel git wget golang (1.14 or above) patch perl diffutils 'Developement Tools''
RHEL ディストリビューションを使用している場合は、以下のコード・スニペットをファイルにコピーして実行することで、必要なすべてのパッケージがインストールされたことを確認してください。
echo "Starting prerequisites verification" CMAKE_VER_REQUIRED="3.*" packages="git libtool automake autoconf cmake make openssl ncurses-devel gcc-c++ openssl-devel wget glibc-locale-source glibc-langpack-en sudo golang patch perl diffutils" for REQUIRED_PKG in $packages do PKG_STATUS=$(rpm -q --qf '%{VERSION},%{INSTALLTIME}\n' $REQUIRED_PKG) if [[ "$PKG_STATUS" == *"not installed"* ]]; then echo "$REQUIRED_PKG is NOT installed" #sudo yum -y install $REQUIRED_PKG else PKG_VER=$(echo $PKG_STATUS| cut -d',' -f 1) if [ "cmake" == $REQUIRED_PKG ] && ! [[ $PKG_VER =~ $CMAKE_VER_REQUIRED ]] then echo "$REQUIRED_PKG Version is: $PKG_VER. OQSSA requires cmake 3.5 and above." fi fi done PKG_STATUS=$(yum grouplist Dev* |grep "Development Tools") if [ "" = "$PKG_STATUS" ] then echo "Developement Tools is NOT installed" fi echo "Prerequisites verification completed"
- Debian (Ubuntu) 依存関係:
-
前提条件パッケージのインストールと確認が終了したら、スクリプトを実行して OQSSA のビルドおよびインストールを実行します。
bash build-oqssa.sh
耐量子対応エンドポイントへの CURL 要求の実行
耐量子対応エンドポイントへの呼び出しを行う場合 curl
リクエストが正常に通過するように、特定のリクエストを使用する必要があります。 を使う必要があります。 以下の表に、耐量子 curl
要求を実行するときに必要なフラグをリストします。
フラグ | 説明 |
---|---|
-tlsv1.3 | このフラグは、curl を TLS v1.3 サーバーに接続します。 |
--curves | このフラグは、 |
TLSv1.3 鍵交換メカニズムで使用する耐量子アルゴリズムを指定します。 アルゴリズムを指定しない場合、フラグはデフォルトで p384_kyber768 アルゴリズムになります。 |
以下の要求例を使用して、以下の鍵のリストを取得できます。 Key Protect インスタンス (耐量子対応エンドポイントを介して)。
$ curl --tlsv1.3 --curves <qsc_algorithm> -X GET \
"https://qsc.<region>.kms.cloud.ibm.com/api/v2/keys" \
-H "accept: application/vnd.ibm.kms.key+json" \
-H "authorization: Bearer <IAM_token>" \
-H "bluemix-instance: <instance_ID>"
次の表に従って、要求内の変数を置き換えてください。
変数 | 説明 |
---|---|
qsc_algorithm | 必須。 転送中のデータを保護するために使用する特定の鍵サイズの kyber アルゴリズム。 指定できるアルゴリズム + 鍵サイズ: kyber512、kyber768、kyber1024、p256_kyber512、p384_kyber768、および p521_kyber1024。 |
リージョン | 必須。 Key Protect インスタンスが存在している地理的領域を表す、地域の省略形 (例: us-south または eu-gb)。 For more information, see 地域サービス・エンドポイント. |
IAM_token | 必須。 IBM Cloud アクセス・トークン。 Bearer 値を含む、IAM トークンの全コンテンツを cURL 要求に組み込みます。 For more information, see アクセストークンの取得. |
instance_ID | 必須。 Key Protect サービス・インスタンスに割り当てられた固有 ID。 For more information, see インスタンスIDの取得. |