=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/ssh/PROTOCOL.certkeys,v retrieving revision 1.9 retrieving revision 1.17 diff -u -r1.9 -r1.17 --- src/usr.bin/ssh/PROTOCOL.certkeys 2012/03/28 07:23:22 1.9 +++ src/usr.bin/ssh/PROTOCOL.certkeys 2019/11/25 00:57:51 1.17 @@ -25,6 +25,10 @@ acceptance of certified host keys, by adding a similar ability to specify CA keys in ~/.ssh/known_hosts. +All certificate types include certification information along with the +public key that is used to sign challenges. In OpenSSH, ssh-keygen +performs the CA signing operation. + Certified keys are represented using new key types: ssh-rsa-cert-v01@openssh.com @@ -32,11 +36,20 @@ ecdsa-sha2-nistp256-cert-v01@openssh.com ecdsa-sha2-nistp384-cert-v01@openssh.com ecdsa-sha2-nistp521-cert-v01@openssh.com + ssh-ed25519-cert-v01@openssh.com -These include certification information along with the public key -that is used to sign challenges. ssh-keygen performs the CA signing -operation. +Two additional types exist for RSA certificates to force use of +SHA-2 signatures (SHA-256 and SHA-512 respectively): + rsa-sha2-256-cert-v01@openssh.com + rsa-sha2-512-cert-v01@openssh.com + +These RSA/SHA-2 types should not appear in keys at rest or transmitted +on their wire, but do appear in a SSH_MSG_KEXINIT's host-key algorithms +field or in the "public key algorithm name" field of a "publickey" +SSH_USERAUTH_REQUEST to indicate that the signature will use the +specified algorithm. + Protocol extensions ------------------- @@ -100,9 +113,9 @@ ECDSA certificate - string "ecdsa-sha2-nistp256@openssh.com" | - "ecdsa-sha2-nistp384@openssh.com" | - "ecdsa-sha2-nistp521@openssh.com" + string "ecdsa-sha2-nistp256-cert-v01@openssh.com" | + "ecdsa-sha2-nistp384-cert-v01@openssh.com" | + "ecdsa-sha2-nistp521-cert-v01@openssh.com" string nonce string curve string public_key @@ -118,6 +131,23 @@ string signature key string signature +ED25519 certificate + + string "ssh-ed25519-cert-v01@openssh.com" + string nonce + string pk + uint64 serial + uint32 type + string key id + string valid principals + uint64 valid after + uint64 valid before + string critical options + string extensions + string reserved + string signature key + string signature + The nonce field is a CA-provided random bitstring of arbitrary length (but typically 16 or 32 bytes) included to make attacks that depend on inducing collisions in the signature hash infeasible. @@ -129,6 +159,9 @@ curve and public key are respectively the ECDSA "[identifier]" and "Q" defined in section 3.1 of RFC5656. +pk is the encoded Ed25519 public key as defined by +draft-josefsson-eddsa-ed25519-03. + serial is an optional certificate serial number set by the CA to provide an abbreviated way to refer to certificates from that CA. If a CA does not wish to number its certificates it must set this @@ -146,7 +179,7 @@ certificate is valid; hostnames for SSH_CERT_TYPE_HOST certificates and usernames for SSH_CERT_TYPE_USER certificates. As a special case, a zero-length "valid principals" field means the certificate is valid for -any principal of the specified type. XXX DNS wildcards? +any principal of the specified type. "valid after" and "valid before" specify a validity period for the certificate. Each represents a time in seconds since 1970-01-01 @@ -154,7 +187,7 @@ valid after <= current time < valid before -criticial options is a set of zero or more key options encoded as +critical options is a set of zero or more key options encoded as below. All such options are "critical" in the sense that an implementation must refuse to authorise a key that has an unrecognised option. @@ -172,18 +205,19 @@ The reserved field is currently unused and is ignored in this version of the protocol. -signature key contains the CA key used to sign the certificate. -The valid key types for CA keys are ssh-rsa, ssh-dss and the ECDSA types -ecdsa-sha2-nistp256, ecdsa-sha2-nistp384, ecdsa-sha2-nistp521. "Chained" -certificates, where the signature key type is a certificate type itself -are NOT supported. Note that it is possible for a RSA certificate key to -be signed by a DSS or ECDSA CA key and vice-versa. +The signature key field contains the CA key used to sign the +certificate. The valid key types for CA keys are ssh-rsa, +ssh-dss, ssh-ed25519 and the ECDSA types ecdsa-sha2-nistp256, +ecdsa-sha2-nistp384, ecdsa-sha2-nistp521. "Chained" certificates, where +the signature key type is a certificate type itself are NOT supported. +Note that it is possible for a RSA certificate key to be signed by a +Ed25519 or ECDSA CA key and vice-versa. signature is computed over all preceding fields from the initial string up to, and including the signature key. Signatures are computed and encoded according to the rules defined for the CA's public key algorithm (RFC4253 section 6.6 for ssh-rsa and ssh-dss, RFC5656 for the ECDSA -types). +types), and draft-josefsson-eddsa-ed25519-03 for Ed25519. Critical options ---------------- @@ -203,9 +237,13 @@ "critical", if an implementation does not recognise a option then the validating party should refuse to accept the certificate. -The supported options and the contents and structure of their -data fields are: +Custom options should append the originating author or organisation's +domain name to the option name, e.g. "my-option@example.com". +No critical options are defined for host certificates at present. The +supported user certificate options and the contents and structure of +their data fields are: + Name Format Description ----------------------------------------------------------------------------- force-command string Specifies a command that is executed @@ -233,11 +271,22 @@ If an implementation does not recognise an extension, then it should ignore it. -The supported extensions and the contents and structure of their data -fields are: +Custom options should append the originating author or organisation's +domain name to the option name, e.g. "my-option@example.com". +No extensions are defined for host certificates at present. The +supported user certificate extensions and the contents and structure of +their data fields are: + Name Format Description ----------------------------------------------------------------------------- +no-presence-required empty Flag indicating that signatures made + with this certificate need not assert + user presence. This option only make + sense for the U2F/FIDO security key + types that support this feature in + their signature formats. + permit-X11-forwarding empty Flag indicating that X11 forwarding should be permitted. X11 forwarding will be refused if this option is absent. @@ -262,4 +311,4 @@ of this script will not be permitted if this option is not present. -$OpenBSD: PROTOCOL.certkeys,v 1.9 2012/03/28 07:23:22 djm Exp $ +$OpenBSD: PROTOCOL.certkeys,v 1.17 2019/11/25 00:57:51 djm Exp $