メインコンテンツまでスキップ

3.2. 署名付き証明書タイムスタンプの構造

3.2. 署名付き証明書タイムスタンプの構造

    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」は、ログの公開鍵のSHA-256ハッシュであり、SubjectPublicKeyInfoとして表される鍵のDERエンコーディング上で計算されます。

「issuer_key_hash」は、証明書発行者の公開鍵のSHA-256ハッシュであり、SubjectPublicKeyInfoとして表される鍵のDERエンコーディング上で計算されます。これは、発行者を最終的な証明書にバインドするために必要です。

「tbs_certificate」は、事前証明書のDERエンコードされたTBSCertificate ([RFC5280]を参照) コンポーネントです。つまり、署名と毒拡張を除いたものです。事前証明書が最終証明書を発行するCA証明書で署名されていない場合、TBSCertificateの発行者も最終証明書を発行するCAの発行者に変更されます。この TBSCertificate は、最終証明書から TBSCertificate を抽出し、SCT 拡張を削除することによって再構築することも可能です。また、TBSCertificate には、事前証明書署名アルゴリズムと最終証明書署名アルゴリズムの両方に一致しなければならない AlgorithmIdentifier が含まれているため、これらは同じアルゴリズムとパラメーターで署名されなければなりません。事前証明書が事前証明書署名証明書を使用して発行され、TBSCertificate に Authority Key Identifier 拡張が存在する場合、対応する拡張は事前証明書署名証明書にも存在しなければなりません。この場合、TBSCertificate の Authority Key Identifier も最終発行者に一致するように変更されます。

    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;

digitally-signed 要素のエンコーディングは [RFC5246] で定義されています。

「sct_version」は、SCT が準拠するプロトコルのバージョンです。このバージョンは v1 です。

「timestamp」は、エポック (1970年1月1日00:00) からのミリ秒単位の現在のNTP時刻 [RFC5905] であり、うるう秒を無視します。

「entry_type」は、SCT が提示されるコンテキストから暗黙的に決定される場合があります。

「signed_entry」は、上記のように、(X509ChainEntry の場合) 「leaf_certificate」または (PrecertChainEntry の場合) PreCert です。

「extensions」は、このプロトコルバージョン (v1) の将来の拡張です。現在、拡張は指定されていません。