Passa al contenuto principale

3.2. Struttura del timestamp del certificato firmato

3.2. Struttura del timestamp del certificato firmato

    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" è l'hash SHA-256 della chiave pubblica del log, calcolato sulla codifica DER della chiave rappresentata come SubjectPublicKeyInfo.

"issuer_key_hash" è l'hash SHA-256 della chiave pubblica dell'emittente del certificato, calcolato sulla codifica DER della chiave rappresentata come SubjectPublicKeyInfo. Questo è necessario per legare l'emittente al certificato finale.

"tbs_certificate" è il componente TBSCertificate codificato in DER (vedere [RFC5280]) del Precertificato -- cioè, senza la firma e l'estensione di veleno. Se il Precertificato non è firmato con il certificato CA che emetterà il certificato finale, allora il TBSCertificate ha anche il suo emittente cambiato in quello della CA che emetterà il certificato finale. Si noti che è anche possibile ricostruire questo TBSCertificate dal certificato finale estraendo il TBSCertificate da esso ed eliminando l'estensione SCT. Si noti inoltre che poiché il TBSCertificate contiene un AlgorithmIdentifier che deve corrispondere sia all'algoritmo di firma del Precertificato che all'algoritmo di firma del certificato finale, devono essere firmati con lo stesso algoritmo e parametri. Se il Precertificato è emesso utilizzando un Certificato di Firma Precertificato e un'estensione Authority Key Identifier è presente nel TBSCertificate, l'estensione corrispondente deve essere presente anche nel Certificato di Firma Precertificato -- in questo caso, il TBSCertificate ha anche il suo Authority Key Identifier cambiato per corrispondere all'emittente finale.

    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;

La codifica dell'elemento digitally-signed è definita in [RFC5246].

"sct_version" è la versione del protocollo a cui l'SCT è conforme. Questa versione è v1.

"timestamp" è il tempo NTP corrente [RFC5905], misurato dall'epoca (1 gennaio 1970, 00:00), ignorando i secondi intercalari, in millisecondi.

"entry_type" può essere implicito dal contesto in cui l'SCT è presentato.

"signed_entry" è il "leaf_certificate" (nel caso di un X509ChainEntry) o è il PreCert (nel caso di un PrecertChainEntry), come descritto sopra.

"extensions" sono estensioni future a questa versione del protocollo (v1). Attualmente, non sono specificate estensioni.