3. Structure of the Raw Public Key Extension (Structure de l'extension de clé publique brute)
3. Structure of the Raw Public Key Extension (Structure de l'extension de clé publique brute)
Cette section définit les deux extensions TLS client_certificate_type et server_certificate_type, qui peuvent être utilisées dans le cadre d'un handshake TLS étendu lorsque des clés publiques brutes sont utilisées. La Section 4 définit le comportement du client TLS et du serveur TLS utilisant ces extensions.
Cette spécification utilise des clés publiques brutes (raw public keys) par lesquelles l'encodage déjà disponible utilisé dans un certificat PKIX sous la forme d'une structure SubjectPublicKeyInfo est réutilisé. Pour transporter la clé publique brute dans le handshake TLS, la charge utile Certificate est utilisée comme conteneur, comme indiqué dans la Figure 1. La structure Certificate présentée est une adaptation de sa forme originale [RFC5246].
opaque ASN.1Cert<1..2^24-1>;
struct {
select(certificate_type){
// certificate type defined in this document.
case RawPublicKey:
opaque ASN.1_subjectPublicKeyInfo<1..2^24-1>;
// X.509 certificate defined in RFC 5246
case X.509:
ASN.1Cert certificate_list<0..2^24-1>;
// Additional certificate type based on
// "TLS Certificate Types" subregistry
};
} Certificate;
Figure 1: Certificate Payload as a Container for the Raw Public Key (Figure 1: Charge utile de certificat comme conteneur pour la clé publique brute)
La structure SubjectPublicKeyInfo est définie dans la section 4.1 de la RFC 5280 [PKIX] et contient non seulement les clés brutes, telles que l'exposant public et le module d'une clé publique RSA, mais aussi un identificateur d'algorithme. L'identificateur d'algorithme peut également inclure des paramètres. La valeur SubjectPublicKeyInfo dans la charge utile Certificate DOIT contenir l'encodage DER [X.690] du SubjectPublicKeyInfo. La structure, telle que présentée dans la Figure 2, contient donc également des informations de longueur. Un exemple est fourni dans l'Appendix A.
SubjectPublicKeyInfo ::= SEQUENCE {
algorithm AlgorithmIdentifier,
subjectPublicKey BIT STRING }
AlgorithmIdentifier ::= SEQUENCE {
algorithm OBJECT IDENTIFIER,
parameters ANY DEFINED BY algorithm OPTIONAL }
Figure 2: SubjectPublicKeyInfo ASN.1 Structure (Figure 2: Structure ASN.1 SubjectPublicKeyInfo)
Les identificateurs d'algorithme sont des identificateurs d'objet (OID). La RFC 3279 [RFC3279] et la RFC 5480 [RFC5480], par exemple, définissent les OID indiqués dans la Figure 3. Notez que cette liste n'est pas exhaustive et que d'autres OID peuvent être définis dans de futures RFC.
Key Type | Document | OID
--------------------+----------------------------+-------------------
RSA | Section 2.3.1 of RFC 3279 | 1.2.840.113549.1.1
....................|............................|...................
Digital Signature | |
Algorithm (DSA) | Section 2.3.2 of RFC 3279 | 1.2.840.10040.4.1
....................|............................|...................
Elliptic Curve | |
Digital Signature | |
Algorithm (ECDSA) | Section 2 of RFC 5480 | 1.2.840.10045.2.1
--------------------+----------------------------+-------------------
Figure 3: Example Algorithm Object Identifiers (Figure 3: Exemples d'identificateurs d'objet d'algorithme)
Le format d'extension pour les hellos client et serveur étendus, qui utilise le champ "extension_data", est utilisé pour transporter les structures ClientCertTypeExtension et ServerCertTypeExtension. Ces deux structures sont présentées dans la Figure 4. La structure CertificateType est une énumération avec des valeurs extraites du sous-registre "TLS Certificate Types" (Types de certificats TLS) du registre "Transport Layer Security (TLS) Extensions" (Extensions TLS) [TLS-Ext-Registry].
struct {
select(ClientOrServerExtension) {
case client:
CertificateType client_certificate_types<1..2^8-1>;
case server:
CertificateType client_certificate_type;
}
} ClientCertTypeExtension;
struct {
select(ClientOrServerExtension) {
case client:
CertificateType server_certificate_types<1..2^8-1>;
case server:
CertificateType server_certificate_type;
}
} ServerCertTypeExtension;
Figure 4: CertTypeExtension Structure (Figure 4: Structure CertTypeExtension)