Home | History | Annotate | Download | only in openssh
      1 This describes the key/certificate revocation list format for OpenSSH.
      2 
      3 1. Overall format
      4 
      5 The KRL consists of a header and zero or more sections. The header is:
      6 
      7 #define KRL_MAGIC		0x5353484b524c0a00ULL  /* "SSHKRL\n\0" */
      8 #define KRL_FORMAT_VERSION	1
      9 
     10 	uint64	KRL_MAGIC
     11 	uint32	KRL_FORMAT_VERSION
     12 	uint64	krl_version
     13 	uint64	generated_date
     14 	uint64	flags
     15 	string	reserved
     16 	string	comment
     17 
     18 Where "krl_version" is a version number that increases each time the KRL
     19 is modified, "generated_date" is the time in seconds since 1970-01-01
     20 00:00:00 UTC that the KRL was generated, "comment" is an optional comment
     21 and "reserved" an extension field whose contents are currently ignored.
     22 No "flags" are currently defined.
     23 
     24 Following the header are zero or more sections, each consisting of:
     25 
     26 	byte	section_type
     27 	string	section_data
     28 
     29 Where "section_type" indicates the type of the "section_data". An exception
     30 to this is the KRL_SECTION_SIGNATURE section, that has a slightly different
     31 format (see below).
     32 
     33 The available section types are:
     34 
     35 #define KRL_SECTION_CERTIFICATES		1
     36 #define KRL_SECTION_EXPLICIT_KEY		2
     37 #define KRL_SECTION_FINGERPRINT_SHA1		3
     38 #define KRL_SECTION_SIGNATURE			4
     39 
     40 2. Certificate section
     41 
     42 These sections use type KRL_SECTION_CERTIFICATES to revoke certificates by
     43 serial number or key ID. The consist of the CA key that issued the
     44 certificates to be revoked and a reserved field whose contents is currently
     45 ignored.
     46 
     47 	string ca_key
     48 	string reserved
     49 
     50 Where "ca_key" is the standard SSH wire serialisation of the CA's
     51 public key. Alternately, "ca_key" may be an empty string to indicate
     52 the certificate section applies to all CAs (this is most useful when
     53 revoking key IDs).
     54 
     55 Followed by one or more sections:
     56 
     57 	byte	cert_section_type
     58 	string	cert_section_data
     59 
     60 The certificate section types are:
     61 
     62 #define KRL_SECTION_CERT_SERIAL_LIST	0x20
     63 #define KRL_SECTION_CERT_SERIAL_RANGE	0x21
     64 #define KRL_SECTION_CERT_SERIAL_BITMAP	0x22
     65 #define KRL_SECTION_CERT_KEY_ID		0x23
     66 
     67 2.1 Certificate serial list section
     68 
     69 This section is identified as KRL_SECTION_CERT_SERIAL_LIST. It revokes
     70 certificates by listing their serial numbers. The cert_section_data in this
     71 case contains:
     72 
     73 	uint64	revoked_cert_serial
     74 	uint64	...
     75 
     76 This section may appear multiple times.
     77 
     78 2.2. Certificate serial range section
     79 
     80 These sections use type KRL_SECTION_CERT_SERIAL_RANGE and hold
     81 a range of serial numbers of certificates:
     82 
     83 	uint64	serial_min
     84 	uint64	serial_max
     85 
     86 All certificates in the range serial_min <= serial <= serial_max are
     87 revoked.
     88 
     89 This section may appear multiple times.
     90 
     91 2.3. Certificate serial bitmap section
     92 
     93 Bitmap sections use type KRL_SECTION_CERT_SERIAL_BITMAP and revoke keys
     94 by listing their serial number in a bitmap.
     95 
     96 	uint64	serial_offset
     97 	mpint	revoked_keys_bitmap
     98 
     99 A bit set at index N in the bitmap corresponds to revocation of a keys with
    100 serial number (serial_offset + N).
    101 
    102 This section may appear multiple times.
    103 
    104 2.4. Revoked key ID sections
    105 
    106 KRL_SECTION_CERT_KEY_ID sections revoke particular certificate "key
    107 ID" strings. This may be useful in revoking all certificates
    108 associated with a particular identity, e.g. a host or a user.
    109 
    110 	string	key_id[0]
    111 	...
    112 
    113 This section must contain at least one "key_id". This section may appear
    114 multiple times.
    115 
    116 3. Explicit key sections
    117 
    118 These sections, identified as KRL_SECTION_EXPLICIT_KEY, revoke keys
    119 (not certificates). They are less space efficient than serial numbers,
    120 but are able to revoke plain keys.
    121 
    122 	string	public_key_blob[0]
    123 	....
    124 
    125 This section must contain at least one "public_key_blob". The blob
    126 must be a raw key (i.e. not a certificate).
    127 
    128 This section may appear multiple times.
    129 
    130 4. SHA1 fingerprint sections
    131 
    132 These sections, identified as KRL_SECTION_FINGERPRINT_SHA1, revoke
    133 plain keys (i.e. not certificates) by listing their SHA1 hashes:
    134 
    135 	string	public_key_hash[0]
    136 	....
    137 
    138 This section must contain at least one "public_key_hash". The hash blob
    139 is obtained by taking the SHA1 hash of the public key blob. Hashes in
    140 this section must appear in numeric order, treating each hash as a big-
    141 endian integer.
    142 
    143 This section may appear multiple times.
    144 
    145 5. KRL signature sections
    146 
    147 The KRL_SECTION_SIGNATURE section serves a different purpose to the
    148 preceeding ones: to provide cryptographic authentication of a KRL that
    149 is retrieved over a channel that does not provide integrity protection.
    150 Its format is slightly different to the previously-described sections:
    151 in order to simplify the signature generation, it includes as a "body"
    152 two string components instead of one.
    153 
    154 	byte	KRL_SECTION_SIGNATURE
    155 	string	signature_key
    156 	string	signature
    157 
    158 The signature is calculated over the entire KRL from the KRL_MAGIC
    159 to this subsection's "signature_key", including both and using the
    160 signature generation rules appropriate for the type of "signature_key".
    161 
    162 This section must appear last in the KRL. If multiple signature sections
    163 appear, they must appear consecutively at the end of the KRL file.
    164 
    165 Implementations that retrieve KRLs over untrusted channels must verify
    166 signatures. Signature sections are optional for KRLs distributed by
    167 trusted means.
    168 
    169 $OpenBSD: PROTOCOL.krl,v 1.3 2015/01/30 01:10:33 djm Exp $
    170