# Keys supported by the Arti key store The key manager will need to be able to generate all the keys documented here. Here is a description of the security levels referenced in this document: | Security lvl | Description | |--------------|------------------------------------------------------------------------------------------------------------------------------------------------------| | 0 | extremely sensitive, should ideally be stored offline; used for long-term identity keys | | 1 | sensitive, should ideally be stored offline; used for medium-term keys that can only be abused for a limited time if leaked, and that can be rotated | | 2 | sensitive, **cannot** be stored offline; used for keys that must be stored online, but that have limited validity or can be revoked | | 3 | not sensitive | ## Onion service keys | Key | Type | Dependencies | Description | Managed by key manager? | Expected lifetime | Security lvl | |---------------------|---------|-------------------------------|-------------------------------------------------------------------------|-------------------------|---------------------------------------------------------------------------|--------------| | `hs_id` | ed25519 | none | long-term identity key | yes | long-term/never rotated | 0 | | `hs_blind_id` | ed25519 | `hs_id` | blinded signing key (derived from `hs_id`) | yes | 1 time period | 1 | | `hs_desc_sign` | ed25519 | none | descriptor signing key | yes | 1 time period | 2 | | `hs_desc_sign_cert` | ed25519 | `hs_blind_id`, `hs_desc_sign` | descriptor signing certificate (`hs_desc_sign` signed by `hs_blind_id`) | no | short-term (54h) | 3 | | `hsc_desc_enc` | x25519 | none | the client's counterpart to `hss_desc_enc` | yes | long-term/until the client rotates it/service revokes the client's access | 2 | | `hsc_intro_auth` | ed25519 | none | client auth key for use in the introduction protocol | yes | long-term/until the client rotates it/service revokes the client's access | 2 | (NOTE: The key names from the `Key` column are the formal key names from `rend-spec-v3` with the `KS_` prefix removed) Note: `hss_desc_enc` (used by hidden services to encrypt the inner part of their descriptors when client auth is enabled) is not listed here, because it is the public part of the `(KP_hss_desc_enc, KS_hss_desc_enc)` keypair, and Arti key stores do not store public keys. That being said, when generating client auth keys, the key management CLI will need to provide a convenient way to extract the corresponding `hss_desc_enc` key, both in C Tor's `authorized_clients` format, and in the SSH key format used by Arti. For example, the command for generating a new descriptor encryption key might look like this: ``` arti keymgr generate desc_enc_key --keystore \ # plus any other flags we might need --client \ --service \ --pubkey ``` In addition to generating `hsc_desc_enc` in the specified key store, this would also create the corresponding public key entries in `OUT_DIR`: ``` ├── .auth # for C Tor └── .x25519_public # for Arti ``` ## Relay keys | Key | Type | Dependencies | Description | Managed by key manager? | Expected lifetime | Security lvl | |---------------------|--------------|-------------------------------|-------------------------------------------------------------------------|-------------------------|---------------------------------------------------------------------------|--------------| | `relayid_rsa` | 1024-bit RSA | none | long-term identity key | yes | long-term/never rotated | 0 | | `onion_tap` | 1024-bit RSA | none | medium-term TAP onion key | yes | at least 1 week; see 2.1.1. Server descriptor format (`dir-spec.txt`) | 2 | | `conn_tls` | 1024-bit RSA | none | short-term connection key for negotiating TLS connections | yes | at most 1 day; see 1.1 Keys and names (`tor-spec.txt`) | 2 | | `ntor` | x25519 | none | medium-term onion key for handling onion key handshakes | yes | at least 1 week; see 2.1.1. Server descriptor format (`dir-spec.txt`) | 2 | | `relayid_ed` | ed25519 | none | long-term identity key | yes | long-term/never rotated | 0 | | `relaysign_ed` | ed25519 | none | medium-term signing key | yes | medium-term/rotated periodically | 2 | | `relaysign_ed_cert` | ed25519 | `relayid_ed`, `relaysign_ed` | `relaysign_ed` signed by `relayid_ed` | no | same lifetime as `relaysign_ed` | 3 | | `link_ed` | ed25519 | none | short-term link auth key, used to authenticate the link handshake | maybe | regenerated "frequently" | 2 | | `link_ed_cert` | ed25519 | `relaysign_ed`, `link_ed` | `link_ed` signed by `relaysign_ed` | no | same lifetime as `link_ed` | 3 | (NOTE: The key names from the `Key` column are the formal key names from `tor-spec` with the `KS_` prefix removed) ## Directory authority keys TODO | Key | Dependencies | Description | |---------------------|-------------------------------|-------------------------------------------------------------------------| | `dirauth_id`(?) | | long-term authority identity key | | `dirauth_sign`(?) | | directory server's public signing key |