Zum Hauptinhalt springen

3.2. Structure of the Signed Certificate Timestamp (Struktur des SCT)

3.2. Structure of the Signed Certificate Timestamp (Struktur des SCT)

    enum { certificate_timestamp(0), tree_hash(1), (255) }
SignatureType;

enum { v1(0), (255) }
Version;

struct {
opaque key_id[32];
} LogID;

opaque TBSCertificate<1..2^24-1>;

struct {
opaque issuer_key_hash[32];
TBSCertificate tbs_certificate;
} PreCert;

opaque CtExtensions<0..2^16-1>;

key_id ist der SHA-256-Hash des öffentlichen Schlüssels des Logs, berechnet über die DER-Kodierung des Schlüssels als SubjectPublicKeyInfo.

issuer_key_hash ist der SHA-256-Hash des öffentlichen Schlüssels des Zertifikatsausstellers, berechnet über die DER-Kodierung als SubjectPublicKeyInfo. Dies bindet den Aussteller an das Endzertifikat.

tbs_certificate ist die DER-kodierte TBSCertificate-Komponente (siehe [RFC5280]) des Precertificate – also ohne Signatur und ohne die Poison-Erweiterung. Ist das Precertificate nicht mit dem CA-Zertifikat signiert, das das Endzertifikat ausstellt, hat die TBSCertificate auch einen geänderten Aussteller auf den CA, der das Endzertifikat ausstellen wird. Beachten Sie, dass sich diese TBSCertificate auch aus dem Endzertifikat rekonstruieren lässt, indem man die TBSCertificate extrahiert und die SCT-Erweiterung entfernt. Da die TBSCertificate einen AlgorithmIdentifier enthält, der sowohl mit dem Precertificate-Signaturalgorithmus als auch mit dem des Endzertifikats übereinstimmen muss, müssen beide mit demselben Algorithmus und denselben Parametern signiert sein. Wird das Precertificate mit einem Precertificate Signing Certificate ausgestellt und ist eine Authority Key Identifier-Erweiterung in der TBSCertificate vorhanden, muss die entsprechende Erweiterung auch im Precertificate Signing Certificate vorhanden sein – in diesem Fall hat die TBSCertificate auch ein geändertes Authority Key Identifier, passend zum endgültigen Aussteller.

    struct {
Version sct_version;
LogID id;
uint64 timestamp;
CtExtensions extensions;
digitally-signed struct {
Version sct_version;
SignatureType signature_type = certificate_timestamp;
uint64 timestamp;
LogEntryType entry_type;
select(entry_type) {
case x509_entry: ASN.1Cert;
case precert_entry: PreCert;
} signed_entry;
CtExtensions extensions;
};
} SignedCertificateTimestamp;

Die Kodierung des digitally-signed-Elements ist in [RFC5246] definiert.

sct_version ist die Protokollversion, der der SCT entspricht. Diese Version ist v1.

timestamp ist die aktuelle NTP Time [RFC5905] seit der Epoche (1. Januar 1970, 00:00), ohne Schaltsekunden, in Millisekunden.

entry_type kann aus dem Kontext der SCT-Präsentation implizit sein.

signed_entry ist das leaf_certificate (bei X509ChainEntry) oder das PreCert (bei PrecertChainEntry), wie oben beschrieben.

extensions sind künftige Erweiterungen dieser Protokollversion (v1). Derzeit sind keine Erweiterungen spezifiziert.