Damien Miller | bcd00ab | 2013-12-07 10:41:55 +1100 | [diff] [blame] | 1 | This document describes the private key format for OpenSSH. |
| 2 | |
| 3 | 1. Overall format |
| 4 | |
| 5 | The key consists of a header, a list of public keys, and |
| 6 | an encrypted list of matching private keys. |
| 7 | |
| 8 | #define AUTH_MAGIC "openssh-key-v1" |
| 9 | |
| 10 | byte[] AUTH_MAGIC |
| 11 | string ciphername |
| 12 | string kdfname |
| 13 | string kdfoptions |
| 14 | int number of keys N |
| 15 | string publickey1 |
| 16 | string publickey2 |
| 17 | ... |
| 18 | string publickeyN |
| 19 | string encrypted, padded list of private keys |
| 20 | |
| 21 | 2. KDF options for kdfname "bcrypt" |
| 22 | |
| 23 | The options: |
| 24 | |
| 25 | string salt |
| 26 | uint32 rounds |
| 27 | |
| 28 | are concatenated and represented as a string. |
| 29 | |
| 30 | 3. Unencrypted list of N private keys |
| 31 | |
| 32 | The list of privatekey/comment pairs is padded with the |
| 33 | bytes 1, 2, 3, ... until the total length is a multiple |
| 34 | of the cipher block size. |
| 35 | |
| 36 | uint32 checkint |
| 37 | uint32 checkint |
| 38 | string privatekey1 |
| 39 | string comment1 |
| 40 | string privatekey2 |
| 41 | string comment2 |
| 42 | ... |
| 43 | string privatekeyN |
| 44 | string commentN |
| 45 | char 1 |
| 46 | char 2 |
| 47 | char 3 |
| 48 | ... |
| 49 | char padlen % 255 |
| 50 | |
| 51 | Before the key is encrypted, a random integer is assigned |
| 52 | to both checkint fields so successful decryption can be |
| 53 | quickly checked by verifying that both checkint fields |
| 54 | hold the same value. |
| 55 | |
| 56 | 4. Encryption |
| 57 | |
| 58 | The KDF is used to derive a key, IV (and other values required by |
| 59 | the cipher) from the passphrase. These values are then used to |
| 60 | encrypt the unencrypted list of private keys. |
| 61 | |
| 62 | 5. No encryption |
| 63 | |
| 64 | For unencrypted keys the cipher "none" and the KDF "none" |
| 65 | are used with empty passphrases. The options if the KDF "none" |
| 66 | are the empty string. |
| 67 | |
| 68 | $OpenBSD: PROTOCOL.key,v 1.1 2013/12/06 13:34:54 markus Exp $ |