QSslKeyingMaterial Class
Décrit le matériel de chiffrement exporté issu d'une session TLS. En savoir plus...
| En-tête : | #include <QSslKeyingMaterial> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
| qmake : | QT += network |
| Depuis : | Qt 6.12 |
| Statut : | Aperçu technologique |
Cette classe est en avant-première technologique et est susceptible d'être modifiée.
- Liste de tous les membres, y compris les membres hérités
- QSslKeyingMaterial fait partie de l'API de programmation réseau.
Remarque : toutes les fonctions de cette classe sont réentrantes.
Comparaisons de QSslKeyingMaterial
| Catégorie | Types comparables |
|---|---|
| égalité | QSslKeyingMaterial |
Fonctions publiques
| 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 |
Éléments non membres associés
| size_t | qHash(const QSslKeyingMaterial &key) |
| size_t | qHash(const QSslKeyingMaterial &key, size_t seed) |
| QDebug | operator<<(QDebug debug, const QSslKeyingMaterial &keying) |
Description détaillée
QSslKeyingMaterial représente une requête de matériel de chiffrement dérivé d'une connexion TLS établie à l'aide du mécanisme d'exportation TLS.
Le mécanisme d’exportation est défini dans la RFC 5705 pour TLS 1.2 et les versions antérieures, et dans la RFC 8446 pour TLS 1.3. Il permet aux applications de dériver du matériel de chiffrement cryptographiquement distinct de la session TLS sans exposer les clés de trafic de la session.
Chaque objet QSslKeyingMaterial spécifie :
- un libellé d’exportateur identifiant la finalité du matériel de chiffrement dérivé
- une valeur de contexte facultative liant le matériel de chiffrement à des données spécifiques à l’application
- la taille souhaitée du matériel de chiffrement exporté
Le matériel de chiffrement proprement dit est dérivé par le backend TLS après une négociation réussie et peut être lu à l’aide de la fonction ` value()`.
Les objets `QSslKeyingMaterial` sont généralement configurés via la fonction ` QSslConfiguration::setKeyingMaterial()` avant l'établissement d'une connexion TLS.
Exemple : exportation déterministe sur le client et le serveur
// 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);Considérations de sécurité
Le matériel de chiffrement exporté est un secret. ` QByteArray ` est un conteneur de type « copy-on-write » ; ainsi, tous les objets `QSslKeyingMaterial` contenant une valeur partagent un même tampon, et le secret reste en mémoire tant que l’un de ces objets est actif. Une application qui doit garantir qu’elle détient la seule référence restante doit libérer explicitement les références internes à Qt.
Une fois la négociation d'identification réussie, la valeur réside à un seul et unique endroit au sein de Qt : l'entrée QSslKeyingMaterial dans l'QSslConfiguration interne du socket. Chaque objet QSslConfiguration renvoyé par la fonction QSslSocket::sslConfiguration() est une copie indépendante de cette configuration, partageant le tampon de la valeur avec celle-ci.
Les deux surcharges de la fonction ` QSslConfiguration::takeKeyingMaterial()` transmettent les valeurs au lieu de les partager : ce qu’elles renvoient contient la seule référence à la valeur, et les entrées qu’elles laissent derrière elles dans la configuration sur laquelle elles ont été appelées sont des ` clones` vides de sens. Copiez la valeur hors de l'objet renvoyé à l'aide de ` value()` et laissez l'objet lui-même sortir de la portée, puis réécrivez la configuration dans le socket : cela écrase l'entrée du socket par celle sans valeur, supprimant ainsi la dernière référence détenue par 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);Les copies suivantes échappent au contrôle de la socket et doivent être traitées séparément :
- Toute autre copie d’ QSslConfiguration que l’application conserve encore, y compris celles stockées dans un QNetworkRequest ou installées avec QSslConfiguration::setDefaultConfiguration(). Retirer la valeur d’une copie n’affecte pas les autres.
- Une configuration qui n’a jamais été réécrite dans le socket. Extraire les valeurs d’une copie ` QSslConfiguration ` ne supprime que cette copie de la configuration ; le socket conserve la sienne jusqu’à ce qu’on lui transmette les entrées vides.
- Toute copie de QSslKeyingMaterial créée par l’application elle-même. Utilisez clone() lorsqu’une copie d’une requête est nécessaire sans sa valeur.
Le socket supprime également les valeurs lorsqu’il entame une nouvelle négociation de connexion, car ses entrées sont alors réinitialisées en clones sans valeur, ainsi que lorsqu’il est détruit. Aucune de ces deux situations ne remplace l’étape explicite décrite ci-dessus pour un socket qui reste actif.
Documentation des fonctions membres
QSslKeyingMaterial::QSslKeyingMaterial()
Construit par défaut une instance de QSslKeyingMaterial.
Une instance par défaut n'est jamais valide.
Voir également isValid().
[explicit] QSslKeyingMaterial::QSslKeyingMaterial(const QByteArray &label, qsizetype size)
[explicit] QSslKeyingMaterial::QSslKeyingMaterial(const QByteArray &label, qsizetype size, const QByteArray &context)
Crée un objet ` QSslKeyingMaterial ` avec l'exportateur ` label` , le format de sortie ` size` et, en option, ` context` .
L’ label identifie la finalité du matériel de chiffrement exporté et ne doit pas être vide. L’ size spécifie le nombre d’octets à dériver de l’exportateur TLS.
L’ context, facultatif, est une donnée définie par l’application qui est intégrée au processus de dérivation de la clé afin d’assurer la séparation des domaines.
Le matériel de chiffrement lui-même n’est généré qu’une fois la négociation TLS terminée avec succès.
Remarque : sous TLS 1.2 (RFC 5705), un contexte nul et un contexte vide (non nul) produisent des données de chiffrement différentes : le champ de longueur du contexte est entièrement omis en l’absence de contexte, ce qui donne une entrée PRF différente. Sous TLS 1.3 (RFC 8446), un contexte absent et un contexte vide sont définis comme équivalents et produisent le même matériel de chiffrement. Utilisez QByteArray::isNull() pour les distinguer.
Voir également isValid(), label(), context() et value().
QSslKeyingMaterial QSslKeyingMaterial::clone() const
Renvoie une copie de cette demande de matériel de chiffrement, sans ses méthodes d'value().
L'objet renvoyé contient les propriétés exporter label(), context() et requestedSize(), ce qui permet de demander à nouveau le même matériel de chiffrement, mais sa propriété value() est vide. Utilisez-le pour initialiser une copie ou pour réinitialiser une entrée, sans conserver la valeur.
Voir également value().
QByteArray QSslKeyingMaterial::context() const
Renvoie la valeur de contexte facultative utilisée pour dériver le matériel de chiffrement.
La valeur de contexte lie le matériel de chiffrement exporté à des données spécifiques à l'application et contribue à empêcher la réutilisation accidentelle de clés identiques à des fins différentes.
Si aucun contexte n’a été spécifié, un objet ` QByteArray ` nul ou vide est renvoyé (voir QSslKeyingMaterial::QSslKeyingMaterial()).
Voir également label() et value().
[noexcept] bool QSslKeyingMaterial::isValid() const
Renvoie « true » si cet objet ` QSslKeyingMaterial ` correspond à une requête d'exportation valide.
Un objet ` QSslKeyingMaterial ` est considéré comme valide s'il possède un étiquette d'exportateur non vide et une taille de sortie positive.
Voir également label() et value().
QByteArray QSslKeyingMaterial::label() const
Renvoie l'étiquette de l'exportateur utilisée pour dériver le matériel de chiffrement.
Cette étiquette identifie la finalité du matériel de chiffrement exporté et est incluse telle quelle dans la dérivation de l'exportateur TLS.
Voir également context() et value().
[noexcept] qsizetype QSslKeyingMaterial::requestedSize() const
La taille souhaitée du matériel de chiffrement.
La taille souhaitée correspond au nombre d'octets que le protocole de négociation doit générer aux fins décrites par les fonctions label() et context() du matériel de chiffrement demandé.
Voir également value().
[noexcept] void QSslKeyingMaterial::swap(QSslKeyingMaterial &other)
Remplace ce matériel de chiffrement par other. Cette opération est très rapide et ne pose jamais de problème.
QByteArray QSslKeyingMaterial::value() const
Renvoie le matériel de chiffrement exporté.
L'QByteArray e renvoyée contient le matériel de chiffrement dérivé de la session TLS à l'aide de l'étiquette et du contexte de l'exportateur configurés.
Si la négociation TLS n’a pas abouti ou si le backend TLS ne prend pas en charge les exportateurs de clés, cette fonction renvoie une valeur vide.
Remarque : le contenu du matériel de chiffrement renvoyé est sensible sur le plan de la sécurité et doit être manipulé avec précaution. Consultez Security Considerations pour savoir comment faire en sorte que l’ QByteArray e renvoyée soit la seule copie de ce matériel.
Voir également label(), context() et requestedSize().
Éléments non membres associés
[noexcept] size_t qHash(const QSslKeyingMaterial &key)
[noexcept] size_t qHash(const QSslKeyingMaterial &key, size_t seed)
Renvoie la valeur de hachage de key, en utilisant seed comme graine pour le calcul.
QDebug operator<<(QDebug debug, const QSslKeyingMaterial &keying)
Écrit une représentation textuelle du matériel de chiffrement keying dans l'objet de débogage debug.
Voir également Techniques de débogage.
© 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.