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 은 쓰기 시 복사(copy-on-write) 컨테이너이므로, 값을 보유한 모든 QSslKeyingMaterial 객체는 하나의 버퍼를 공유하며, 해당 객체 중 하나라도 존재하는 한 비밀 정보는 메모리에 남아 있게 됩니다. 유일하게 남은 참조를 보유해야 하는 애플리케이션은 Qt 내부 참조를 명시적으로 해제해야 합니다.
핸드셰이크가 성공한 후, 해당 값은 Qt 내부에서 정확히 한 곳, 즉 소켓의 내부 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);다음과 같은 복사 작업은 소켓의 제어 범위를 벗어나므로 별도로 처리해야 합니다:
- QNetworkRequest 에 저장되거나 QSslConfiguration::setDefaultConfiguration()을 통해 설치된 것을 포함하여, 애플리케이션이 여전히 보유하고 있는 다른 모든 QSslConfiguration 복사본. 한 복사본에서 값을 가져와도 다른 복사본에는 영향을 미치지 않습니다.
- 소켓에 다시 기록된 적이 없는 구성. 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)
지정된 익스포터(exporter) label, 출력(output) size 및 선택 사항인 키링( context)을 사용하여 ` QSslKeyingMaterial ` 객체를 생성합니다.
label 는 내보낸 키 생성 자료의 용도를 식별하며, 비어 있어서는 안 됩니다. size 는 TLS 익스포터에서 파생될 바이트 수를 지정합니다.
선택 사항인 context 는 도메인 분리를 제공하기 위해 키 도출 과정에 혼합되는 애플리케이션 정의 데이터입니다.
키 생성 자료 자체는 TLS 핸드셰이크가 성공적으로 완료될 때까지 생성되지 않습니다.
참고: TLS 1.2(RFC 5705)에서는 null 컨텍스트와 빈(non-null) 컨텍스트가 서로 다른 키 생성 자료를 생성합니다. 컨텍스트가 없는 경우 컨텍스트 길이 필드가 완전히 생략되어 다른 PRF 입력이 생성됩니다. TLS 1.3(RFC 8446)에서는 컨텍스트가 없는 경우와 빈 컨텍스트가 동등한 것으로 정의되며, 동일한 키 생성 자료를 생성합니다. 이 둘을 구별하려면 QByteArray::isNull()을 사용하십시오.
isValid(), label(), context(), value()도 참조하십시오 .
QSslKeyingMaterial QSslKeyingMaterial::clone() const
value()를 제외한 이 키 생성 자료 요청의 복사본을 반환합니다.
반환된 객체에는 exporter 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 내보내기 파생 과정에 그대로 포함됩니다.
[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)
seed 를 계산의 시드로 사용하여 key 의 해시 값을 반환합니다.
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.