QSslKeyingMaterial Class
TLS セッションから導出された、エクスポートされた鍵素材について説明します。詳細...
| ヘッダー: | #include <QSslKeyingMaterial> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
| qmake: | QT += network |
| 以下のように: | Qt 6.12 |
| ステータス: | テクノロジープレビュー |
このクラスはテクノロジープレビュー段階にあり、変更される可能性があります。
- 継承されたメンバーを含む、すべてのメンバーの一覧
- QSslKeyingMaterial は、ネットワークプログラミング API の一部です。
注:このクラスのすべての関数は再入可能です。
QSslKeyingMaterial の比較
| カテゴリ | 比較可能な型 |
|---|---|
| 等価性 | QSslKeyingMaterial の比較カテゴリ比較可能な型等価性 |
パブリック関数
| QSslKeyingMaterial() | |
| QSslKeyingMaterial(const QByteArray &label, qsizetype size) | |
| QSslKeyingMaterial(const QByteArray &label, qsizetype size, const QByteArray &context) | |
| QSslKeyingMaterial | clone() const |
| QByteArray | context() const |
| bool | isValid() const |
| QByteArray | label() const |
| qsizetype | requestedSize() const |
| void | swap(QSslKeyingMaterial &other) |
| QByteArray | value() const |
関連する非メンバー
| size_t | qHash(const QSslKeyingMaterial &key) |
| size_t | qHash(const QSslKeyingMaterial &key, size_t seed) |
| QDebug | operator<<(QDebug debug, const QSslKeyingMaterial &keying) |
詳細な説明
QSslKeyingMaterial は、TLS エクスポーター メカニズムを使用して、確立された TLS 接続から導出されたキーイング マテリアルの要求を表します。
エクスポーターメカニズムは、TLS 1.2 以前については RFC 5705 で、TLS 1.3 については RFC 8446 で定義されています。これにより、アプリケーションは、セッションのトラフィックキーを公開することなく、TLS セッションから暗号的に独立したキーイングマテリアルを導出することができます。
各 QSslKeyingMaterial オブジェクトは、以下を指定します。
- 導出されたキーイングマテリアルの目的を識別するエクスポーターラベル
- キーイングマテリアルをアプリケーション固有のデータに紐付けるオプションのコンテキスト値
- エクスポートされる鍵素材の希望サイズ
実際の鍵素材は、ハンドシェイクが成功した後に TLS バックエンドによって導出され、value() を使用して読み取ることができます。
通常、QSslKeyingMaterial オブジェクトは、TLS 接続を開始する前にQSslConfiguration::setKeyingMaterial() を通じて設定されます。
例:クライアントおよびサーバーでの決定論的なエクスポート
// Both client and server configure the same label and optional context
QSslKeyingMaterial keying("session-label", 32, "app-specific-context");
// After the TLS handshake completes get data from QSslConfiguration.
QByteArray derived = sslConfiguration().takeKeyingMaterial(keying)->value();
// Both client and server will obtain the same 'derived' bytes
// even though they each performed the derivation independently.
use(derived);セキュリティ上の考慮事項
エクスポートされたキーイングマテリアルは秘密情報です。QByteArray はコピーオンライト型のコンテナであるため、値を保持するすべての QSslKeyingMaterial オブジェクトは 1 つのバッファを共有し、それらのオブジェクトのいずれかが存続している限り、その秘密情報はメモリ内に残ります。唯一の参照を保持していることを保証する必要があるアプリケーションは、Qt 内部の参照を明示的に解放する必要があります。
ハンドシェイクが成功した後、その値は Qt 内の正確に 1 箇所、すなわちソケットの内部QSslConfiguration 内の QSslKeyingMaterial エントリに存在します。QSslSocket::sslConfiguration() によって返される各QSslConfiguration は、その設定の独立したコピーであり、その値のバッファを共有しています。
QSslConfiguration::takeKeyingMaterial() の両方のオーバーロードは、値を共有するのではなく引き渡します。つまり、これらの関数が返す値が、その値への唯一の参照を保持しており、呼び出し元の設定に残されたエントリは、値を持たないclones となります。value() を使用して返されたオブジェクトから値をコピーし、オブジェクト自体をスコープ外にしてから、設定をソケットに書き戻します。これにより、ソケットのエントリが値のないエントリで上書きされ、Qt が保持していた最後の参照が破棄されます。
QSslConfiguration config = socket->sslConfiguration();
// Copy the value out of the temporary that owns it, and let it die:
QByteArray secret = config.takeKeyingMaterial(request)->value();
// Overwrite the socket's copy with the entry left behind, which has no value:
socket->setSslConfiguration(config);以下のコピーはソケットの管理外であるため、別途対処する必要があります:
- アプリケーションが依然として保持しているその他の `QSslConfiguration ` のコピー(QNetworkRequest に保存されているものや、QSslConfiguration::setDefaultConfiguration() でインストールされたものを含む)。あるコピーから値を取り出しても、他のコピーには影響しません。
- ソケットに書き戻されたことのない設定。QSslConfiguration から値を取り出しても、そのコピーから設定が削除されるだけであり、ソケットは値のないエントリが渡されるまで、自身の設定を保持し続けます。
- アプリケーションが独自に作成した QSslKeyingMaterial のコピー。値のないリクエストのコピーが必要な場合は、clone() を使用してください。
また、ソケットは新しいハンドシェイクを開始する際(その際、エントリは値のないクローンにリセットされるため)や、破棄される際にも値を破棄します。いずれも、ソケットが存続し続ける場合の上記の明示的な手順に代わるものではありません。
メンバ関数のドキュメント
QSslKeyingMaterial::QSslKeyingMaterial()
QSslKeyingMaterial のインスタンスをデフォルトコンストラクタで生成します。
デフォルトのインスタンスは決して有効になりません。
isValid()も参照してください 。
[explicit] QSslKeyingMaterial::QSslKeyingMaterial(const QByteArray &label, qsizetype size)
[explicit] QSslKeyingMaterial::QSslKeyingMaterial(const QByteArray &label, qsizetype size, const QByteArray &context)
指定されたエクスポーター `label`、出力 `size`、およびオプションの `context` を使用して、QSslKeyingMaterial オブジェクトを生成します。
label は、エクスポートされるキー生成素材の目的を識別するものであり、空であってはなりません。size は、TLSエクスポーターから導出されるバイト数を指定します。
オプションのcontext は、ドメイン分離を実現するために鍵導出プロセスに組み込まれる、アプリケーション定義のデータです。
キー生成素材自体は、TLS ハンドシェイクが正常に完了するまで生成されません。
注: TLS 1.2 (RFC 5705)では 、コンテキストが存在しない場合と、空(null ではない)コンテキストの場合では、生成されるキー生成材料が異なります。コンテキストが存在しない場合、コンテキスト長フィールドは完全に省略されるため、PRF への入力が異なります。 TLS 1.3 (RFC 8446) では、コンテキストが存在しない場合と空のコンテキストは同等であると定義されており、同じキー生成材料が生成されます。これらを区別するには、QByteArray::isNull() を使用してください。
isValid()、label()、context()、およびvalue()も参照してください 。
QSslKeyingMaterial QSslKeyingMaterial::clone() const
このキー生成材料リクエストのコピーを、value() を除いて返します。
返されるオブジェクトには、エクスポーター `label()`、`context()`、および `requestedSize()` が保持されているため、これを使用して同じキー素材を再度要求することができますが、`value()` は空になっています。値を保持せずに、コピーの初期化やエントリのリセットを行う際に使用します。
value()も参照してください 。
QByteArray QSslKeyingMaterial::context() const
キー生成素材の導出に使用されるオプションのコンテキスト値を返します。
コンテキスト値は、エクスポートされたキー生成素材をアプリケーション固有のデータに紐付け、異なる目的で同一の鍵が誤って再利用されるのを防ぐのに役立ちます。
コンテキストが指定されていない場合、null または空の `QByteArray ` が返されます (QSslKeyingMaterial::QSslKeyingMaterial() を参照)。
[noexcept] bool QSslKeyingMaterial::isValid() const
このQSslKeyingMaterial オブジェクトが有効なエクスポーターリクエストを表している場合、trueを返します。
QSslKeyingMaterial オブジェクトは、エクスポートラベルが空ではなく、出力サイズが正の値である場合に有効と見なされます。
QByteArray QSslKeyingMaterial::label() const
キー生成素材の導出に使用されたエクスポーターラベルを返します。
このラベルは、エクスポートされたキー生成素材の目的を識別するものであり、TLSエクスポーターの導出にそのまま含まれます。
context() およびvalue()も参照してください 。
[noexcept] qsizetype QSslKeyingMaterial::requestedSize() const
キー生成素材の希望サイズ。
希望するサイズは、要求されたキー生成素材のlabel()およびcontext()で記述された目的のために、ハンドシェイクプロトコルが生成するよう求められるバイト数です。
value()も参照してください 。
[noexcept] void QSslKeyingMaterial::swap(QSslKeyingMaterial &other)
このキーイング素材をother と交換します。この操作は非常に高速で、失敗することはありません。
QByteArray QSslKeyingMaterial::value() const
エクスポートされたキーイングマテリアルを返します。
返されるQByteArray には、設定されたエクスポーターラベルおよびコンテキストを使用して、TLSセッションから導出されたキー素材が含まれます。
TLSハンドシェイクが正常に完了しなかった場合、またはTLSバックエンドがキーエクスポーターをサポートしていない場合、この関数は空の値を返します。
注: 返されるキーイングマテリアルの内容は セキュリティ上重要であるため、慎重に取り扱う必要があります。返された `QByteArray ` を唯一のコピーとして保持する方法については、Security Considerations を参照してください。
関連項目: label(),context(), およびrequestedSize().
関連する非メンバー
[noexcept] size_t qHash(const QSslKeyingMaterial &key)
[noexcept] size_t qHash(const QSslKeyingMaterial &key, size_t seed)
`key` のハッシュ値を、計算のシードとして `seed ` を使用して返します。
QDebug operator<<(QDebug debug, const QSslKeyingMaterial &keying)
キーイング素材 `keying ` のテキスト表現を、デバッグオブジェクト `debug` に書き込みます。
「デバッグ手法」も参照してください 。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.