aboutsummaryrefslogtreecommitdiff
path: root/doc/draft-ietf-secsh-transport-16.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/draft-ietf-secsh-transport-16.txt')
-rw-r--r--doc/draft-ietf-secsh-transport-16.txt1624
1 files changed, 1624 insertions, 0 deletions
diff --git a/doc/draft-ietf-secsh-transport-16.txt b/doc/draft-ietf-secsh-transport-16.txt
new file mode 100644
index 0000000..b4564f1
--- /dev/null
+++ b/doc/draft-ietf-secsh-transport-16.txt
@@ -0,0 +1,1624 @@
+
+
+Network Working Group T. Ylonen
+Internet-Draft T. Kivinen
+Expires: January 12, 2004 SSH Communications Security Corp
+ M. Saarinen
+ University of Jyvaskyla
+ T. Rinne
+ S. Lehtinen
+ SSH Communications Security Corp
+ July 14, 2003
+
+
+ SSH Transport Layer Protocol
+ draft-ietf-secsh-transport-16.txt
+
+Status of this Memo
+
+ This document is an Internet-Draft and is in full conformance with
+ all provisions of Section 10 of RFC2026.
+
+ Internet-Drafts are working documents of the Internet Engineering
+ Task Force (IETF), its areas, and its working groups. Note that
+ other groups may also distribute working documents as Internet-
+ Drafts.
+
+ Internet-Drafts are draft documents valid for a maximum of six
+ months and may be updated, replaced, or obsoleted by other
+ documents at any time. It is inappropriate to use Internet-Drafts
+ as reference material or to cite them other than as "work in
+ progress."
+
+ The list of current Internet-Drafts can be accessed at
+ http://www.ietf.org/ietf/1id-abstracts.txt.
+
+ The list of Internet-Draft Shadow Directories can be accessed at
+ http://www.ietf.org/shadow.html.
+
+ This Internet-Draft will expire on January 12, 2004.
+
+Copyright Notice
+
+ Copyright (C) The Internet Society (2003). All Rights Reserved.
+
+Abstract
+
+ SSH is a protocol for secure remote login and other secure network
+ services over an insecure network.
+
+ This document describes the SSH transport layer protocol which
+ typically runs on top of TCP/IP. The protocol can be used as a
+
+
+
+Ylonen, et. al. Expires January 12, 2004 [Page 1]
+
+Internet-Draft SSH Transport Layer Protocol July 2003
+
+
+ basis for a number of secure network services. It provides strong
+ encryption, server authentication, and integrity protection. It
+ may also provide compression.
+
+ Key exchange method, public key algorithm, symmetric encryption
+ algorithm, message authentication algorithm, and hash algorithm
+ are all negotiated.
+
+ This document also describes the Diffie-Hellman key exchange
+ method and the minimal set of algorithms that are needed to
+ implement the SSH transport layer protocol.
+
+Table of Contents
+
+ 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4
+ 2. Conventions Used in This Document . . . . . . . . . . . . . . 4
+ 3. Connection Setup . . . . . . . . . . . . . . . . . . . . . . . 4
+ 3.1 Use over TCP/IP . . . . . . . . . . . . . . . . . . . . . . . 4
+ 3.2 Protocol Version Exchange . . . . . . . . . . . . . . . . . . 4
+ 3.3 Compatibility With Old SSH Versions . . . . . . . . . . . . . 5
+ 3.4 Old Client, New Server . . . . . . . . . . . . . . . . . . . . 5
+ 3.5 New Client, Old Server . . . . . . . . . . . . . . . . . . . . 6
+ 4. Binary Packet Protocol . . . . . . . . . . . . . . . . . . . . 6
+ 4.1 Maximum Packet Length . . . . . . . . . . . . . . . . . . . . 7
+ 4.2 Compression . . . . . . . . . . . . . . . . . . . . . . . . . 7
+ 4.3 Encryption . . . . . . . . . . . . . . . . . . . . . . . . . . 8
+ 4.4 Data Integrity . . . . . . . . . . . . . . . . . . . . . . . . 10
+ 4.5 Key Exchange Methods . . . . . . . . . . . . . . . . . . . . . 11
+ 4.6 Public Key Algorithms . . . . . . . . . . . . . . . . . . . . 11
+ 5. Key Exchange . . . . . . . . . . . . . . . . . . . . . . . . . 14
+ 5.1 Algorithm Negotiation . . . . . . . . . . . . . . . . . . . . 14
+ 5.2 Output from Key Exchange . . . . . . . . . . . . . . . . . . . 17
+ 5.3 Taking Keys Into Use . . . . . . . . . . . . . . . . . . . . . 18
+ 6. Diffie-Hellman Key Exchange . . . . . . . . . . . . . . . . . 19
+ 6.1 diffie-hellman-group1-sha1 . . . . . . . . . . . . . . . . . . 20
+ 7. Key Re-Exchange . . . . . . . . . . . . . . . . . . . . . . . 21
+ 8. Service Request . . . . . . . . . . . . . . . . . . . . . . . 22
+ 9. Additional Messages . . . . . . . . . . . . . . . . . . . . . 22
+ 9.1 Disconnection Message . . . . . . . . . . . . . . . . . . . . 23
+ 9.2 Ignored Data Message . . . . . . . . . . . . . . . . . . . . . 23
+ 9.3 Debug Message . . . . . . . . . . . . . . . . . . . . . . . . 24
+ 9.4 Reserved Messages . . . . . . . . . . . . . . . . . . . . . . 24
+ 10. Summary of Message Numbers . . . . . . . . . . . . . . . . . . 24
+ 11. Security Considerations . . . . . . . . . . . . . . . . . . . 25
+ 12. Intellectual Property . . . . . . . . . . . . . . . . . . . . 25
+ 13. Additional Information . . . . . . . . . . . . . . . . . . . . 25
+ References . . . . . . . . . . . . . . . . . . . . . . . . . . 26
+ Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . 27
+
+
+
+Ylonen, et. al. Expires January 12, 2004 [Page 2]
+
+Internet-Draft SSH Transport Layer Protocol July 2003
+
+
+ Full Copyright Statement . . . . . . . . . . . . . . . . . . . 29
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Ylonen, et. al. Expires January 12, 2004 [Page 3]
+
+Internet-Draft SSH Transport Layer Protocol July 2003
+
+
+ 1. Introduction
+
+ The SSH transport layer is a secure low level transport protocol.
+ It provides strong encryption, cryptographic host authentication,
+ and integrity protection.
+
+ Authentication in this protocol level is host-based; this protocol
+ does not perform user authentication. A higher level protocol for
+ user authentication can be designed on top of this protocol.
+
+ The protocol has been designed to be simple, flexible, to allow
+ parameter negotiation, and to minimize the number of round-trips.
+ Key exchange method, public key algorithm, symmetric encryption
+ algorithm, message authentication algorithm, and hash algorithm
+ are all negotiated. It is expected that in most environments,
+ only 2 round-trips will be needed for full key exchange, server
+ authentication, service request, and acceptance notification of
+ service request. The worst case is 3 round-trips.
+
+ 2. Conventions Used in This Document
+
+ The keywords "MUST", "MUST NOT", "REQUIRED", "SHOULD", "SHOULD
+ NOT", and "MAY" that appear in this document are to be interpreted
+ as described in [RFC2119]
+
+ The used data types and terminology are specified in the
+ architecture document [SSH-ARCH]
+
+ The architecture document also discusses the algorithm naming
+ conventions that MUST be used with the SSH protocols.
+
+ 3. Connection Setup
+
+ SSH works over any 8-bit clean, binary-transparent transport. The
+ underlying transport SHOULD protect against transmission errors as
+ such errors cause the SSH connection to terminate.
+
+ The client initiates the connection.
+
+ 3.1 Use over TCP/IP
+
+ When used over TCP/IP, the server normally listens for connections
+ on port 22. This port number has been registered with the IANA,
+ and has been officially assigned for SSH.
+
+ 3.2 Protocol Version Exchange
+
+ When the connection has been established, both sides MUST send an
+
+
+
+Ylonen, et. al. Expires January 12, 2004 [Page 4]
+
+Internet-Draft SSH Transport Layer Protocol July 2003
+
+
+ identification string of the form "SSH-protoversion-
+ softwareversion comments", followed by carriage return and newline
+ characters (ASCII 13 and 10, respectively). Both sides MUST be
+ able to process identification strings without carriage return
+ character. No null character is sent. The maximum length of the
+ string is 255 characters, including the carriage return and
+ newline.
+
+ The part of the identification string preceding carriage return
+ and newline is used in the Diffie-Hellman key exchange (see
+ Section Section 6).
+
+ The server MAY send other lines of data before sending the version
+ string. Each line SHOULD be terminated by a carriage return and
+ newline. Such lines MUST NOT begin with "SSH-", and SHOULD be
+ encoded in ISO-10646 UTF-8 [RFC2279] (language is not specified).
+ Clients MUST be able to process such lines; they MAY be silently
+ ignored, or MAY be displayed to the client user; if they are
+ displayed, control character filtering discussed in [SSH-ARCH]
+ SHOULD be used. The primary use of this feature is to allow TCP-
+ wrappers to display an error message before disconnecting.
+
+ Version strings MUST consist of printable US-ASCII characters, not
+ including whitespaces or a minus sign (-). The version string is
+ primarily used to trigger compatibility extensions and to indicate
+ the capabilities of an implementation. The comment string should
+ contain additional information that might be useful in solving
+ user problems.
+
+ The protocol version described in this document is 2.0.
+
+ Key exchange will begin immediately after sending this identifier.
+ All packets following the identification string SHALL use the
+ binary packet protocol, to be described below.
+
+ 3.3 Compatibility With Old SSH Versions
+
+ During the transition period, it is important to be able to work
+ in a way that is compatible with the installed SSH clients and
+ servers that use an older version of the protocol. Information in
+ this section is only relevant for implementations supporting
+ compatibility with SSH versions 1.x.
+
+ 3.4 Old Client, New Server
+
+ Server implementations MAY support a configurable "compatibility"
+ flag that enables compatibility with old versions. When this flag
+ is on, the server SHOULD identify its protocol version as "1.99".
+
+
+
+Ylonen, et. al. Expires January 12, 2004 [Page 5]
+
+Internet-Draft SSH Transport Layer Protocol July 2003
+
+
+ Clients using protocol 2.0 MUST be able to identify this as
+ identical to "2.0". In this mode the server SHOULD NOT send the
+ carriage return character (ASCII 13) after the version
+ identification string.
+
+ In the compatibility mode the server SHOULD NOT send any further
+ data after its initialization string until it has received an
+ identification string from the client. The server can then
+ determine whether the client is using an old protocol, and can
+ revert to the old protocol if required. In the compatibility
+ mode, the server MUST NOT send additional data before the version
+ string.
+
+ When compatibility with old clients is not needed, the server MAY
+ send its initial key exchange data immediately after the
+ identification string.
+
+ 3.5 New Client, Old Server
+
+ Since the new client MAY immediately send additional data after
+ its identification string (before receiving server's
+ identification), the old protocol may already have been corrupted
+ when the client learns that the server is old. When this happens,
+ the client SHOULD close the connection to the server, and
+ reconnect using the old protocol.
+
+ 4. Binary Packet Protocol
+
+ Each packet is in the following format:
+
+ uint32 packet_length
+ byte padding_length
+ byte[n1] payload; n1 = packet_length - padding_length - 1
+ byte[n2] random padding; n2 = padding_length
+ byte[m] mac (message authentication code); m = mac_length
+
+ packet_length
+ The length of the packet (bytes), not including MAC or the
+ packet_length field itself.
+
+ padding_length
+ Length of padding (bytes).
+
+ payload
+ The useful contents of the packet. If compression has been
+ negotiated, this field is compressed. Initially,
+ compression MUST be "none".
+
+
+
+
+Ylonen, et. al. Expires January 12, 2004 [Page 6]
+
+Internet-Draft SSH Transport Layer Protocol July 2003
+
+
+ random padding
+ Arbitrary-length padding, such that the total length of
+ (packet_length || padding_length || payload || padding) is a
+ multiple of the cipher block size or 8, whichever is larger.
+ There MUST be at least four bytes of padding. The padding
+ SHOULD consist of random bytes. The maximum amount of
+ padding is 255 bytes.
+
+ mac
+ Message authentication code. If message authentication has
+ been negotiated, this field contains the MAC bytes.
+ Initially, the MAC algorithm MUST be "none".
+
+
+ Note that length of the concatenation of packet length, padding
+ length, payload, and padding MUST be a multiple of the cipher
+ block size or 8, whichever is larger. This constraint MUST be
+ enforced even when using stream ciphers. Note that the packet
+ length field is also encrypted, and processing it requires special
+ care when sending or receiving packets.
+
+ The minimum size of a packet is 16 (or the cipher block size,
+ whichever is larger) bytes (plus MAC); implementations SHOULD
+ decrypt the length after receiving the first 8 (or cipher block
+ size, whichever is larger) bytes of a packet.
+
+ 4.1 Maximum Packet Length
+
+ All implementations MUST be able to process packets with
+ uncompressed payload length of 32768 bytes or less and total
+ packet size of 35000 bytes or less (including length, padding
+ length, payload, padding, and MAC.). The maximum of 35000 bytes
+ is an arbitrary chosen value larger than uncompressed size.
+ Implementations SHOULD support longer packets, where they might be
+ needed, e.g. if an implementation wants to send a very large
+ number of certificates. Such packets MAY be sent if the version
+ string indicates that the other party is able to process them.
+ However, implementations SHOULD check that the packet length is
+ reasonable for the implementation to avoid denial-of-service
+ and/or buffer overflow attacks.
+
+ 4.2 Compression
+
+ If compression has been negotiated, the payload field (and only
+ it) will be compressed using the negotiated algorithm. The length
+ field and MAC will be computed from the compressed payload.
+ Encryption will be done after compression.
+
+
+
+
+Ylonen, et. al. Expires January 12, 2004 [Page 7]
+
+Internet-Draft SSH Transport Layer Protocol July 2003
+
+
+ Compression MAY be stateful, depending on the method. Compression
+ MUST be independent for each direction, and implementations MUST
+ allow independently choosing the algorithm for each direction.
+
+ The following compression methods are currently defined:
+
+ none REQUIRED no compression
+ zlib OPTIONAL ZLIB (LZ77) compression
+
+ The "zlib" compression is described in [RFC1950] and in [RFC1951].
+ The compression context is initialized after each key exchange,
+ and is passed from one packet to the next with only a partial
+ flush being performed at the end of each packet. A partial flush
+ means that the current compressed block is ended and all data will
+ be output. If the current block is not a stored block, one or
+ more empty blocks are added after the current block to ensure that
+ there are at least 8 bits counting from the start of the end-of-
+ block code of the current block to the end of the packet payload.
+
+ Additional methods may be defined as specified in [SSH-ARCH].
+
+ 4.3 Encryption
+
+ An encryption algorithm and a key will be negotiated during the
+ key exchange. When encryption is in effect, the packet length,
+ padding length, payload and padding fields of each packet MUST be
+ encrypted with the given algorithm.
+
+ The encrypted data in all packets sent in one direction SHOULD be
+ considered a single data stream. For example, initialization
+ vectors SHOULD be passed from the end of one packet to the
+ beginning of the next packet. All ciphers SHOULD use keys with an
+ effective key length of 128 bits or more.
+
+ The ciphers in each direction MUST run independently of each
+ other, and implementations MUST allow independently choosing the
+ algorithm for each direction (if multiple algorithms are allowed
+ by local policy).
+
+ The following ciphers are currently defined:
+
+ 3des-cbc REQUIRED three-key 3DES in CBC mode
+ blowfish-cbc RECOMMENDED Blowfish in CBC mode
+ twofish256-cbc OPTIONAL Twofish in CBC mode,
+ with 256-bit key
+ twofish-cbc OPTIONAL alias for "twofish256-cbc" (this
+ is being retained for
+ historical reasons)
+
+
+
+Ylonen, et. al. Expires January 12, 2004 [Page 8]
+
+Internet-Draft SSH Transport Layer Protocol July 2003
+
+
+ twofish192-cbc OPTIONAL Twofish with 192-bit key
+ twofish128-cbc RECOMMENDED Twofish with 128-bit key
+ aes256-cbc OPTIONAL AES (Rijndael) in CBC mode,
+ with 256-bit key
+ aes192-cbc OPTIONAL AES with 192-bit key
+ aes128-cbc RECOMMENDED AES with 128-bit key
+ serpent256-cbc OPTIONAL Serpent in CBC mode, with
+ 256-bit key
+ serpent192-cbc OPTIONAL Serpent with 192-bit key
+ serpent128-cbc OPTIONAL Serpent with 128-bit key
+ arcfour OPTIONAL the ARCFOUR stream cipher
+ idea-cbc OPTIONAL IDEA in CBC mode
+ cast128-cbc OPTIONAL CAST-128 in CBC mode
+ none OPTIONAL no encryption; NOT RECOMMENDED
+
+ The "3des-cbc" cipher is three-key triple-DES (encrypt-decrypt-
+ encrypt), where the first 8 bytes of the key are used for the
+ first encryption, the next 8 bytes for the decryption, and the
+ following 8 bytes for the final encryption. This requires 24
+ bytes of key data (of which 168 bits are actually used). To
+ implement CBC mode, outer chaining MUST be used (i.e., there is
+ only one initialization vector). This is a block cipher with 8
+ byte blocks. This algorithm is defined in [SCHNEIER]
+
+ The "blowfish-cbc" cipher is Blowfish in CBC mode, with 128 bit
+ keys [SCHNEIER]. This is a block cipher with 8 byte blocks.
+
+ The "twofish-cbc" or "twofish256-cbc" cipher is Twofish in CBC
+ mode, with 256 bit keys as described [TWOFISH]. This is a block
+ cipher with 16 byte blocks.
+
+ The "twofish192-cbc" cipher. Same as above but with 192-bit key.
+
+ The "twofish128-cbc" cipher. Same as above but with 128-bit key.
+
+ The "aes256-cbc" cipher is AES (Advanced Encryption Standard),
+ formerly Rijndael, in CBC mode. This version uses 256-bit key.
+
+ The "aes192-cbc" cipher. Same as above but with 192-bit key.
+
+ The "aes128-cbc" cipher. Same as above but with 128-bit key.
+
+ The "serpent256-cbc" cipher in CBC mode, with 256-bit key as
+ described in the Serpent AES submission.
+
+ The "serpent192-cbc" cipher. Same as above but with 192-bit key.
+
+ The "serpent128-cbc" cipher. Same as above but with 128-bit key.
+
+
+
+Ylonen, et. al. Expires January 12, 2004 [Page 9]
+
+Internet-Draft SSH Transport Layer Protocol July 2003
+
+
+ The "arcfour" is the Arcfour stream cipher with 128 bit keys. The
+ Arcfour cipher is believed to be compatible with the RC4 cipher
+ [SCHNEIER]. RC4 is a registered trademark of RSA Data Security
+ Inc. Arcfour (and RC4) has problems with weak keys, and should be
+ used with caution.
+
+ The "idea-cbc" cipher is the IDEA cipher in CBC mode [SCHNEIER].
+ IDEA is patented by Ascom AG.
+
+ The "cast128-cbc" cipher is the CAST-128 cipher in CBC mode
+ [RFC2144].
+
+ The "none" algorithm specifies that no encryption is to be done.
+ Note that this method provides no confidentiality protection, and
+ it is not recommended. Some functionality (e.g. password
+ authentication) may be disabled for security reasons if this
+ cipher is chosen.
+
+ Additional methods may be defined as specified in [SSH-ARCH].
+
+ 4.4 Data Integrity
+
+ Data integrity is protected by including with each packet a
+ message authentication code (MAC) that is computed from a shared
+ secret, packet sequence number, and the contents of the packet.
+
+ The message authentication algorithm and key are negotiated during
+ key exchange. Initially, no MAC will be in effect, and its length
+ MUST be zero. After key exchange, the selected MAC will be
+ computed before encryption from the concatenation of packet data:
+
+ mac = MAC(key, sequence_number || unencrypted_packet)
+
+ where unencrypted_packet is the entire packet without MAC (the
+ length fields, payload and padding), and sequence_number is an
+ implicit packet sequence number represented as uint32. The
+ sequence number is initialized to zero for the first packet, and
+ is incremented after every packet (regardless of whether
+ encryption or MAC is in use). It is never reset, even if
+ keys/algorithms are renegotiated later. It wraps around to zero
+ after every 2^32 packets. The packet sequence number itself is
+ not included in the packet sent over the wire.
+
+ The MAC algorithms for each direction MUST run independently, and
+ implementations MUST allow choosing the algorithm independently
+ for both directions.
+
+ The MAC bytes resulting from the MAC algorithm MUST be transmitted
+
+
+
+Ylonen, et. al. Expires January 12, 2004 [Page 10]
+
+Internet-Draft SSH Transport Layer Protocol July 2003
+
+
+ without encryption as the last part of the packet. The number of
+ MAC bytes depends on the algorithm chosen.
+
+ The following MAC algorithms are currently defined:
+
+ hmac-sha1 REQUIRED HMAC-SHA1 (digest length = key
+ length = 20)
+ hmac-sha1-96 RECOMMENDED first 96 bits of HMAC-SHA1 (digest
+ length = 12, key length = 20)
+ hmac-md5 OPTIONAL HMAC-MD5 (digest length = key
+ length = 16)
+ hmac-md5-96 OPTIONAL first 96 bits of HMAC-MD5 (digest
+ length = 12, key length = 16)
+ none OPTIONAL no MAC; NOT RECOMMENDED
+
+ The "hmac-*" algorithms are described in [RFC2104] The "*-n" MACs
+ use only the first n bits of the resulting value.
+
+ The hash algorithms are described in [SCHNEIER].
+
+ Additional methods may be defined as specified in [SSH-ARCH].
+
+ 4.5 Key Exchange Methods
+
+ The key exchange method specifies how one-time session keys are
+ generated for encryption and for authentication, and how the
+ server authentication is done.
+
+ Only one REQUIRED key exchange method has been defined:
+
+ diffie-hellman-group1-sha1 REQUIRED
+
+ This method is described later in this document.
+
+ Additional methods may be defined as specified in [SSH-ARCH].
+
+ 4.6 Public Key Algorithms
+
+ This protocol has been designed to be able to operate with almost
+ any public key format, encoding, and algorithm (signature and/or
+ encryption).
+
+ There are several aspects that define a public key type:
+ o Key format: how is the key encoded and how are certificates
+ represented. The key blobs in this protocol MAY contain
+ certificates in addition to keys.
+ o Signature and/or encryption algorithms. Some key types may not
+ support both signing and encryption. Key usage may also be
+
+
+
+Ylonen, et. al. Expires January 12, 2004 [Page 11]
+
+Internet-Draft SSH Transport Layer Protocol July 2003
+
+
+ restricted by policy statements in e.g. certificates. In this
+ case, different key types SHOULD be defined for the different
+ policy alternatives.
+ o Encoding of signatures and/or encrypted data. This includes
+ but is not limited to padding, byte order, and data formats.
+
+ The following public key and/or certificate formats are currently defined:
+
+ ssh-dss REQUIRED sign Simple DSS
+ ssh-rsa RECOMMENDED sign Simple RSA
+ x509v3-sign-rsa OPTIONAL sign X.509 certificates (RSA key)
+ x509v3-sign-dss OPTIONAL sign X.509 certificates (DSS key)
+ spki-sign-rsa OPTIONAL sign SPKI certificates (RSA key)
+ spki-sign-dss OPTIONAL sign SPKI certificates (DSS key)
+ pgp-sign-rsa OPTIONAL sign OpenPGP certificates (RSA key)
+ pgp-sign-dss OPTIONAL sign OpenPGP certificates (DSS key)
+
+ Additional key types may be defined as specified in [SSH-ARCH].
+
+ The key type MUST always be explicitly known (from algorithm
+ negotiation or some other source). It is not normally included in
+ the key blob.
+
+ Certificates and public keys are encoded as follows:
+
+ string certificate or public key format identifier
+ byte[n] key/certificate data
+
+ The certificate part may have be a zero length string, but a
+ public key is required. This is the public key that will be used
+ for authentication; the certificate sequence contained in the
+ certificate blob can be used to provide authorization.
+
+ Public key / certifcate formats that do not explicitly specify a
+ signature format identifier MUST use the public key / certificate
+ format identifier as the signature identifier.
+
+ Signatures are encoded as follows:
+ string signature format identifier (as specified by the
+ public key / cert format)
+ byte[n] signature blob in format specific encoding.
+
+
+ The "ssh-dss" key format has the following specific encoding:
+
+ string "ssh-dss"
+ mpint p
+ mpint q
+
+
+
+Ylonen, et. al. Expires January 12, 2004 [Page 12]
+
+Internet-Draft SSH Transport Layer Protocol July 2003
+
+
+ mpint g
+ mpint y
+
+ Here the p, q, g, and y parameters form the signature key blob.
+
+ Signing and verifying using this key format is done according to
+ the Digital Signature Standard [FIPS-186] using the SHA-1 hash. A
+ description can also be found in [SCHNEIER].
+
+ The resulting signature is encoded as follows:
+
+ string "ssh-dss"
+ string dss_signature_blob
+
+ dss_signature_blob is encoded as a string containing r followed by
+ s (which are 160 bits long integers, without lengths or padding,
+ unsigned and in network byte order).
+
+ The "ssh-rsa" key format has the following specific encoding:
+
+ string "ssh-rsa"
+ mpint e
+ mpint n
+
+ Here the e and n parameters form the signature key blob.
+
+ Signing and verifying using this key format is done according to
+ [SCHNEIER] and [PKCS1] using the SHA-1 hash.
+
+ The resulting signature is encoded as follows:
+
+ string "ssh-rsa"
+ string rsa_signature_blob
+
+ rsa_signature_blob is encoded as a string containing s (which is
+ an integer, without lengths or padding, unsigned and in network
+ byte order).
+
+ The "spki-sign-rsa" method indicates that the certificate blob
+ contains a sequence of SPKI certificates. The format of SPKI
+ certificates is described in [RFC2693]. This method indicates
+ that the key (or one of the keys in the certificate) is an RSA-
+ key.
+
+ The "spki-sign-dss". As above, but indicates that the key (or one
+ of the keys in the certificate) is a DSS-key.
+
+ The "pgp-sign-rsa" method indicates the certificates, the public
+
+
+
+Ylonen, et. al. Expires January 12, 2004 [Page 13]
+
+Internet-Draft SSH Transport Layer Protocol July 2003
+
+
+ key, and the signature are in OpenPGP compatible binary format
+ ([RFC2440]). This method indicates that the key is an RSA-key.
+
+ The "pgp-sign-dss". As above, but indicates that the key is a
+ DSS-key.
+
+ 5. Key Exchange
+
+ Key exchange begins by each side sending lists of supported
+ algorithms. Each side has a preferred algorithm in each category,
+ and it is assumed that most implementations at any given time will
+ use the same preferred algorithm. Each side MAY guess which
+ algorithm the other side is using, and MAY send an initial key
+ exchange packet according to the algorithm if appropriate for the
+ preferred method.
+
+ Guess is considered wrong, if:
+ o the kex algorithm and/or the host key algorithm is guessed
+ wrong (server and client have different preferred algorithm),
+ or
+ o if any of the other algorithms cannot be agreed upon (the
+ procedure is defined below in Section Section 5.1).
+
+ Otherwise, the guess is considered to be right and the
+ optimistically sent packet MUST be handled as the first key
+ exchange packet.
+
+ However, if the guess was wrong, and a packet was optimistically
+ sent by one or both parties, such packets MUST be ignored (even if
+ the error in the guess would not affect the contents of the
+ initial packet(s)), and the appropriate side MUST send the correct
+ initial packet.
+
+ Server authentication in the key exchange MAY be implicit. After
+ a key exchange with implicit server authentication, the client
+ MUST wait for response to its service request message before
+ sending any further data.
+
+ 5.1 Algorithm Negotiation
+
+ Key exchange begins by each side sending the following packet:
+
+ byte SSH_MSG_KEXINIT
+ byte[16] cookie (random bytes)
+ string kex_algorithms
+ string server_host_key_algorithms
+ string encryption_algorithms_client_to_server
+ string encryption_algorithms_server_to_client
+
+
+
+Ylonen, et. al. Expires January 12, 2004 [Page 14]
+
+Internet-Draft SSH Transport Layer Protocol July 2003
+
+
+ string mac_algorithms_client_to_server
+ string mac_algorithms_server_to_client
+ string compression_algorithms_client_to_server
+ string compression_algorithms_server_to_client
+ string languages_client_to_server
+ string languages_server_to_client
+ boolean first_kex_packet_follows
+ uint32 0 (reserved for future extension)
+
+ Each of the algorithm strings MUST be a comma-separated list of
+ algorithm names (see ''Algorithm Naming'' in [SSH-ARCH]). Each
+ supported (allowed) algorithm MUST be listed in order of
+ preference.
+
+ The first algorithm in each list MUST be the preferred (guessed)
+ algorithm. Each string MUST contain at least one algorithm name.
+
+
+ cookie
+ The cookie MUST be a random value generated by the sender.
+ Its purpose is to make it impossible for either side to
+ fully determine the keys and the session identifier.
+
+ kex_algorithms
+ Key exchange algorithms were defined above. The first
+ algorithm MUST be the preferred (and guessed) algorithm. If
+ both sides make the same guess, that algorithm MUST be used.
+ Otherwise, the following algorithm MUST be used to choose a
+ key exchange method: iterate over client's kex algorithms,
+ one at a time. Choose the first algorithm that satisfies
+ the following conditions:
+ + the server also supports the algorithm,
+ + if the algorithm requires an encryption-capable host key,
+ there is an encryption-capable algorithm on the server's
+ server_host_key_algorithms that is also supported by the
+ client, and
+ + if the algorithm requires a signature-capable host key,
+ there is a signature-capable algorithm on the server's
+ server_host_key_algorithms that is also supported by the
+ client.
+ + If no algorithm satisfying all these conditions can be
+ found, the connection fails, and both sides MUST
+ disconnect.
+
+ server_host_key_algorithms
+ List of the algorithms supported for the server host key.
+ The server lists the algorithms for which it has host keys;
+ the client lists the algorithms that it is willing to
+
+
+
+Ylonen, et. al. Expires January 12, 2004 [Page 15]
+
+Internet-Draft SSH Transport Layer Protocol July 2003
+
+
+ accept. (There MAY be multiple host keys for a host,
+ possibly with different algorithms.)
+
+ Some host keys may not support both signatures and
+ encryption (this can be determined from the algorithm), and
+ thus not all host keys are valid for all key exchange
+ methods.
+
+ Algorithm selection depends on whether the chosen key
+ exchange algorithm requires a signature or encryption
+ capable host key. It MUST be possible to determine this
+ from the public key algorithm name. The first algorithm on
+ the client's list that satisfies the requirements and is
+ also supported by the server MUST be chosen. If there is no
+ such algorithm, both sides MUST disconnect.
+
+ encryption_algorithms
+ Lists the acceptable symmetric encryption algorithms in
+ order of preference. The chosen encryption algorithm to
+ each direction MUST be the first algorithm on the client's
+ list that is also on the server's list. If there is no such
+ algorithm, both sides MUST disconnect.
+
+ Note that "none" must be explicitly listed if it is to be
+ acceptable. The defined algorithm names are listed in
+ Section Section 4.3.
+
+ mac_algorithms
+ Lists the acceptable MAC algorithms in order of preference.
+ The chosen MAC algorithm MUST be the first algorithm on the
+ client's list that is also on the server's list. If there
+ is no such algorithm, both sides MUST disconnect.
+
+ Note that "none" must be explicitly listed if it is to be
+ acceptable. The MAC algorithm names are listed in Section
+ Figure 1.
+
+ compression_algorithms
+ Lists the acceptable compression algorithms in order of
+ preference. The chosen compression algorithm MUST be the
+ first algorithm on the client's list that is also on the
+ server's list. If there is no such algorithm, both sides
+ MUST disconnect.
+
+ Note that "none" must be explicitly listed if it is to be
+ acceptable. The compression algorithm names are listed in
+ Section Section 4.2.
+
+
+
+
+Ylonen, et. al. Expires January 12, 2004 [Page 16]
+
+Internet-Draft SSH Transport Layer Protocol July 2003
+
+
+ languages
+ This is a comma-separated list of language tags in order of
+ preference [RFC1766]. Both parties MAY ignore this list.
+ If there are no language preferences, this list SHOULD be
+ empty.
+
+ first_kex_packet_follows
+ Indicates whether a guessed key exchange packet follows. If
+ a guessed packet will be sent, this MUST be TRUE. If no
+ guessed packet will be sent, this MUST be FALSE.
+
+ After receiving the SSH_MSG_KEXINIT packet from the other
+ side, each party will know whether their guess was right.
+ If the other party's guess was wrong, and this field was
+ TRUE, the next packet MUST be silently ignored, and both
+ sides MUST then act as determined by the negotiated key
+ exchange method. If the guess was right, key exchange MUST
+ continue using the guessed packet.
+
+ After the KEXINIT packet exchange, the key exchange algorithm is
+ run. It may involve several packet exchanges, as specified by the
+ key exchange method.
+
+ 5.2 Output from Key Exchange
+
+ The key exchange produces two values: a shared secret K, and an
+ exchange hash H. Encryption and authentication keys are derived
+ from these. The exchange hash H from the first key exchange is
+ additionally used as the session identifier, which is a unique
+ identifier for this connection. It is used by authentication
+ methods as a part of the data that is signed as a proof of
+ possession of a private key. Once computed, the session
+ identifier is not changed, even if keys are later re-exchanged.
+
+
+ Each key exchange method specifies a hash function that is used in
+ the key exchange. The same hash algorithm MUST be used in key
+ derivation. Here, we'll call it HASH.
+
+
+ Encryption keys MUST be computed as HASH of a known value and K as
+ follows:
+ o Initial IV client to server: HASH(K || H || "A" || session_id)
+ (Here K is encoded as mpint and "A" as byte and session_id as
+ raw data."A" means the single character A, ASCII 65).
+ o Initial IV server to client: HASH(K || H || "B" || session_id)
+ o Encryption key client to server: HASH(K || H || "C" ||
+ session_id)
+
+
+
+Ylonen, et. al. Expires January 12, 2004 [Page 17]
+
+Internet-Draft SSH Transport Layer Protocol July 2003
+
+
+ o Encryption key server to client: HASH(K || H || "D" ||
+ session_id)
+ o Integrity key client to server: HASH(K || H || "E" ||
+ session_id)
+ o Integrity key server to client: HASH(K || H || "F" ||
+ session_id)
+
+ Key data MUST be taken from the beginning of the hash output. 128
+ bits (16 bytes) SHOULD be used for algorithms with variable-length
+ keys. For other algorithms, as many bytes as are needed are taken
+ from the beginning of the hash value. If the key length in longer
+ than the output of the HASH, the key is extended by computing HASH
+ of the concatenation of K and H and the entire key so far, and
+ appending the resulting bytes (as many as HASH generates) to the
+ key. This process is repeated until enough key material is
+ available; the key is taken from the beginning of this value. In
+ other words:
+
+ K1 = HASH(K || H || X || session_id) (X is e.g. "A")
+ K2 = HASH(K || H || K1)
+ K3 = HASH(K || H || K1 || K2)
+ ...
+ key = K1 || K2 || K3 || ...
+
+ This process will lose entropy if the amount of entropy in K is
+ larger than the internal state size of HASH.
+
+ 5.3 Taking Keys Into Use
+
+ Key exchange ends by each side sending an SSH_MSG_NEWKEYS message.
+ This message is sent with the old keys and algorithms. All
+ messages sent after this message MUST use the new keys and
+ algorithms.
+
+
+ When this message is received, the new keys and algorithms MUST be
+ taken into use for receiving.
+
+
+ This message is the only valid message after key exchange, in
+ addition to SSH_MSG_DEBUG, SSH_MSG_DISCONNECT and SSH_MSG_IGNORE
+ messages. The purpose of this message is to ensure that a party
+ is able to respond with a disconnect message that the other party
+ can understand if something goes wrong with the key exchange.
+ Implementations MUST NOT accept any other messages after key
+ exchange before receiving SSH_MSG_NEWKEYS.
+
+ byte SSH_MSG_NEWKEYS
+
+
+
+Ylonen, et. al. Expires January 12, 2004 [Page 18]
+
+Internet-Draft SSH Transport Layer Protocol July 2003
+
+
+ 6. Diffie-Hellman Key Exchange
+
+ The Diffie-Hellman key exchange provides a shared secret that can
+ not be determined by either party alone. The key exchange is
+ combined with a signature with the host key to provide host
+ authentication.
+
+
+ In the following description (C is the client, S is the server; p
+ is a large safe prime, g is a generator for a subgroup of GF(p),
+ and q is the order of the subgroup; V_S is S's version string; V_C
+ is C's version string; K_S is S's public host key; I_C is C's
+ KEXINIT message and I_S S's KEXINIT message which have been
+ exchanged before this part begins):
+
+
+ 1. C generates a random number x (1 < x < q) and computes e = g^x
+ mod p. C sends "e" to S.
+
+ 2. S generates a random number y (0 < y < q) and computes f = g^y
+ mod p. S receives "e". It computes K = e^y mod p, H =
+ hash(V_C || V_S || I_C || I_S || K_S || e || f || K) (these
+ elements are encoded according to their types; see below), and
+ signature s on H with its private host key. S sends "K_S || f
+ || s" to C. The signing operation may involve a second
+ hashing operation.
+
+ 3. C verifies that K_S really is the host key for S (e.g. using
+ certificates or a local database). C is also allowed to
+ accept the key without verification; however, doing so will
+ render the protocol insecure against active attacks (but may
+ be desirable for practical reasons in the short term in many
+ environments). C then computes K = f^x mod p, H = hash(V_C ||
+ V_S || I_C || I_S || K_S || e || f || K), and verifies the
+ signature s on H.
+
+ Either side MUST NOT send or accept e or f values that are not in
+ the range [1, p-1]. If this condition is violated, the key
+ exchange fails.
+
+
+ This is implemented with the following messages. The hash
+ algorithm for computing the exchange hash is defined by the method
+ name, and is called HASH. The public key algorithm for signing is
+ negotiated with the KEXINIT messages.
+
+ First, the client sends the following:
+
+
+
+
+Ylonen, et. al. Expires January 12, 2004 [Page 19]
+
+Internet-Draft SSH Transport Layer Protocol July 2003
+
+
+ byte SSH_MSG_KEXDH_INIT
+ mpint e
+
+
+ The server responds with the following:
+
+ byte SSH_MSG_KEXDH_REPLY
+ string server public host key and certificates (K_S)
+ mpint f
+ string signature of H
+
+ The hash H is computed as the HASH hash of the concatenation of
+ the following:
+
+ string V_C, the client's version string (CR and NL excluded)
+ string V_S, the server's version string (CR and NL excluded)
+ string I_C, the payload of the client's SSH_MSG_KEXINIT
+ string I_S, the payload of the server's SSH_MSG_KEXINIT
+ string K_S, the host key
+ mpint e, exchange value sent by the client
+ mpint f, exchange value sent by the server
+ mpint K, the shared secret
+
+ This value is called the exchange hash, and it is used to
+ authenticate the key exchange. The exchange hash SHOULD be kept
+ secret.
+
+
+ The signature algorithm MUST be applied over H, not the original
+ data. Most signature algorithms include hashing and additional
+ padding. For example, "ssh-dss" specifies SHA-1 hashing; in that
+ case, the data is first hashed with HASH to compute H, and H is
+ then hashed with SHA-1 as part of the signing operation.
+
+ 6.1 diffie-hellman-group1-sha1
+
+ The "diffie-hellman-group1-sha1" method specifies Diffie-Hellman
+ key exchange with SHA-1 as HASH, and the following group:
+
+ The prime p is equal to 2^1024 - 2^960 - 1 + 2^64 * floor( 2^894
+ Pi + 129093 ). Its hexadecimal value is:
+
+ FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1
+ 29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD
+ EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245
+ E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED
+ EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE65381
+ FFFFFFFF FFFFFFFF.
+
+
+
+Ylonen, et. al. Expires January 12, 2004 [Page 20]
+
+Internet-Draft SSH Transport Layer Protocol July 2003
+
+
+ In decimal, this value is:
+
+ 179769313486231590770839156793787453197860296048756011706444
+ 423684197180216158519368947833795864925541502180565485980503
+ 646440548199239100050792877003355816639229553136239076508735
+ 759914822574862575007425302077447712589550957937778424442426
+ 617334727629299387668709205606050270810842907692932019128194
+ 467627007.
+
+ The generator used with this prime is g = 2. The group order q is
+ (p - 1) / 2.
+
+ This group was taken from the ISAKMP/Oakley specification, and was
+ originally generated by Richard Schroeppel at the University of
+ Arizona. Properties of this prime are described in [Orm96].
+
+ 7. Key Re-Exchange
+
+ Key re-exchange is started by sending an SSH_MSG_KEXINIT packet
+ when not already doing a key exchange (as described in Section
+ Section 5.1). When this message is received, a party MUST respond
+ with its own SSH_MSG_KEXINIT message except when the received
+ SSH_MSG_KEXINIT already was a reply. Either party MAY initiate
+ the re-exchange, but roles MUST NOT be changed (i.e., the server
+ remains the server, and the client remains the client).
+
+
+ Key re-exchange is performed using whatever encryption was in
+ effect when the exchange was started. Encryption, compression,
+ and MAC methods are not changed before a new SSH_MSG_NEWKEYS is
+ sent after the key exchange (as in the initial key exchange). Re-
+ exchange is processed identically to the initial key exchange,
+ except for the session identifier that will remain unchanged. It
+ is permissible to change some or all of the algorithms during the
+ re-exchange. Host keys can also change. All keys and
+ initialization vectors are recomputed after the exchange.
+ Compression and encryption contexts are reset.
+
+
+ It is recommended that the keys are changed after each gigabyte of
+ transmitted data or after each hour of connection time, whichever
+ comes sooner. However, since the re-exchange is a public key
+ operation, it requires a fair amount of processing power and
+ should not be performed too often.
+
+
+ More application data may be sent after the SSH_MSG_NEWKEYS packet
+ has been sent; key exchange does not affect the protocols that lie
+
+
+
+Ylonen, et. al. Expires January 12, 2004 [Page 21]
+
+Internet-Draft SSH Transport Layer Protocol July 2003
+
+
+ above the SSH transport layer.
+
+ 8. Service Request
+
+ After the key exchange, the client requests a service. The
+ service is identified by a name. The format of names and
+ procedures for defining new names are defined in [SSH-ARCH].
+
+
+ Currently, the following names have been reserved:
+
+ ssh-userauth
+ ssh-connection
+
+ Similar local naming policy is applied to the service names, as is
+ applied to the algorithm names; a local service should use the
+ "servicename@domain" syntax.
+
+ byte SSH_MSG_SERVICE_REQUEST
+ string service name
+
+ If the server rejects the service request, it SHOULD send an
+ appropriate SSH_MSG_DISCONNECT message and MUST disconnect.
+
+
+ When the service starts, it may have access to the session
+ identifier generated during the key exchange.
+
+
+ If the server supports the service (and permits the client to use
+ it), it MUST respond with the following:
+
+ byte SSH_MSG_SERVICE_ACCEPT
+ string service name
+
+ Message numbers used by services should be in the area reserved
+ for them (see Section 6 in [SSH-ARCH]). The transport level will
+ continue to process its own messages.
+
+
+ Note that after a key exchange with implicit server
+ authentication, the client MUST wait for response to its service
+ request message before sending any further data.
+
+ 9. Additional Messages
+
+ Either party may send any of the following messages at any time.
+
+
+
+
+Ylonen, et. al. Expires January 12, 2004 [Page 22]
+
+Internet-Draft SSH Transport Layer Protocol July 2003
+
+
+ 9.1 Disconnection Message
+
+ byte SSH_MSG_DISCONNECT
+ uint32 reason code
+ string description [RFC2279]
+ string language tag [RFC1766]
+
+ This message causes immediate termination of the connection. All
+ implementations MUST be able to process this message; they SHOULD
+ be able to send this message.
+
+ The sender MUST NOT send or receive any data after this message,
+ and the recipient MUST NOT accept any data after receiving this
+ message. The description field gives a more specific explanation
+ in a human-readable form. The error code gives the reason in a
+ more machine-readable format (suitable for localization), and can
+ have the following values:
+
+ #define SSH_DISCONNECT_HOST_NOT_ALLOWED_TO_CONNECT 1
+ #define SSH_DISCONNECT_PROTOCOL_ERROR 2
+ #define SSH_DISCONNECT_KEY_EXCHANGE_FAILED 3
+ #define SSH_DISCONNECT_RESERVED 4
+ #define SSH_DISCONNECT_MAC_ERROR 5
+ #define SSH_DISCONNECT_COMPRESSION_ERROR 6
+ #define SSH_DISCONNECT_SERVICE_NOT_AVAILABLE 7
+ #define SSH_DISCONNECT_PROTOCOL_VERSION_NOT_SUPPORTED 8
+ #define SSH_DISCONNECT_HOST_KEY_NOT_VERIFIABLE 9
+ #define SSH_DISCONNECT_CONNECTION_LOST 10
+ #define SSH_DISCONNECT_BY_APPLICATION 11
+ #define SSH_DISCONNECT_TOO_MANY_CONNECTIONS 12
+ #define SSH_DISCONNECT_AUTH_CANCELLED_BY_USER 13
+ #define SSH_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE 14
+ #define SSH_DISCONNECT_ILLEGAL_USER_NAME 15
+
+ If the description string is displayed, control character
+ filtering discussed in [SSH-ARCH] should be used to avoid attacks
+ by sending terminal control characters.
+
+ 9.2 Ignored Data Message
+
+ byte SSH_MSG_IGNORE
+ string data
+
+ All implementations MUST understand (and ignore) this message at
+ any time (after receiving the protocol version). No
+ implementation is required to send them. This message can be used
+ as an additional protection measure against advanced traffic
+ analysis techniques.
+
+
+
+Ylonen, et. al. Expires January 12, 2004 [Page 23]
+
+Internet-Draft SSH Transport Layer Protocol July 2003
+
+
+ 9.3 Debug Message
+
+ byte SSH_MSG_DEBUG
+ boolean always_display
+ string message [RFC2279]
+ string language tag [RFC1766]
+
+ All implementations MUST understand this message, but they are
+ allowed to ignore it. This message is used to pass the other side
+ information that may help debugging. If always_display is TRUE,
+ the message SHOULD be displayed. Otherwise, it SHOULD NOT be
+ displayed unless debugging information has been explicitly
+ requested by the user.
+
+
+ The message doesn't need to contain a newline. It is, however,
+ allowed to consist of multiple lines separated by CRLF (Carriage
+ Return - Line Feed) pairs.
+
+
+ If the message string is displayed, terminal control character
+ filtering discussed in [SSH-ARCH] should be used to avoid attacks
+ by sending terminal control characters.
+
+ 9.4 Reserved Messages
+
+ An implementation MUST respond to all unrecognized messages with
+ an SSH_MSG_UNIMPLEMENTED message in the order in which the
+ messages were received. Such messages MUST be otherwise ignored.
+ Later protocol versions may define other meanings for these
+ message types.
+
+ byte SSH_MSG_UNIMPLEMENTED
+ uint32 packet sequence number of rejected message
+
+
+ 10. Summary of Message Numbers
+
+ The following message numbers have been defined in this protocol:
+
+ #define SSH_MSG_DISCONNECT 1
+ #define SSH_MSG_IGNORE 2
+ #define SSH_MSG_UNIMPLEMENTED 3
+ #define SSH_MSG_DEBUG 4
+ #define SSH_MSG_SERVICE_REQUEST 5
+ #define SSH_MSG_SERVICE_ACCEPT 6
+
+ #define SSH_MSG_KEXINIT 20
+
+
+
+Ylonen, et. al. Expires January 12, 2004 [Page 24]
+
+Internet-Draft SSH Transport Layer Protocol July 2003
+
+
+ #define SSH_MSG_NEWKEYS 21
+
+ /* Numbers 30-49 used for kex packets.
+ Different kex methods may reuse message numbers in
+ this range. */
+
+ #define SSH_MSG_KEXDH_INIT 30
+ #define SSH_MSG_KEXDH_REPLY 31
+
+
+ 11. Security Considerations
+
+ This protocol provides a secure encrypted channel over an insecure
+ network. It performs server host authentication, key exchange,
+ encryption, and integrity protection. It also derives a unique
+ session id that may be used by higher-level protocols.
+
+ Full security considerations for this protocol are provided in
+ Section 8 of [SSH-ARCH]
+
+ 12. Intellectual Property
+
+ The IETF takes no position regarding the validity or scope of any
+ intellectual property or other rights that might be claimed to
+ pertain to the implementation or use of the technology described
+ in this document or the extent to which any license under such
+ rights might or might not be available; neither does it represent
+ that it has made any effort to identify any such rights.
+ Information on the IETF's procedures with respect to rights in
+ standards-track and standards-related documentation can be found
+ in BCP-11. Copies of claims of rights made available for
+ publication and any assurances of licenses to be made available,
+ or the result of an attempt made to obtain a general license or
+ permission for the use of such proprietary rights by implementers
+ or users of this specification can be obtained from the IETF
+ Secretariat.
+
+ The IETF has been notified of intellectual property rights claimed
+ in regard to some or all of the specification contained in this
+ document. For more information consult the online list of claimed
+ rights.
+
+ 13. Additional Information
+
+ The current document editor is: Darren.Moffat@Sun.COM. Comments
+ on this internet draft should be sent to the IETF SECSH working
+ group, details at: http://ietf.org/html.charters/secsh-
+ charter.html
+
+
+
+Ylonen, et. al. Expires January 12, 2004 [Page 25]
+
+Internet-Draft SSH Transport Layer Protocol July 2003
+
+
+References
+
+ [FIPS-186] Federal Information Processing Standards
+ Publication, ., "FIPS PUB 186, Digital Signature
+ Standard", May 1994.
+
+ [Orm96] Orman, H., "The Okaley Key Determination Protcol
+ version1, TR97-92", 1996.
+
+ [RFC2459] Housley, R., Ford, W., Polk, W. and D. Solo,
+ "Internet X.509 Public Key Infrastructure
+ Certificate and CRL Profile", RFC 2459, January
+ 1999.
+
+ [RFC1034] Mockapetris, P., "Domain names - concepts and
+ facilities", STD 13, RFC 1034, Nov 1987.
+
+ [RFC1766] Alvestrand, H., "Tags for the Identification of
+ Languages", RFC 1766, March 1995.
+
+ [RFC1950] Deutsch, P. and J-L. Gailly, "ZLIB Compressed Data
+ Format Specification version 3.3", RFC 1950, May
+ 1996.
+
+ [RFC1951] Deutsch, P., "DEFLATE Compressed Data Format
+ Specification version 1.3", RFC 1951, May 1996.
+
+ [RFC2279] Yergeau, F., "UTF-8, a transformation format of
+ ISO 10646", RFC 2279, January 1998.
+
+ [RFC2104] Krawczyk, H., Bellare, M. and R. Canetti, "HMAC:
+ Keyed-Hashing for Message Authentication", RFC
+ 2104, February 1997.
+
+ [RFC2119] Bradner, S., "Key words for use in RFCs to
+ Indicate Requirement Levels", BCP 14, RFC 2119,
+ March 1997.
+
+ [RFC2144] Adams, C., "The CAST-128 Encryption Algorithm",
+ RFC 2144, May 1997.
+
+ [RFC2440] Callas, J., Donnerhacke, L., Finney, H. and R.
+ Thayer, "OpenPGP Message Format", RFC 2440,
+ November 1998.
+
+ [RFC2693] Ellison, C., Frantz, B., Lampson, B., Rivest, R.,
+ Thomas, B. and T. Ylonen, "SPKI Certificate
+ Theory", RFC 2693, September 1999.
+
+
+
+Ylonen, et. al. Expires January 12, 2004 [Page 26]
+
+Internet-Draft SSH Transport Layer Protocol July 2003
+
+
+ [SCHNEIER] Schneier, B., "Applied Cryptography Second
+ Edition: protocols algorithms and source in code
+ in C", 1996.
+
+ [TWOFISH] Schneier, B., "The Twofish Encryptions Algorithm:
+ A 128-Bit Block Cipher, 1st Edition", March 1999.
+
+ [SSH-ARCH] Ylonen, T., "SSH Protocol Architecture", I-D
+ draft-ietf-architecture-14.txt, July 2003.
+
+ [SSH-TRANS] Ylonen, T., "SSH Transport Layer Protocol", I-D
+ draft-ietf-transport-16.txt, July 2003.
+
+ [SSH-USERAUTH] Ylonen, T., "SSH Authentication Protocol", I-D
+ draft-ietf-userauth-17.txt, July 2003.
+
+ [SSH-CONNECT] Ylonen, T., "SSH Connection Protocol", I-D draft-
+ ietf-connect-17.txt, July 2003.
+
+ [SSH-NUMBERS] Lehtinen, S. and D. Moffat, "SSH Protocol Assigned
+ Numbers", I-D draft-ietf-secsh-assignednumbers-
+ 03.txt, July 2003.
+
+
+Authors' Addresses
+
+ Tatu Ylonen
+ SSH Communications Security Corp
+ Fredrikinkatu 42
+ HELSINKI FIN-00100
+ Finland
+
+ EMail: ylo@ssh.com
+
+
+ Tero Kivinen
+ SSH Communications Security Corp
+ Fredrikinkatu 42
+ HELSINKI FIN-00100
+ Finland
+
+ EMail: kivinen@ssh.com
+
+
+ Markku-Juhani O. Saarinen
+ University of Jyvaskyla
+
+
+
+
+
+Ylonen, et. al. Expires January 12, 2004 [Page 27]
+
+Internet-Draft SSH Transport Layer Protocol July 2003
+
+
+ Timo J. Rinne
+ SSH Communications Security Corp
+ Fredrikinkatu 42
+ HELSINKI FIN-00100
+ Finland
+
+ EMail: tri@ssh.com
+
+
+ Sami Lehtinen
+ SSH Communications Security Corp
+ Fredrikinkatu 42
+ HELSINKI FIN-00100
+ Finland
+
+ EMail: sjl@ssh.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Ylonen, et. al. Expires January 12, 2004 [Page 28]
+
+Internet-Draft SSH Transport Layer Protocol July 2003
+
+
+Full Copyright Statement
+
+ Copyright (C) The Internet Society (2003). All Rights Reserved.
+
+ This document and translations of it may be copied and furnished
+ to others, and derivative works that comment on or otherwise
+ explain it or assist in its implementation may be prepared,
+ copied, published and distributed, in whole or in part, without
+ restriction of any kind, provided that the above copyright notice
+ and this paragraph are included on all such copies and derivative
+ works. However, this document itself may not be modified in any
+ way, such as by removing the copyright notice or references to the
+ Internet Society or other Internet organizations, except as needed
+ for the purpose of developing Internet standards in which case the
+ procedures for copyrights defined in the Internet Standards
+ process must be followed, or as required to translate it into
+ languages other than English.
+
+ The limited permissions granted above are perpetual and will not
+ be revoked by the Internet Society or its successors or assigns.
+
+ This document and the information contained herein is provided on
+ an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET
+ ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF
+ THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
+ WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+
+Acknowledgement
+
+ Funding for the RFC Editor function is currently provided by the
+ Internet Society.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Ylonen, et. al. Expires January 12, 2004 [Page 29]
+