Internet DRAFT - draft-galb-secsh-publickey-channel

draft-galb-secsh-publickey-channel



Network Working Group                                      J. Galbraith
INTERNET-DRAFT                                              J. Van Dyke
Expires May 2001                                  Van Dyke Technologies
                                                          November 2000


                      Secure Shell Public Key Channel

               < draft-galb-secsh-publickey-channel-00.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.

Abstract

   SECSH defines an authentication mechanism that is based on public
   keys, but does not define any mechanism for key distribution.
   No common key management solution exists in current implementations.
   This document describes a channel that can be used to configure
   public keys in an implementation-independent fashion, allowing
   client software to take on the burden of this configuration.

   The public key channel provides a server-independent mechanism
   for clients to add public keys, remove public keys, and list
   the current public keys known by the server. Rights to manage
   public keys are specific and limited to the authenticated user.

   A public key may also be associated with a mandatory command.

1. Introduction

   SECSH is a protocol for secure remote login and other secure network
   services over an insecure network. SECSH defines an authentication
   mechanism that is based on public keys, but does not define any
   mechanism for key distribution. Common practice is to authenticate
   once with password authentication and transfer the public key to the
   server.  However, to date no two implementations use the same
   mechanism to configure a public key for use.

   This document describes a channel that can be used to configure
   public keys in an implementation-independent fashion. This approach
   allows client software to take on the burden of this configuration.
   The public key channel protocol is designed for extreme simplicity
   in implementation. It is not intended as a PKIX replacement.

   The Secure Shell Public Key Channel has been designed to run on
   top of the SECSH transport layer [SSH-TRANS] and user authentication
   protocols [SSH-AUTH].  It provides a simple mechanism for the client
   to manage public keys on the server.

   This document should be read only after reading the SECSH
   architecture [SSH-ARCH] and SECSH connection [SSH-CONN] documents.

   The protocol requires that the user be able to authenticate in some
   fashion before it can be used. If password authentication is used,
   servers SHOULD provide a configuration option to disable the use of
   password authentication after the first public key is added.

2. Public Key Channel Overview

   The public key channel provides a server-independent mechanism for
   clients to add public keys, remove public keys, and list the current
   public keys known by the server.  The channel name is "publickey".

   The public keys added, removed, and listed using this channel are
   specific and limited to the authenticated user.

   All requests are sent as channel data and formatted using the
   SECSH packeting described in [SSH-TRANS].

   The format of public key blobs are detailed in the SSH Transport
   Protocol document [SSH-TRANS].

2.1 Opening a public key channel

   The SSH_MSG_CHANNEL_OPEN request is described in detail in the SECSH
   connection document [SSH-CONN].

   Before any request packets can be sent, the channel must be opened.
   In order to open a public key channel, the client sends:

     byte      SSH_MSG_CHANNEL_OPEN
     string    "publickey"
     uint32    sender channel
     uint32    initial window size
     uint32    maximum packet size

   The server SHOULD fail the open if the user authenticated with
   a restricted public key that does not allow access to the
   "publickey" channel.

   The server responds with either SSH_MSG_CHANNEL_OPEN_FAILURE or
   SSH_MSG_CHANNEL_OPEN_CONFIRMATION, as described in the SECSH
   connection document [SSH-CONN].

   Client implementations SHOULD reject these messages; they are
   normally only sent by the client.

2.2 Requests

   All requests are sent as SSH_MSG_CHANNEL_DATA packets.  A request
   is of the form:

     byte      SSH_MSG_CHANNEL_DATA
     uint32    recipient channel
     string    data

   The data is always of the form:

     string    request-name
     ... request specific data follows

   Each request MUST be sent as a single packet of channel data.

   The client MUST receive acknowledgement of each request prior to
   sending a new request.

   A request is acknowledged by sending a status packet. If there is
   data in response to the request, the status packet is sent after
   all data has been sent.

     string    "status"
     uint32    status code
     string    description [RFC-2044]
     string    language tag [RFC-1766]

   Status messages MUST be sent as a single packet of channel data.

   A status message MUST be sent for unrecognized packets and the
   request SHOULD NOT close the channel.

2.3 Status codes

   The status code gives the reason in a more machine-readable format
   (suitable for localization), and can have the following values:

      SUCCESS                          0
      ACCESS_DENIED                    1
      STORAGE_EXCEEDED                 2
      REQUEST_NOT_SUPPORTED            3
      KEY_NOT_FOUND                    4
      KEY_NOT_SUPPORTED                5
      GENERAL_FAILURE                  6

3.  "publickey" Channel Operations

   The "publickey" channel currently defines three operations:
   add, remove, and list.

3.1 Adding a public key

   If the client wishes to add a public key, the client sends:

     string    "publickey-add"
     string    comment
     string    public key algorithm name
     string    public key blob

   The server MUST attempt to store the public key for the user in the
   appropriate location so the public key can be used for subsequent
   public key authentications.

   The comment field contains user-specified text about the public key
   and may be empty.

3.2 Removing a public key

   If the client wishes to remove a public key, the client sends:

     string    "publickey-remove"
     string    public key algorithm name
     string    public key blob

   The server MUST attempt to remove the public key for the user from
   the appropriate location, so that the public key cannot be used for
   subsequent authentications.

3.3 Listing public keys

   If the client wishes to list the known public keys, the client
   sends:

     string    "publickey-list"

   The server will respond with zero or more of the following
   responses:

     string    "publickey"
     string    comment
     string    public key algorithm name
     string    public key blob

   The comment field contains user-specified text about the public key
   and may be empty.

   Each "publickey" response MUST be sent as a single packet of channel
   data.

   Following the last "publickey" response, a status packet MUST be
   sent.

   An implementation MAY choose not to support this request.

3.4 Associate public key with a mandatory command

   If the client wishes to associate a command with a specific public
   key, the client sends:

     string    "publickey-command"
     string    public key algorithm name
     string    public key blob
     string    command

   The request MUST fail if the public key does not already exist on
   the server.

   An implementation MAY choose not to support this request.

4. References

   [SSH-ARCH] Ylonen, T., et al, "SSH Protocol Architecture", Internet
   Draft, draft-secsh-architecture-05.txt

   [SSH-TRANS] Ylonen, T., et al, "SSH Transport Layer Protocol",
   Internet Draft, draft-secsh-transport-07.txt

   [SSH-USERAUTH] Ylonen, T., et al, "SSH Authentication Protocol",
   Internet Draft, draft-ietf-secsh-userauth-07.txt

   [SSH-CONNECT] Ylonen, T., et al, "SSH Connection Protocol", Internet
   Draft, draft-secsh-connect-07.txt

   [RFC-2279] Yergeau, F., "UTF-8, a Transformation Format of Unicode
   and ISO 10646", October 1996.

5. Author's addresses

   Joseph Galbraith
   Van Dyke Technologies, Inc.
   4848 Tramway Ridge Dr. NE
   Suite 101
   Albuquerque, NM 87111
   USA
   E-mail: galb@vandyke.com

   Jeff P. Van Dyke
   Van Dyke Technologies, Inc.
   4848 Tramway Ridge Dr. NE
   Suite 101
   Albuquerque, NM 87111
   USA
   E-mail: jpv@vandyke.com

This draft expires May 2001.