zoukankan      html  css  js  c++  java
  • ssh keyboard interactive

    http://www.snailbook.com/docs/keyboard-interactive.txt

    Network Working Group                                          F. Cusack
    INTERNET-DRAFT                                              Google, Inc.
    Expires November 1, 2004                                      M. Forssen
                                                                  Appgate AB
                                                                 May 1, 2004
    
    
    
    
                Generic Message Exchange Authentication For SSH
                   <draft-ietf-secsh-auth-kbdinteract-06.txt>
    
    Status of this Memo
    
       This document is an Internet-Draft and is subject to 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 November 1, 2004.
    
    Abstract
    
       SSH is a protocol for secure remote login and other secure network
       services over an insecure network.  This document describes a general
       purpose authentication method for the SSH protocol, suitable for
       interactive authentications where the authentication data should be
       entered via a keyboard.  The major goal of this method is to allow
       the SSH client to support a whole class of authentication
       mechanism(s) without knowing the specifics of the actual
       authentication mechanism(s).
    
    
    
    
    
    
    
    
    
    F. Cusack, M. Forssen   Expires November 1, 2004                [Page 1]
    
    Internet Draft   SSH Generic Interactive Authentication      May 1, 2004
    
    
    1. Introduction
    
       The SSH authentication protocol [SSH-USERAUTH] is a general-purpose
       user authentication protocol.  It is intended to be run over the SSH
       transport layer protocol [SSH-TRANS].  The authentication protocol
       assumes that the underlying protocols provide integrity and
       confidentiality protection.
    
       This document describes a general purpose authentication method for
       the SSH authentication protocol.  This method is suitable for
       interactive authentication methods which do not need any special
       software support on the client side.  Instead all authentication data
       should be entered via the keyboard.  The major goal of this method is
       to allow the SSH client to have little or no knowledge of the
       specifics of the underlying authentication mechanism(s) used by the
       SSH server.  This will allow the server to arbitrarily select or
       change the underlying authentication mechanism(s) without having to
       update client code.
    
       The name for this authentication method is "keyboard-interactive".
    
       This document should be read only after reading the SSH architecture
       document [SSH-ARCH] and the SSH authentication document
       [SSH-USERAUTH].  This document freely uses terminology and notation
       from both documents without reference or further explanation.
    
       This document also describes some of the client interaction with the
       user in obtaining the authentication information.  While this is
       somewhat out of the scope of a protocol specification, it is
       described here anyway since some aspects of the protocol are
       specifically designed based on user interface issues, and omitting
       this information may lead to incompatible or awkward implementations.
    
       The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
       "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
       document are to be interpreted as described in [RFC-2119].
    
    2. Rationale
    
       Currently defined authentication methods for SSH are tightly coupled
       with the underlying authentication mechanism.  This makes it
       difficult to add new mechanisms for authentication as all clients
       must be updated to support the new mechanism.  With the generic
       method defined here, clients will not require code changes to support
       new authentication mechanisms, and if a separate authentication layer
       is used, such as [PAM], then the server may not need any code changes
       either.
    
    
    
    
    F. Cusack, M. Forssen   Expires November 1, 2004                [Page 2]
    
    Internet Draft   SSH Generic Interactive Authentication      May 1, 2004
    
    
       This presents a significant advantage to other methods, such as the
       "password" method (defined in [SSH-USERAUTH]), as new (presumably
       stronger) methods may be added "at will" and system security can be
       transparently enhanced.
    
       Challenge-response and One Time Password mechanisms are also easily
       supported with this authentication method.
    
       This authentication method is however limited to authentication
       mechanisms which do not require any special code, such as hardware
       drivers or password mangling, on the client.
    
    3. Protocol Exchanges
    
       The client initiates the authentication with a
       SSH_MSG_USERAUTH_REQUEST message.  The server then requests
       authentication information from the client with a
       SSH_MSG_USERAUTH_INFO_REQUEST message.  The client obtains the
       information from the user and then responds with a
       SSM_MSG_USERAUTH_INFO_RESPONSE message.  The server MUST NOT send
       another SSH_MSG_USERAUTH_INFO_REQUEST before it has received the
       answer from the client.
    
    3.1 Initial Exchange
    
       The authentication starts with the client sending the following
       packet:
    
          byte      SSH_MSG_USERAUTH_REQUEST
          string    user name (ISO-10646 UTF-8, as defined in [RFC-3629])
          string    service name (US-ASCII)
          string    "keyboard-interactive" (US-ASCII)
          string    language tag (as defined in [RFC-3066])
          string    submethods (ISO-10646 UTF-8)
    
       The language tag is deprecated and SHOULD be the empty string.  It
       may be removed in a future revision of this specification.  The
       server SHOULD instead select the language used based on the tags
       communicated during key exchange [SSH-TRANS].
    
       If the language tag is not the empty string, the server SHOULD use
       the specified language for any messages sent to the client as part of
       this protocol.  The language tag SHOULD NOT be used for language
       selection for messages outside of this protocol.  The language to be
       used if the server does not support the requested language is
       implementation-dependent.
    
       The submethods field is included so the user can give a hint of which
    
    
    
    F. Cusack, M. Forssen   Expires November 1, 2004                [Page 3]
    
    Internet Draft   SSH Generic Interactive Authentication      May 1, 2004
    
    
       actual methods he wants to use.  It is a comma-separated list of
       authentication submethods (software or hardware) which the user
       prefers.  If the client has knowledge of the submethods preferred by
       the user, presumably through a configuration setting, it MAY use the
       submethods field to pass this information to the server.  Otherwise
       it MUST send the empty string.
    
       The actual names of the submethods is something which the user and
       the server need to agree upon.
    
       Server interpretation of the submethods field is implementation-
       dependent.
    
       One possible implementation strategy of the submethods field on the
       server is that, unless the user may use multiple different
       submethods, the server ignores this field.  If the user may
       authenticate using one of several different submethods the server
       should treat the submethods field as a hint on which submethod the
       user wants to use this time.
    
       Note that when this message is sent to the server, the client has not
       yet prompted the user for a password, and so that information is NOT
       included with this initial message (unlike the "password" method).
    
       The server MUST reply with either a SSH_MSG_USERAUTH_SUCCESS,
       SSH_MSG_USERAUTH_FAILURE, or SSH_MSG_USERAUTH_INFO_REQUEST message.
    
       The server SHOULD NOT reply with the SSH_MSG_USERAUTH_FAILURE message
       if the failure is based on the user name or service name; instead it
       SHOULD send SSH_MSG_USERAUTH_INFO_REQUEST message(s) which look just
       like the one(s) which would have been sent in cases where
       authentication should proceed, and then send the failure message
       (after a suitable delay, as described below).  The goal is to make it
       impossible to find valid usernames by just comparing the results when
       authenticating as different users.
    
       The server MAY reply with a SSH_MSG_USERAUTH_SUCCESS message if no
       authentication is required for the user in question, however a better
       approach, for reasons discussed above, might be to reply with a
       SSH_MSG_USERAUTH_INFO_REQUEST message and ignore (don't validate) the
       response.
    
    3.2 Information Requests
    
       Requests are generated from the server using the
       SSH_MSG_USERAUTH_INFO_REQUEST message.
    
       The server may send as many requests as are necessary to authenticate
    
    
    
    F. Cusack, M. Forssen   Expires November 1, 2004                [Page 4]
    
    Internet Draft   SSH Generic Interactive Authentication      May 1, 2004
    
    
       the client; the client MUST be prepared to handle multiple exchanges.
       However the server MUST NOT ever have more than one
       SSH_MSG_USERAUTH_INFO_REQUEST message outstanding.  That is, it may
       not send another request before the client has answered.
    
       The SSH_MSG_USERAUTH_INFO_REQUEST message is defined as follows:
    
          byte      SSH_MSG_USERAUTH_INFO_REQUEST
          string    name (ISO-10646 UTF-8)
          string    instruction (ISO-10646 UTF-8)
          string    language tag (as defined in [RFC-3066])
          int       num-prompts
          string    prompt[1] (ISO-10646 UTF-8)
          boolean   echo[1]
          ...
          string    prompt[num-prompts] (ISO-10646 UTF-8)
          boolean   echo[num-prompts]
    
       The language tag is deprecated and SHOULD be the empty string.  It
       may be removed in a future revision of this specification.  The
       server SHOULD instead select the language used based on the tags
       communicated during key exchange [SSH-TRANS].
    
       If the language tag is not the empty string, the server SHOULD use
       the specified language for any messages sent to the client as part of
       this protocol.  The language tag SHOULD NOT be used for language
       selection for messages outside of this protocol.  The language to be
       used if the server does not support the requested language is
       implementation-dependent.
    
       The server SHOULD take into consideration that some clients may not
       be able to properly display a long name or prompt field (see next
       section), and limit the lengths of those fields if possible.  For
       example, instead of an instruction field of "Enter Password" and a
       prompt field of "Password for user23@host.domain: ", a better choice
       might be an instruction field of
       "Password authentication for user23@host.domain" and a prompt field
       of "Password: ".  It is expected that this authentication method
       would typically be backended by [PAM] and so such choices would not
       be possible.
    
       The name and instruction fields MAY be empty strings, the client MUST
       be prepared to handle this correctly.  The prompt field(s) MUST NOT
       be empty strings.
    
       The num-prompts field may be `0', in which case there will be no
       prompt/echo fields in the message, but the client SHOULD still
       display the name and instruction fields (as described below).
    
    
    
    F. Cusack, M. Forssen   Expires November 1, 2004                [Page 5]
    
    Internet Draft   SSH Generic Interactive Authentication      May 1, 2004
    
    
    3.3 User Interface
    
       Upon receiving a request message, the client SHOULD prompt the user
       as follows:
    
       A command line interface (CLI) client SHOULD print the name and
       instruction (if non-empty), adding newlines.  Then for each prompt in
       turn, the client SHOULD display the prompt and read the user input.
    
       A graphical user interface (GUI) client has many choices on how to
       prompt the user.  One possibility is to use the name field (possibly
       prefixed with the application's name) as the title of a dialog window
       in which the prompt(s) are presented.  In that dialog window, the
       instruction field would be a text message, and the prompts would be
       labels for text entry fields.  All fields SHOULD be presented to the
       user, for example an implementation SHOULD NOT discard the name field
       because its windows lack titles; it SHOULD instead find another way
       to display this information.  If prompts are presented in a dialog
       window, then the client SHOULD NOT present each prompt in a separate
       window.
    
       All clients MUST properly handle an instruction field with embedded
       newlines.  They SHOULD also be able to display at least 30 characters
       for the name and prompts.  If the server presents names or prompts
       longer than 30 characters, the client MAY truncate these fields to
       the length it can display.  If the client does truncate any fields,
       there MUST be an obvious indication that such truncation has
       occurred.  The instruction field SHOULD NOT be truncated.
    
       Clients SHOULD use control character filtering as discussed in
       [SSH-ARCH] to avoid attacks by including terminal control characters
       in the fields to be displayed.
    
       For each prompt, the corresponding echo field indicates whether or
       not the user input should be echoed as characters are typed.  Clients
       SHOULD correctly echo/mask user input for each prompt independently
       of other prompts in the request message.  If a client does not honor
       the echo field for whatever reason, then the client MUST err on the
       side of masking input.  A GUI client might like to have a checkbox
       toggling echo/mask.  Clients SHOULD NOT add any additional characters
       to the prompt such as ": " (colon-space); the server is responsible
       for supplying all text to be displayed to the user.  Clients MUST
       also accept empty responses from the user and pass them on as empty
       strings.
    
    3.4 Information Responses
    
       After obtaining the requested information from the user, the client
    
    
    
    F. Cusack, M. Forssen   Expires November 1, 2004                [Page 6]
    
    Internet Draft   SSH Generic Interactive Authentication      May 1, 2004
    
    
       MUST respond with a SSH_MSG_USERAUTH_INFO_RESPONSE message.
    
       The format of the SSH_MSG_USERAUTH_INFO_RESPONSE message is as
       follows:
    
          byte      SSH_MSG_USERAUTH_INFO_RESPONSE
          int       num-responses
          string    response[1] (ISO-10646 UTF-8)
          ...
          string    response[num-responses] (ISO-10646 UTF-8)
    
       Note that the responses are encoded in ISO-10646 UTF-8.  It is up to
       the server how it interprets the responses and validates them.
       However, if the client reads the responses in some other encoding
       (e.g., ISO 8859-1), it MUST convert the responses to ISO-10646 UTF-8
       before transmitting.
    
       If the num-responses field does not match the num-prompts field in
       the request message, the server MUST send a failure message.
    
       In the case that the server sends a `0' num-prompts field in the
       request message, the client MUST send a response message with a `0'
       num-responses field.
    
       The responses MUST be ordered as the prompts were ordered.  That is,
       response[n] MUST be the answer to prompt[n].
    
       After receiving the response, the server MUST send either a
       SSH_MSG_USERAUTH_SUCCESS, SSH_MSG_USERAUTH_FAILURE, or another
       SSH_MSG_USERAUTH_INFO_REQUEST message.
    
       If the server fails to authenticate the user (through the underlying
       authentication mechanism(s)), it SHOULD NOT send another request
       message(s) in an attempt to obtain new authentication data, instead
       it SHOULD send a failure message.  The only time the server should
       send multiple request messages is if additional authentication data
       is needed (i.e., because there are multiple underlying authentication
       mechanisms that must be used to authenticate the user).
    
       If the server intends to respond with a failure message, it MAY delay
       for an implementation-dependent time before sending to the client.
       It is suspected that implementations are likely to make the time
       delay configurable; a suggested default is 2 seconds.
    
    4. Authentication Examples
    
       Here are two example exchanges between a client and server.  The
       first is an example of challenge/response with a handheld token.
    
    
    
    F. Cusack, M. Forssen   Expires November 1, 2004                [Page 7]
    
    Internet Draft   SSH Generic Interactive Authentication      May 1, 2004
    
    
       This is an authentication that is not otherwise possible with other
       authentication methods.
    
          C:   byte      SSH_MSG_USERAUTH_REQUEST
          C:   string    "user23"
          C:   string    "ssh-userauth"
          C:   string    "keyboard-interactive"
          C:   string    ""
          C:   string    ""
    
          S:   byte      SSH_MSG_USERAUTH_INFO_REQUEST
          S:   string    "CRYPTOCard Authentication"
          S:   string    "The challenge is '14315716'"
          S:   string    "en-US"
          S:   int       1
          S:   string    "Response: "
          S:   boolean   TRUE
    
          [Client prompts user for password]
    
          C:   byte      SSH_MSG_USERAUTH_INFO_RESPONSE
          C:   int       1
          C:   string    "6d757575"
    
          S:   byte      SSH_MSG_USERAUTH_SUCCESS
    
       The second example is of a standard password authentication, in
       this case the user's password is expired.
    
          C:   byte      SSH_MSG_USERAUTH_REQUEST
          C:   string    "user23"
          C:   string    "ssh-userauth"
          C:   string    "keyboard-interactive"
          C:   string    "en-US"
          C:   string    ""
    
          S:   byte      SSH_MSG_USERAUTH_INFO_REQUEST
          S:   string    "Password Authentication"
          S:   string    ""
          S:   string    "en-US"
          S:   int       1
          S:   string    "Password: "
          S:   boolean   FALSE
    
          [Client prompts user for password]
    
    
    
    
    
    
    F. Cusack, M. Forssen   Expires November 1, 2004                [Page 8]
    
    Internet Draft   SSH Generic Interactive Authentication      May 1, 2004
    
    
          C:   byte      SSH_MSG_USERAUTH_INFO_RESPONSE
          C:   int       1
          C:   string    "password"
    
          S:   byte      SSH_MSG_USERAUTH_INFO_REQUEST
          S:   string    "Password Expired"
          S:   string    "Your password has expired."
          S:   string    "en-US"
          S:   int       2
          S:   string    "Enter new password: "
          S:   boolean   FALSE
          S:   string    "Enter it again: "
          S:   boolean   FALSE
    
          [Client prompts user for new password]
    
          C:   byte      SSH_MSG_USERAUTH_INFO_RESPONSE
          C:   int       2
          C:   string    "newpass"
          C:   string    "newpass"
    
          S:   byte      SSH_MSG_USERAUTH_INFO_REQUEST
          S:   string    "Password changed"
          S:   string    "Password successfully changed for user23."
          S:   string    "en-US"
          S:   int       0
    
          [Client displays message to user]
    
          C:   byte      SSH_MSG_USERAUTH_INFO_RESPONSE
          C:   int       0
    
          S:   byte      SSH_MSG_USERAUTH_SUCCESS
    
    5. IANA Considerations
    
       The userauth type "keyboard-interactive" is used for this
       authentication method.
    
       The following method-specific constants are used with this
       authentication method:
    
       SSH_MSG_USERAUTH_INFO_REQUEST           60
       SSH_MSG_USERAUTH_INFO_RESPONSE          61
    
    6. Security Considerations
    
       The authentication protocol, and this authentication method, depend
    
    
    
    F. Cusack, M. Forssen   Expires November 1, 2004                [Page 9]
    
    Internet Draft   SSH Generic Interactive Authentication      May 1, 2004
    
    
       on the security of the underlying SSH transport layer.  Without the
       confidentiality provided therein, any authentication data passed with
       this method is subject to interception.
    
       The number of client-server exchanges required to complete an
       authentication using this method may be variable.  It is possible
       that an observer may gain valuable information simply by counting
       that number.  For example, an observer may guess that a user's
       password has expired, and with further observation may be able to
       determine the password lifetime imposed by a site's password
       expiration policy.
    
    7. References
    
    7.1 Normative References
    
    
       [RFC-2119]      Bradner, S., "Key words for use in RFCs to Indicate
                       Requirement Level", BCP 14, RFC 2119, March 1997.
    
    
       [RFC-3629]      Yergeau, F., "UTF-8, a transformation format of
                       Unicode and ISO 10646", RFC 3629, November 2003.
    
    
       [RFC-3066]      Alvestrand, H., "Tags for the Identification of
                       Languages", BCP 47, RFC 3066, January 2001.
    
    
       [SSH-ARCH]      Ylonen, T., Kivinen, T, Saarinen, M., Rinne, T., and
                       Lehtinen, S., "SSH Protocol Architecture", work in
                       progress, draft-ietf-secsh-architecture-15.txt,
                       October, 2003.
    
    
       [SSH-CONNECT]   Ylonen, T., Kivinen, T, Saarinen, M., Rinne, T., and
                       Lehtinen, S., "SSH Connection Protocol", work in
                       progress, draft-ietf-secsh-connect-18.txt, October,
                       2003.
    
    
       [SSH-TRANS]     Ylonen, T., Kivinen, T, Saarinen, M., Rinne, T., and
                       Lehtinen, S., "SSH Transport Layer Protocol", work in
                       progress, draft-ietf-secsh-transport-17.txt, October,
                       2003.
    
    
    
    
    
    
    F. Cusack, M. Forssen   Expires November 1, 2004               [Page 10]
    
    Internet Draft   SSH Generic Interactive Authentication      May 1, 2004
    
    
       [SSH-USERAUTH]  Ylonen, T., Kivinen, T, Saarinen, M., Rinne, T., and
                       Lehtinen, S., "SSH Authentication Protocol", work in
                       progress, draft-ietf-secsh-userauth-18.txt,
                       September, 2002.
    
    7.2 Informative References
    
    
       [PAM]           Samar, V., Schemers, R., "Unified Login With
                       Pluggable Authentication Modules (PAM)", OSF RFC
                       86.0, October 1995
    
    8. Authors' Addresses
    
       Frank Cusack
       Google, Inc.
       2400 Bayshore Parkway
       Mountain View, CA 94043
       Email: frank@google.com
    
       Martin Forssen
       Appgate AB
       Stora Badhusgatan 18-20
       SE-411 21 Gothenburg
       SWEDEN
       Email: maf@appgate.com
    
    9. Intellectual Property and Copyright Statements
    
    9.1. Intellectual Property Statement
    
       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 implementors or users of this specification can
       be obtained from the IETF Secretariat.
    
       The IETF invites any interested party to bring to its attention any
       copyrights, patents or patent applications, or other proprietary
       rights which may cover technology that may be required to practice
    
    
    
    F. Cusack, M. Forssen   Expires November 1, 2004               [Page 11]
    
    Internet Draft   SSH Generic Interactive Authentication      May 1, 2004
    
    
       this standard. Please address the information to the IETF Executive
       Director.
    
       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.
    
    9.2 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 assignees.
    
       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.
    
    
    
    
    
    
    
    
    
    
    
    F. Cusack, M. Forssen   Expires November 1, 2004               [Page 12]
    
  • 相关阅读:
    mysql密码忘记如何恢复(windows/liunx版本:mysql8.0.27)
    Visual Studio Code如何校验yaml格式文件
    python测试小工具
    Lunx vimgo 开发环境搭建
    小白学正则表达式之 regexp
    kubernetes scc 故障排查小记
    Go image registry
    OpenShift image registry 概述
    Go 疑难杂症汇总
    小白学标准库之 http
  • 原文地址:https://www.cnblogs.com/morya/p/2082282.html
Copyright © 2011-2022 走看看