<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY rfc2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY rfc2578 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2578.xml">
<!ENTITY rfc3411 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3411.xml">
<!ENTITY rfc3412 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3412.xml">
<!ENTITY rfc3413 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3413.xml">
<!ENTITY __reference.RFC.3414__evo974gq SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3414.xml">
<!ENTITY rfc3417 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3417.xml">
<!ENTITY __reference.RFC.2865__evn5qyl1 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2865.xml">
<!ENTITY rfc3410 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3410.xml">
<!ENTITY rfc3584 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3584.xml">
<!ENTITY __reference.RFC.5246__evn5pqv9 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5246.xml">
<!ENTITY rfc4422 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4422.xml">
<!ENTITY __reference.RFC.4251__evn67u9c SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4251.xml">
<!ENTITY rfc4741 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4741.xml">
<!ENTITY rfc5226 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5226.xml">
<!ENTITY I-D.ietf-isms-transport-security-model SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-isms-transport-security-model.xml">
<!ENTITY I-D.ietf-isms-secshell SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-isms-secshell.xml">
<!ENTITY rfc5424 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5424.xml">
]>
<?rfc toc="yes"?>
<?rfc compact="yes"?>
<?rfc symrefs="yes" ?>
<?rfc strict="yes" ?>
<?rfc rfcedstyle="yes" ?>
<rfc category="std" docName="draft-ietf-isms-tmsm-18" ipr="pre5378Trust200902"
     updates="3411,3412,3414,3417">
  <!--
  $Id: draft-ietf-isms-tmsm.xml,v 1.30 2009/04/23 20:48:47 H73653 Exp $
  -->

  <front>
    <title abbrev="SNMP Transport Subsystem">Transport Subsystem for the
    Simple Network Management Protocol (SNMP)</title>

    <author fullname="David Harrington" initials="D." surname="Harrington">
      <organization>Huawei Technologies (USA)</organization>

      <address>
        <postal>
          <street>1700 Alma Dr. Suite 100</street>

          <city>Plano, TX 75075</city>

          <country>USA</country>
        </postal>

        <phone>+1 603 436 8634</phone>

        <email>dharrington@huawei.com</email>
      </address>
    </author>

    <author fullname="Juergen Schoenwaelder" initials="J."
            surname="Schoenwaelder">
      <organization>Jacobs University Bremen</organization>

      <address>
        <postal>
          <street>Campus Ring 1</street>

          <city>28725 Bremen</city>

          <country>Germany</country>
        </postal>

        <phone>+49 421 200-3587</phone>

        <email>j.schoenwaelder@iu-bremen.de</email>
      </address>
    </author>

    <date year="2009" />

    <area>Operations and Management</area>

    <!-- <workgroup>ISMS WG</workgroup> -->

    <keyword>Network Management</keyword>

    <keyword>Simple Network Management Protocol</keyword>

    <keyword>SNMP</keyword>

    <keyword>SNMP-TRANSPORT-MIB</keyword>

    <abstract>
      <t>This document defines a Transport Subsystem, extending the Simple
      Network Management Protocol (SNMP) architecture defined in RFC 3411.
      This document defines a subsystem to contain Transport Models,
      comparable to other subsystems in the RFC3411 architecture. As work is
      being done to expand the transports to include secure transports such as
      SSH and TLS, using a subsystem will enable consistent design and
      modularity of such Transport Models. This document identifies and
      describes some key aspects that need to be considered for any Transport
      Model for SNMP.</t>
    </abstract>
  </front>

  <middle>
    <section title="Introduction">
      <t>This document defines a Transport Subsystem, extending the Simple
      Network Management Protocol (SNMP) architecture defined in <xref
      target="RFC3411"></xref>. This document identifies and describes some
      key aspects that need to be considered for any Transport Model for
      SNMP.</t>

      <section title="The Internet-Standard Management Framework">
        <t>For a detailed overview of the documents that describe the current
        Internet-Standard Management Framework, please refer to section 7 of
        RFC 3410 <xref target="RFC3410"></xref>.</t>
      </section>
      
 <section title="Conventions">
        <t>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 <xref
        target="RFC2119"></xref>.</t>

        <t>Non uppercased versions of the keywords should be read as in normal
        English. They will usually, but not always, be used in a context
        relating to compatibility with the RFC3411 architecture or the
        subsystem defined here, but which might have no impact on on-the-wire
        compatibility. These terms are used as guidance for designers of
        proposed IETF models to make the designs compatible with RFC3411
        subsystems and Abstract Service Interfaces (ASIs) (see section 3.2).
        Implementers are free to implement differently. Some usages of these
        lowercase terms are simply normal English usage.</t>
               
		<t>This document discusses an extension to the modular RFC3411 
		architecture; this is not a protocol document. An architectural MUST is 
		a really sharp constraint and to allow for the evolution of technology, and
		to not unnecessarily constrain future models, often a SHOULD or a should 
		is more appropriate than a MUST in an architecure. Future models MAY
		express tighter requirements for their own model-specific processing.</t>

        <t>For consistency with SNMP-related specifications, this document
        favors terminology as defined in STD62 rather than favoring
        terminology that is consistent with non-SNMP specifications that use
        different variations of the same terminology. This is consistent with
        the IESG decision to not require the SNMPv3 terminology be modified to
        match the usage of other non-SNMP specifications when SNMPv3 was
        advanced to Full Standard.</t>
      </section>
      
      <section title="Where this Extension Fits">
        <t>It is expected that readers of this document will have read RFC3410
        and RFC3411, and have a general understanding of the functionality
        defined in RFCs 3412-3418.</t>

        <t>The "Transport Subsystem" is an additional component for the SNMP
        Engine depicted in RFC3411, section 3.1.</t>

        <figure>
          <preamble>The following diagram depicts its place in the RFC3411
          architecture.:</preamble>

          <artwork><![CDATA[
   +-------------------------------------------------------------------+
   |  SNMP entity                                                      |
   |                                                                   |
   |  +-------------------------------------------------------------+  |
   |  |  SNMP engine (identified by snmpEngineID)                   |  |
   |  |                                                             |  |
   |  |  +------------+                                             |  |
   |  |  | Transport  |                                             |  |
   |  |  | Subsystem  |                                             |  |
   |  |  +------------+                                             |  |
   |  |                                                             |  |
   |  |  +------------+ +------------+ +-----------+ +-----------+  |  |
   |  |  | Dispatcher | | Message    | | Security  | | Access    |  |  |
   |  |  |            | | Processing | | Subsystem | | Control   |  |  |
   |  |  |            | | Subsystem  | |           | | Subsystem |  |  |
   |  |  +------------+ +------------+ +-----------+ +-----------+  |  |
   |  +-------------------------------------------------------------+  |
   |                                                                   |
   |  +-------------------------------------------------------------+  |
   |  |  Application(s)                                             |  |
   |  |                                                             |  |
   |  |  +-------------+  +--------------+  +--------------+        |  |
   |  |  | Command     |  | Notification |  | Proxy        |        |  |
   |  |  | Generator   |  | Receiver     |  | Forwarder    |        |  |
   |  |  +-------------+  +--------------+  +--------------+        |  |
   |  |                                                             |  |
   |  |  +-------------+  +--------------+  +--------------+        |  |
   |  |  | Command     |  | Notification |  | Other        |        |  |
   |  |  | Responder   |  | Originator   |  |              |        |  |
   |  |  +-------------+  +--------------+  +--------------+        |  |
   |  +-------------------------------------------------------------+  |
   |                                                                   |
   +-------------------------------------------------------------------+

]]></artwork>
        </figure>

        <t></t>

        <t>The transport mappings defined in RFC3417 do not provide
        lower-layer security functionality, and thus do not provide
        transport-specific security parameters. This document updates RFC3411
        and RFC3417 by defining an architectural extension and modifying the ASIs that
        transport mappings (hereafter called transport models) can use to pass transport-specific
        security parameters to other subsystems, including transport-specific
        security parameters that are translated into the transport-independent 
        securityName and securityLevel parameters</t>

        <t>The Transport Security Model <xref
        target="I-D.ietf-isms-transport-security-model"></xref> and the Secure
        Shell Transport Model <xref target="I-D.ietf-isms-secshell"></xref>
        utilize the Transport Subsystem. The Transport Security Model is an
        alternative to the existing SNMPv1 Security Model <xref
        target="RFC3584"></xref>, the SNMPv2c Security Model <xref
        target="RFC3584"></xref>, and the User-based Security Model <xref
        target="RFC3414"></xref>. The Secure Shell Transport Model is an
        alternative to existing transport mappings as described in
        <xref target="RFC3417"></xref>.</t>
      </section>

     
    </section>

    <section title="Motivation">
      <t>Just as there are multiple ways to secure one's home or business, in
      a continuum of alternatives, there are multiple ways to secure a network
      management protocol. Let's consider three general approaches.</t>

      <t>In the first approach, an individual could sit on his front porch
      waiting for intruders. In the second approach, he could hire an employee, 
      schedule the employee, position the employee to guard what he wants
      protected, hire a second guard to cover if the first gets sick, and so
      on. In the third approach, he could hire a security company, tell them
      what he wants protected, and leave the details to them. Considerations
      of hiring and training employees, positioning and scheduling the guards, 
      arranging for cover, etc., are the responsibility of the security company. 
      The individual therefore achieves the desired security, with significantly less
      effort on his part except identifying
requirements and verifying the quality of service being provided.</t>

      <t>The User-based Security Model (USM) as defined in <xref
      target="RFC3414"></xref> largely uses the first approach - it provides
      its own security. It utilizes existing mechanisms (e.g., SHA), but
      provides all the coordination. USM provides for the authentication of a
      principal, message encryption, data integrity checking, timeliness
      checking, etc.</t>

      <t>USM was designed to be independent of other existing security
      infrastructures. USM therefore uses a separate principal and key
      management infrastructure. Operators have reported that deploying
      another principal and key management infrastructure in order to use
      SNMPv3 is a deterrent to deploying SNMPv3. It is possible to use
      external mechanisms to handle the distribution of keys for use by USM.
      The more important issue is that operators wanted to leverage existing user base infrastructures that were not specific to SNMP.</t>

<t>A USM-compliant architecture might combine the authentication
   mechanism with an external mechanism, such as RADIUS <xref target="RFC2865"></xref>
   to provide the authentication service.  Similarly it might be
   possible to utilize an external protocol to encrypt a message,
   to check timeliness, to check data integrity, etc.  However this
   corresponds to the second approach - requiring the coordination
   of a number of differently subcontracted services.  Building solid
   security between the various services is difficult, and there is
   a significant potential for gaps in security.</t>

<t>   An alternative approach might be to utilize one or more lower-layer
   security mechanisms to provide the message-oriented security
   services required.  These would include authentication of the
   sender, encryption, timeliness checking, and data integrity checking.
   This corresponds to the third approach described above.
   There are a number of IETF standards available or in development to address these
      problems through security layers at the transport layer or application
      layer, among them TLS <xref target="RFC5246"></xref>, SASL <xref
      target="RFC4422"></xref>, and SSH <xref target="RFC4251"></xref></t>

      <t>From an operational perspective, it is highly desirable to use
      security mechanisms that can unify the administrative security
      management for SNMPv3, command line interfaces (CLIs) and other
      management interfaces. The use of security services provided by lower
      layers is the approach commonly used for the CLI, and is also the
      approach being proposed for other network management protocols, 
      such as syslog <xref target="RFC5424"></xref> and NETCONF <xref target="RFC4741"></xref>.</t>

      <t>This document defines a Transport Subsystem extension to the RFC3411
      architecture based on the third approach. This extension specifies how
      other lower layer protocols with common security infrastructures can be
      used underneath the SNMP protocol and the desired goal of unified
      administrative security can be met.</t>

      <t>This extension allows security to be provided by an external protocol
      connected to the SNMP engine through an SNMP Transport Model <xref
      target="RFC3417"></xref>. Such a Transport Model would then enable the
      use of existing security mechanisms such as (TLS) <xref
      target="RFC5246"></xref> or SSH <xref target="RFC4251"></xref> within
      the RFC3411 architecture.</t>

      <t>There are a number of Internet security protocols and mechanisms that
      are in wide spread use. Many of them try to provide a generic
      infrastructure to be used by many different application layer protocols.
      The motivation behind the Transport Subsystem is to leverage these
      protocols where it seems useful.</t>

      <t>There are a number of challenges to be addressed to map the security
      provided by a secure transport into the SNMP architecture so that SNMP
      continues to provide interoperability with existing implementations.
      These challenges are described in detail in this document. For some key
      issues, design choices are described that might be made to provide a
      workable solution that meets operational requirements and fits into the
      SNMP architecture defined in <xref target="RFC3411"></xref>.</t>
    </section>

    <!-- ********************************************* -->

    <section title="Requirements of a Transport Model">
      <!-- **************************************************** -->

      <section title="Message Security Requirements">
        <t>Transport security protocols SHOULD provide protection against the
        following message-oriented threats:</t>

        <t><list style="numbers">
            <t>modification of information</t>

            <t>masquerade</t>

            <t>message stream modification</t>

            <t>disclosure</t>
          </list></t>

        <t>These threats are described in section 1.4 of <xref
        target="RFC3411"></xref>. It is not required to protect against denial
        of service or traffic analysis, but it should not make those threats
        significantly worse.</t>

        <section title="Security Protocol Requirements">
          <t>There are a number of standard protocols that could be proposed
          as possible solutions within the Transport Subsystem. Some factors
          should be considered when selecting a protocol.</t>

          <t>Using a protocol in a manner for which it was not designed has
          numerous problems. The advertised security characteristics of a
          protocol might depend on it being used as designed; when used in
          other ways, it might not deliver the expected security
          characteristics. It is recommended that any proposed model include a
          description of the applicability of the Transport Model.</t>

          <t>A Transport Model SHOULD NOT require modifications to the
          underlying protocol. Modifying the protocol might change its
          security characteristics in ways that could impact other existing
          usages. If a change is necessary, the change SHOULD be an extension
          that has no impact on the existing usages. Any Transport Model
          should include a description of potential impact on other usages of
          the protocol.</t>

          <t>Since multiple transport models can exist simultaneously within the transport subsystem, transport models MUST be able to coexist with each other.</t>
        </section>
      </section>

      <section title="SNMP Requirements">
        <t></t>

        <section title="Architectural Modularity Requirements">
          <t>SNMP version 3 (SNMPv3) is based on a modular architecture
          (defined in <xref target="RFC3411"></xref> section 3) to allow the
          evolution of the SNMP protocol standards over time, and to minimize
          side effects between subsystems when changes are made.</t>

          <t>The RFC3411 architecture includes a Message
          Processing Subsystem permitting different message versions to be
          handled by a single engine, a Security Subsystem for
          enabling different methods of providing security services,  Applications(s) to support different
          types of application processors, and an Access Control Subsystem for
          allowing multiple approaches to access control. The RFC3411
          architecture does not include a subsystem for Transport Models,
          despite the fact there are multiple transport mappings already
          defined for SNMP <xref target="RFC3417"></xref>. This document describes a Transport
          Subsystem that is compatible with the RFC3411 architecture. As work is being
          done to use secure transports such as SSH
          and TLS, using a subsystem will enable consistent design and
          modularity of such Transport Models.</t>

          <t>The design of this Transport Subsystem accepts the goals of the
          RFC3411 architecture defined in section 1.5 of <xref
          target="RFC3411"></xref>. This Transport Subsystem uses a modular
          design that permits Transport Models (which might or might not 
          be security-aware) to be "plugged into" the RFC3411 architecture.  Such 
          Transport Models would be independent of other modular SNMP 
          components as much as possible.  This design also permits Transport 
          Models to be advanced through the standards process independently 
          of other Transport Models.</t>

        
          <figure>
            <preamble>The following diagram depicts the SNMPv3 architecture
            including the new Transport Subsystem defined in this document,
            and a new Transport Security Model defined in <xref
            target="I-D.ietf-isms-transport-security-model"></xref>.</preamble>

            <artwork><![CDATA[
+------------------------------+
|    Network                   |
+------------------------------+
   ^       ^              ^
   |       |              |
   v       v              v                 
+-------------------------------------------------------------------+
| +--------------------------------------------------+              |
| |  Transport Subsystem                             |              |
| | +-----+ +-----+ +-----+ +-----+       +-------+  |              |
| | | UDP | | TCP | | SSH | | TLS | . . . | other |  |              |
| | +-----+ +-----+ +-----+ +-----+       +-------+  |              |
| +--------------------------------------------------+              |
|              ^                                                    |
|              |                                                    |
| Dispatcher   v                                                    |
| +-------------------+ +---------------------+  +----------------+ |
| | Transport         | | Message Processing  |  | Security       | |
| | Dispatch          | | Subsystem           |  | Subsystem      | |
| |                   | |     +------------+  |  | +------------+ | |
| |                   | |  +->| v1MP       |<--->| | USM        | | |
| |                   | |  |  +------------+  |  | +------------+ | |
| |                   | |  |  +------------+  |  | +------------+ | |
| |                   | |  +->| v2cMP      |<--->| | Transport  | | |
| | Message           | |  |  +------------+  |  | | Security   | | |
| | Dispatch    <--------->|  +------------+  |  | | Model      | | |
| |                   | |  +->| v3MP       |<--->| +------------+ | |
| |                   | |  |  +------------+  |  | +------------+ | |
| | PDU Dispatch      | |  |  +------------+  |  | | Other      | | |
| +-------------------+ |  +->| otherMP    |<--->| | Model(s)   | | |
|              ^        |     +------------+  |  | +------------+ | |
|              |        +---------------------+  +----------------+ |
|              v                                                    |
|      +-------+-------------------------+---------------+          |
|      ^                                 ^               ^          |
|      |                                 |               |          |
|      v                                 v               v          |
| +-------------+   +---------+   +--------------+  +-------------+ |
| |   COMMAND   |   | ACCESS  |   | NOTIFICATION |  |    PROXY    | |
| |  RESPONDER  |<->| CONTROL |<->|  ORIGINATOR  |  |  FORWARDER  | |
| | application |   |         |   | applications |  | application | |
| +-------------+   +---------+   +--------------+  +-------------+ |
|      ^                                 ^                          |
|      |                                 |                          |
|      v                                 v                          |
| +----------------------------------------------+                  |
| |             MIB instrumentation              |      SNMP entity |
+-------------------------------------------------------------------+
              ]]></artwork>

            <postamble></postamble>
          </figure>

<section title="Changes to the RFC3411 Architecture">
          <t>The RFC3411 architecture and the Security Subsystem assume that a
          Security Model is called by a Message Processing Model and will
          perform multiple security functions within the Security Subsystem. A
          Transport Model that supports a secure transport protocol might
          perform similar security functions within the Transport Subsystem, including the translation of transport security
          parameters to/from security-model-independent parameters.</t>

          <t>To accommodate this, an implementation-specific cache of
          transport-specific information will be described (not shown), and
          the data flows on this path will be extended to pass
          security-model-independent values. This document amends some of the ASIs defined in RFC 3411, and these
   changes are covered in section 6.</t>

          <t>New Security Models might be defined that understand how to work
   with these modified ASIs and the transport-information cache.
   One such Security Model, the Transport Security Model, is defined
   in <xref target="I-D.ietf-isms-transport-security-model"></xref>.</t>
     </section>
          
          <section title="Changes to RFC3411 processing">
          
          <t>     The introduction of secure transports affects the
   responsibilities and order of processing within the RFC3411
   architecture.  While the steps are the same, they might occur in a
   different order, and might be done by different subsystems.  With
   the existing RFC3411 architecture, security processing starts when
   the Message Processing Model decodes portions of the encoded message
   to extract parameters that identify which Security Model MUST
   handle the security-related tasks.</t>
   <t>   A secure transport performs those security functions on the message,
   before the message is decoded.  Some of these functions
   might then be repeated by the selected Security Model.</t>

          </section>

          <section title="Passing Information between SNMP Engines">
            <t>A secure Transport Model will establish an authenticated and possibly encrypted tunnel between the Transport Models of two SNMP engines.
            After a transport layer tunnel is established, then SNMP messages
            can be sent through the tunnel from one SNMP engine to the other. 
            While the Community Security Models <xref target="RFC3584"></xref> and the User-based Security Model establish a security association for each SNMP message, newer Transport Models MAY support sending multiple SNMP messages through the same tunnel to amortize the
            costs of establishing a security association.</t>
          </section>
        </section>

        <section title="Access Control Requirements">
          <t>RFC3411 made some design decisions related to the support of an
          Access Control Subsystem. These include establishing and passing in
          a model-independent manner the securityModel, securityName and
          securityLevel parameters, and separating message authentication from
          data access authorization.</t>

          <section title="securityName and securityLevel Mapping">
            <t>SNMP data access controls are expected to work on the basis of
            who can perform what operations on which subsets of data, and
            based on the security services that will be provided to secure the
            data in transit. The securityModel and securityLevel parameters
            establish the protections for transit - whether authentication and
            privacy services will be or have been applied to the message. The
            securityName is a model-independent identifier of the security
            "principal".</t>

            <t>A Security Model plays a role in security that goes beyond
            protecting the message - it provides a mapping between the
            security-model-specific principal for an incoming message to a
            security-model independent securityName which can be used for
            subsequent processing, such as for access control. The
            securityName is mapped from a mechanism-specific identity, and
            this mapping must be done for incoming messages by the Security
            Model before it passes securityName to the Message Processing
            Model via the processIncoming ASI.</t>

            <t>A Security Model is also responsible to specify, via the
            securityLevel parameter, whether incoming messages have been
            authenticated and encrypted, and to ensure that outgoing messages 
            are authenticated and encrypted based on the value of
            securityLevel.</t>

            <t>A Transport Model MAY provide suggested values for securityName 
            and securityLevel. A Security Model might have multiple sources for determining the 
            principal and desired security services, and a particular Security Model might or
            might not utilize the values proposed by a Transport Model when 
            deciding the value of securityName and securityLevel.</t>
            
            <t>Documents defining a new transport domain MUST define a prefix 
            that MAY be prepended to all  securityNames passed by the Security Model. 
            The prefix MUST include from one to four US-ASCII alpha-numeric characters, not including a 
            &quot;:&quot; 
            (US-ASCII 0x3a) character. If a prefix is used, a securityName is constructed 
            by concatenating the prefix and a &quot;:&quot; (US-ASCII 0x3a) character 
            followed by a non-empty identity in an snmpAdminString compatible format.  
            The prefix can be used by SNMP applications to distinguish "alice" authenticated 
            by SSH  from "alice" authenticated by TLS. Transport domains and their 
            corresponding prefixes are 
            coordinated via the 
            IANA registry "SNMP Transport Domains". </t>
          </section>

          <!-- **************************************************** -->
        </section>

        <section title="Security Parameter Passing Requirements">

          <t>A Message Processing Model might unpack SNMP-specific security
          parameters from an incoming message before calling a specific
          Security Model to handle the security-related processing of the
   message. When using a secure Transport Model, some security
   parameters might be extracted from the transport layer by the
   Transport Model before the message is passed to the Message Processing
   Subsystem.</t>

          <t>This document describes a cache mechanism (see Section 5), into
          which the Transport Model puts information about the transport and
          security parameters applied to a transport connection or an incoming
          message, and a Security Model might extract that information from the
          cache. A tmStateReference is passed as an extra parameter in the
          ASIs between the Transport Subsystem, the Message Processing and
          Security Subsystems, to identify the relevant cache. This approach
          of passing a model-independent reference is consistent with the
          securityStateReference cache already being passed around in the
          RFC3411 ASIs.</t>
        </section>

        <section title="Separation of Authentication and Authorization">
          <t>The RFC3411 architecture defines a separation of authentication
          and the authorization to access and/or modify MIB data. A set of
          model-independent parameters (securityModel, securityName, and
          securityLevel) are passed between the Security Subsystem, the
          applications, and the Access Control Subsystem.</t>

          <t>   This separation was a deliberate decision of the SNMPv3 WG, to allow
   support for authentication protocols which do not provide data access
   authorization capabilities, and to support data access authorization
   schemes, such as VACM, that do not perform their own authentication.</t>

          <t>A Message Processing Model determines which Security Model is
          used, either based on the message version, e.g., SNMPv1 and SNMPv2c,
          or possibly by a value specified in the message, e.g., msgSecurityModel
   field in SNMPv3.</t>

          <t>The Security Model makes the decision which securityName and
          securityLevel values are passed as model-independent parameters to
          an application, which then passes them via the isAccessAllowed ASI
          to the Access Control Subsystem.</t>

          <t>An Access Control Model performs the mapping from the
          model-independent security parameters to a policy within the Access
          Control Model that is access-control-model-dependent.</t>

          <t>
     A Transport Model does not know which Security Model will be used
   for an incoming message, so cannot know how the securityName and
   securityLevel parameters will be determined.  It can propose an
   authenticated identity (via the tmSecurityName field), but there
   is no guarantee that this value will be used by the Security Model.
   For example, non-transport-aware Security Models will typically
   determine the securityName (and securityLevel) based on the contents
   of the SNMP message itself.  Such Security Models will simply not
   know that the tmStateReference cache exists.</t>

<t>Further, even if the Transport Model can influence the choice of
   securityName, it cannot directly determine the authorization allowed
   to this identity.  If two different Transport Models each authenticate
   a transport principal, that are then both mapped to the same
   securityName, then these two identities will typically be afforded
   exactly the same authorization by the Access Control Model.
   </t>
   <t>   The only way for the Access Control Model to differentiate between
   identities based on the underlying Transport Model, would be for
   such transport-authenticated identities to be mapped to distinct
   securityNames.  How and if this is done is Security-Model-dependent.</t>
   

        </section>
      </section>

      <section title="Session Requirements">
      
              <t>Some secure transports have a notion of sessions, while other
        secure transports provide channels or other session-like
        mechanism. Throughout this document, the term session is used in a
        broad sense to cover transport sessions, transport channels, and other transport-layer session-like mechanisms. Transport-layer sessions that can secure multiple SNMP messages within the lifetime of
        the session are considered desirable because the
        cost of authentication can be amortized over potentially many
        transactions. How a transport session is actually established, opened, closed,
        or maintained is specific to a particular Transport Model.</t>
                <t>To reduce redundancy, this document describes aspects that are
        expected to be common to all Transport Model sessions.</t>

<section title="No SNMP Sessions">        
      <t>The architecture defined in <xref target="RFC3411"></xref> and the Transport Subsystem defined in this document do not support SNMP sessions or include a session selector in the Abstract Service Interfaces.  </t>
      
      <t>The Transport Subsystem might support transport sessions. However, the transport subsystem does not have access to the pduType (i.e., the SNMP operation type), so cannot select a given transport session for particular types of traffic.</t>
      <t> Certain parameters of the Abstract Service Interfaces might be used to guide the selection of an appropriate transport session to use for a given request by an application.</t>

        <t>The transportDomain and transportAddress identify the transport connection
        to a remote network node. Elements of the transport
   address (such as the port number) might be used by an application to send a particular PDU type to a  particular transport address. For example, the SNMP-TARGET-MIB and SNMP-NOTIFICATION-MIB <xref target="RFC3413"></xref> are used to
   configure notification originators with the destination port to which
   SNMPv2-Trap PDUs or Inform PDUs are to be sent, but the transport subsystem never looks inside the PDU.</t>
   
   <t>The securityName identifies which security principal to communicate
   with at that address (e.g., different NMS applications), and the
   securityLevel might permit selection of different sets of
   security properties for different purposes (e.g., encrypted SETs vs.
   non-encrypted GETs).</t>
   
    <t>  However, because the handling of transport sessions is specific to each transport model, some transport models MAY restrict selecting a particular transport session. A user application might use a unique combination of transportDomain, transportAddress, securityModel, securityName, and securityLevel to try to force the selection of a given transport session. This usage is NOT RECOMMENDED because it is not guaranteed to be interoperable across implementations and across models.</t>
        
   <t>Implementations SHOULD be able to maintain some reasonable number of concurrent transport sessions, and MAY provide non-standard internal mechanisms to select transport sessions.</t>

</section>

        <section title="Session Establishment Requirements">
          <t>SNMP applications provide the transportDomain, transportAddress,
          securityName, and securityLevel to be used to create a new session.</t>

          <t>If the Transport Model cannot provide at least the requested level
   of security, the Transport Model should discard the message and
   should notify the dispatcher that establishing a session and sending the
   message failed.  Similarly, if the session cannot be established,
   then the message should be discarded and the dispatcher notified.</t>

          <t>Transport session establishment might require provisioning
          authentication credentials at an engine, either statically or
          dynamically. How this is done is dependent on the transport model
          and the implementation.</t>

        </section>

        <section title="Session Maintenance Requirements">
          <t>A Transport Model can tear down sessions as needed. It might be
          necessary for some implementations to tear down sessions as the
          result of resource constraints, for example.</t>

          <t>The decision to tear down a session is implementation-dependent.
          How an implementation determines that an operation has completed is implementation-dependent. While it is possible to tear down each transport session 
          after processing for each message has completed, this is not
          recommended for performance reasons. </t>

          <t>The elements of procedure describe when cached information can be
          discarded, and the timing of cache cleanup
          might have security implications, but cache memory management is an
          implementation issue.</t>

          <t>If a Transport Model defines MIB module objects to maintain
          session state information, then the Transport Model MUST define what
          happens to the objects when a related session is torn down,
          since this will impact interoperability of the MIB module.</t>
        </section>

        <section title="Message security versus session security">
          <t>A Transport Model session is associated with state information
          that is maintained for its lifetime. This state information allows
          for the application of various security services to multiple
          messages. Cryptographic keys associated with the transport session
          SHOULD be used to provide authentication, integrity checking, and
          encryption services, as needed, for data that is communicated during
          the session. The cryptographic protocols used to establish keys for
          a Transport Model session SHOULD ensure that fresh new session keys
          are generated for each session.  This would ensure that a cross-session replay attack
   would be unsuccessful; that is, an attacker could not take a message
   observed on one session, and successfully replay this on another
   session.</t>

<t>A good security protocol would also protect against replay attacks
   within a session; that is, an attacker could not take a message
   observed on a session, and successfully replay this later in the
   same session.   One approach would be to use sequence information
   within the protocol, allowing the participants to detect if messages
   were replayed or reordered within a session.</t>
   
   <t>If a secure transport session is closed between the time
   a request message is received, and the corresponding response message
   is sent, then the response message SHOULD be discarded, even if a
   new session has been established.  The SNMPv3 WG decided that this
   should be a SHOULD architecturally, and it is a security-model-specific
   decision whether to REQUIRE this. The architecture does not mandate this requirement to allow for future security models where this might make sense, but not requiring this could lead to added complexity and security vulnerabilities, so most security models SHOULD require this. </t>
   
   <t>SNMPv3 was designed to support multiple levels of security,
   selectable on a per-message basis by an SNMP application, because,
   for example, there is not much value in using encryption for a
   Command Generator to poll for potentially non-sensitive performance
   data on thousands of interfaces every ten minutes; the encryption
   might add significant overhead to processing of the messages.</t>
   
   <t>Some Transport Models might support only specific authentication
          and encryption services, such as requiring all messages to be
          carried using both authentication and encryption, regardless of the
          security level requested by an SNMP application. A Transport Model
          MAY upgrade the security level requested by a transport-aware security 
          model, i.e. noAuthNoPriv and authNoPriv might be sent over an authenticated 
          and encrypted session. A Transport Model MUST NOT downgrade the security 
          level requested by a transport-aware security model, and SHOULD discard any
          message where this would occur. This is a SHOULD rather than a MUST only to permit the potential development of models that can perform error-handling in a manner that is less severe than discarding the message. However, any model that does not discard the message in this circumstance should have a clear justification for why not discarding will not create a security vulnerability.</t>
        </section>
      </section>
    </section>

    <section title="Scenario Diagrams and the Transport Subsystem">
      <t>RFC3411 section 4.6.1 and 4.6.2 provide scenario diagrams to
      illustrate how an outgoing message is created, and how an incoming
      message is processed. RFC3411 does not define ASIs for the "Send SNMP
      Request Message to Network", "Receive SNMP Response Message from
      Network", "Receive SNMP Message from Network" and "Send SNMP message 
      to Network" arrows in these diagrams.</t>

      <t>This document defines two ASIs corresponding to these arrows: a 
      sendMessage ASI to send SNMP messages to the
      network, and a receiveMessage ASI to receive SNMP
      messages from the network. These ASIs are used for all SNMP messages, 
      regardless of pduType.</t>
    </section>

    <section title="Cached Information and References">
    
          <t>When performing SNMP processing, there are two levels of state
   information that might need to be retained:  the immediate state
   linking a request-response pair, and potentially longer-term state
   relating to transport and security.</t>
      
      <t>The RFC3411 architecture uses caches to maintain the short-term
   message state, and uses references in the ASIs to pass this
   information between subsystems.</t>
   
   <t>This document defines the requirements for a cache to handle additional short-term message state and longer-term transport state information, using a tmStateReference
   parameter to pass this information between subsystems.</t>

      <t>To simplify the elements of
      procedure, the release of state information is not always explicitly
      specified. As a general rule, if state information is available when a
      message being processed gets discarded, the state related to that
      message should also be discarded. If state information is available
      when a relationship between engines is severed, such as the closing of a
      transport session, the state information for that relationship should
      also be discarded.</t>
      
       <t>Since the contents of a cache are meaningful only within an
        implementation, and not on-the-wire, the format of the cache is 
        implementation-specific.</t>
        
      <section title="securityStateReference">
        <t>The securityStateReference parameter is defined in RFC3411.  Its
   primary purpose is to provide a mapping between a request and the
   corresponding response.   This cache is not accessible to Transport
   Models, and an entry is typically only retained for the lifetime of
   a request-response pair of messages.</t>
      </section>

      <section title="tmStateReference">

<t>For each transport session, information about the transport security
   is stored in a tmState cache or datastore, that is referenced by a tmStateReference.  The tmStateReference parameter is used to pass model-specific and mechanism-specific parameters between the Transport subsystem and transport-aware Security Models.</t>
   <t>In general, when necessary, the tmState is populated by the security model for outgoing messages and by the transport model for incoming messages. However, in both cases, the model populating the tmState might have incomplete information, and the missing information might be populated by the other model when the information becomes available.</t>
   <t>The tmState might contain both long-term and short-term information. The session information typically remains valid for the duration of the transport session, might be used for several messages, and might be stored in a local configuration datastore. Some information has a shorter lifespan, such as tmSameSecurity and tmRequestedSecurityLevel which are associated with a specific message.</t>
<t>Since this cache is only used within an implementation, and not
   on-the-wire, the precise contents and format of the cache are implementation-dependent.  For architectural modularity between Transport Models and transport-aware Security Models, a fully-defined tmState MUST conceptually include at least the following fields:</t>
   <t>
   <list>
				<t>tmTransportDomain</t>
				<t>tmTransportAddress</t>
				<t>tmSecurityName</t>
				<t>tmRequestedSecurityLevel</t>				
				<t>tmTransportSecurityLevel</t>
				<t>tmSameSecurity</t>
				<t>tmSessionID</t>
 </list></t>
 <t>The details of these fields are described in the following subsections.</t>
<section title="Transport information">
<t>Information about the source of an incoming SNMP message is passed up
   from the Transport subsystem as far as the Message Processing subsystem.
   However these parameters are not included in the processIncomingMsg ASI
   defined in RFC3411, and hence this information is not directly available
   to the Security Model.</t>
   <t>A transport-aware Security Model might wish to take account of the
   transport protocol and originating address when authenticating the
   request, and setting up the authorization parameters.  It is therefore
   necessary for the Transport Model to include this information in the
   tmStateReference cache, so that it is accessible to the Security Model.</t>
   <t>
   <list style="symbols">
				<t>tmTransportDomain: 
         the transport protocol (and hence the Transport Model) used to 
         receive the incoming message</t>
         <t>tmTransportAddress: 
         the source of the incoming message.
</t>
	</list></t>
	<t>The ASIs used for processing an outgoing message all
   include explicit transportDomain and transportAddress parameters.
   The values within the securityStateReference cache might override these parameters for outgoing messages.
</t>
</section>
<section title="securityName">
<t>There are actually three distinct "identities" that can be
   identified during the processing of an SNMP request over a secure
   transport:
</t>
<t>
<list style="symbols">
	<t>transport principal:
         the transport-authenticated identity, on whose behalf the
         secure transport connection was (or should be) established.
         This value is transport-, mechanism- and implementation-
         specific, and is only used within a given Transport Model.
</t>
<t>tmSecurityName:
         a human-readable name (in snmpAdminString format)
         representing this transport identity.  This value is
         transport- and implementation-specific, and is only
         used (directly) by the Transport and Security Models.
</t>
<t>securityName:
         a human-readable name (in snmpAdminString format) representing
         the SNMP principal in a model-independent manner. This value is used directly by SNMP Applications, the access control subsystem, the message processing subsystem, and the security subsystem. 
</t>
</list></t>
<t>The transport principal might or might not be the same as
   the tmSecurityName.  Similarly, the tmSecurityName might or might not
   be the same as the securityName as seen by the Application and
   Access Control subsystems.   In particular, a non-transport-aware
   Security Model will ignore tmSecurityName completely when determining
   the SNMP securityName.
</t>
<t>However it is important that the mapping between the transport
   principal and the SNMP securityName (for transport-aware Security
   Models) is consistent and predictable, to allow configuration of
   suitable access control and the establishment of transport connections.
</t>

</section>
<section title="securityLevel">
<t>There are two distinct issues relating to security level as
   applied to secure transports.  For clarity, these are handled
   by separate fields in the tmStateReference cache:
</t>
<t>
<list style="symbols">
	<t>tmTransportSecurityLevel:
         an indication from the Transport Model of the level of
         security offered by this session.  The Security Model
         can use this to ensure that incoming messages were
         suitably protected before acting on them.
</t>
<t>tmRequestedSecurityLevel:
         an indication from the Security Model of the level
         of security required to be provided by the transport
         protocol.   The Transport Model can use this to
         ensure that outgoing messages will not be sent over
         an insufficiently secure session.
</t>
</list></t>
</section>

        
<section title="Session Information">
<t>For security reasons, if a secure transport session is closed
   between the time a request message is received and the corresponding
   response message is sent, then the response message SHOULD be
   discarded, even if a new session has been established.  The SNMPv3
   WG decided that this should be a SHOULD architecturally, and it is
   a security-model-specific decision whether to REQUIRE this.
</t>

<t>
<list style="symbols">
	<t>tmSameSecurity:
        this flag is used by a transport-aware Security Model
        to indicate whether the Transport Model MUST enforce
        this restriction.</t>
        <t>tmSessionID:
        in order to verify whether the session has changed, the
        Transport Model must be able to compare the session used
        to receive the original request with the one to be used
        to send the response.  This typically needs some form
        of session identifier.  This value is only ever used by
        the Transport Model, so the format and interpretation of
        this field are model-specific and implementation-dependent.
</t>
</list></t>
        <t>When processing an outgoing message, if tmSameSecurity
        is true, then the tmSessionID MUST match the current transport session, 
        otherwise the message MUST be discarded, and the dispatcher 
        notified that sending the message failed.</t>
</section>

      </section>
    </section>

    <section title="Abstract Service Interfaces">
      <t>Abstract service interfaces have been defined by RFC 3411 to describe
      the conceptual data flows between the various subsystems within an SNMP
      entity, and to help keep the subsystems independent of each other except
      for the common parameters.</t>

<t>     This document introduces a couple of new ASIs to define the interface
   between the Transport and Dispatcher Subsystems,  and extends some of
   the ASIs defined in RFC3411 to include transport-related information.</t>
   
      <t>This document follows the example of RFC3411 regarding the release of
      state information, and regarding error indications.</t>

      <t>1) The release of state information is not always explicitly
      specified in a transport model. As a general rule, if state information
      is available when a message gets discarded, the message-state
      information should also be released, and if state information is
      available when a session is closed, the session state information should
      also be released. Keeping sensitive security information
      longer than necessary might introduce potential vulnerabilities to an
      implementation.</t>

      <t>2)An error indication in statusInformation will typically include the
   OID and value for an incremented error counter.  This might be accompanied
   by values for contextEngineID and contextName for this counter, a value
   for securityLevel, and the appropriate state reference if the information
   is available at the point where the error is detected.</t>

      <section title="sendMessage ASI">
        <t>The sendMessage ASI is used to pass a message from the Dispatcher
        to the appropriate Transport Model for sending. In the diagram in section 4.6.1 of RFC 3411, the sendMessage ASI
        defined in this document replaces the text "Send SNMP Request Message to Network". In section
        4.6.2, the sendMessage ASI replaces the text "Send SNMP Message to
        Network"</t>

        <t>If present and valid, the tmStateReference refers to a cache
        containing transport-model-specific parameters for the transport and
        transport security. How a
        tmStateReference is determined to be present and valid is
        implementation-dependent. How the information in the cache is used is
        transport-model-dependent and implementation-dependent. </t>

        <t>This might sound underspecified, but a transport model might be
        something like SNMP over UDP over IPv6, where no security is provided,
        so it might have no mechanisms for utilizing a tmStateReference cache.</t>

        <figure>
          <artwork><![CDATA[
statusInformation =
sendMessage(
IN   destTransportDomain           -- transport domain to be used
IN   destTransportAddress          -- transport address to be used
IN   outgoingMessage               -- the message to send
IN   outgoingMessageLength         -- its length       
IN   tmStateReference              -- reference to transport state                
 )
 ]]></artwork>
        </figure>
      </section>

      <section title="Changes to RFC3411 Outgoing ASIs">
      
    
      <t>     Additional parameters have been added to the ASIs defined in RFC3411,
   concerned with communication between the Dispatcher and Message Processing
   subsystems, and between the Message Processing and Security Subsystems.</t>
   
   <section title="Message Processing Subsystem Primitives">
        <t>A tmStateReference parameter has been added as an OUT parameter to
   the prepareOutgoingMessage and prepareResponseMessage ASIs. This is
   passed from Message Processing Subsystem to the dispatcher, and from
   there to the Transport Subsystem.
</t>
<t>How or if the Message Processing Subsystem modifies or utilizes
  the contents of the cache is message-processing-model specific.</t>

        <figure>
          <artwork><![CDATA[
statusInformation =          -- success or errorIndication
prepareOutgoingMessage(
IN  transportDomain          -- transport domain to be used
IN  transportAddress         -- transport address to be used
IN  messageProcessingModel   -- typically, SNMP version
IN  securityModel            -- Security Model to use
IN  securityName             -- on behalf of this principal
IN  securityLevel            -- Level of Security requested
IN  contextEngineID          -- data from/at this entity
IN  contextName              -- data from/in this context
IN  pduVersion               -- the version of the PDU
IN  PDU                      -- SNMP Protocol Data Unit
IN  expectResponse           -- TRUE or FALSE
IN  sendPduHandle            -- the handle for matching 
                                incoming responses
OUT  destTransportDomain     -- destination transport domain
OUT  destTransportAddress    -- destination transport address
OUT  outgoingMessage         -- the message to send
OUT  outgoingMessageLength   -- its length
OUT  tmStateReference        -- (NEW) reference to transport state
            )]]></artwork>
        </figure>
        
               <figure>
          <artwork><![CDATA[
statusInformation =          -- success or errorIndication
prepareResponseMessage(
IN  messageProcessingModel   -- typically, SNMP version
IN  securityModel            -- Security Model to use
IN  securityName             -- on behalf of this principal
IN  securityLevel            -- Level of Security requested
IN  contextEngineID          -- data from/at this entity
IN  contextName              -- data from/in this context
IN  pduVersion               -- the version of the PDU
IN  PDU                      -- SNMP Protocol Data Unit
IN  maxSizeResponseScopedPDU -- maximum size able to accept
IN  stateReference           -- reference to state information
                             -- as presented with the request
IN  statusInformation        -- success or errorIndication
                             -- error counter OID/value if error
OUT destTransportDomain      -- destination transport domain
OUT destTransportAddress     -- destination transport address
OUT outgoingMessage          -- the message to send
OUT outgoingMessageLength    -- its length
OUT tmStateReference         -- (NEW) reference to transport state
            )]]></artwork>
        </figure>
        
        </section>

 <section title="Security Subsystem Primitives">
<t>transportDomain and transportAddress parameters have been added as IN
   parameters to the generateRequestMsg and generateResponseMsg
   ASIs, and a tmStateReference parameter has been added as an OUT parameter.
   The transportDomain and transportAddress parameters will have been passed
   into the Message Processing Subsystem from the dispatcher, and are passed
   on to the Security Subsystem.   The tmStateReference parameter will be
   passed from the Security Subsystem back to the Message Processing
   Subsystem, and on to the dispatcher and Transport subsystems.</t>
   
   <t> If a cache exists for a session identifiable from the tmTransportDomain,
   tmTransportAddress, tmSecurityName and requested securityLevel, then a
   transport-aware Security Model might create a tmStateReference parameter
   to this cache, and pass that as an OUT parameter.</t>
        
               <figure>
          <artwork><![CDATA[ 
   statusInformation =
   generateRequestMsg(
     IN   transportDomain         -- (NEW) destination transport domain
     IN   transportAddress        -- (NEW) destination transport address
     IN   messageProcessingModel  -- typically, SNMP version
     IN   globalData              -- message header, admin data
     IN   maxMessageSize          -- of the sending SNMP entity
     IN   securityModel           -- for the outgoing message
     IN   securityEngineID        -- authoritative SNMP entity
     IN   securityName            -- on behalf of this principal
     IN   securityLevel           -- Level of Security requested
     IN   scopedPDU               -- message (plaintext) payload
     OUT  securityParameters      -- filled in by Security Module
     OUT  wholeMsg                -- complete generated message
     OUT  wholeMsgLength          -- length of generated message
     OUT  tmStateReference        -- (NEW) reference to transport state
              )]]></artwork>
        </figure>
        
               <figure>
          <artwork><![CDATA[ 
   statusInformation =
   generateResponseMsg(
     IN   transportDomain         -- (NEW) destination transport domain
     IN   transportAddress        -- (NEW) destination transport address
     IN   messageProcessingModel -- Message Processing Model
     IN   globalData             -- msgGlobalData
     IN   maxMessageSize         -- from msgMaxSize
     IN   securityModel          -- as determined by MPM
     IN   securityEngineID       -- the value of snmpEngineID
     IN   securityName           -- on behalf of this principal
     IN   securityLevel          -- for the outgoing message
     IN   scopedPDU              -- as provided by MPM
     IN   securityStateReference -- as provided by MPM
     OUT  securityParameters     -- filled in by Security Module
     OUT  wholeMsg               -- complete generated message
     OUT  wholeMsgLength         -- length of generated message
     OUT  tmStateReference        -- (NEW) reference to transport state
              )]]></artwork>
        </figure>
</section>

      </section>

      <!-- **************************************************** -->

      <section title="The receiveMessage ASI">
        
         <t>The receiveMessage ASI is used to pass a message from the Transport
        Subsystem to the Dispatcher. In the diagram in section 4.6.1 of RFC 3411, the receiveMessage ASI
        replaces the text "Receive SNMP Response Message from Network". In
        section 4.6.2, the receiveMessage ASI replaces the text "Receive SNMP
        Message from Network".</t>
        
        <t> When a message is received on a given transport session, if a cache
   does not already exist for that session, the Transport Model might
   create one, referenced by tmStateReference.  The contents of this
   cache are discussed in section 5.  How this information is determined
   is implementation- and transport-model-specific.</t>

        <t>"Might create one" might sound underspecified, but a transport model might be
        something like SNMP over UDP over IPv6, where transport security is not provided,
        so it might not create a cache.</t>

        <t>The Transport Model does not know the securityModel for an incoming
        message; this will be determined by the Message Processing Model in a
        message-processing-model-dependent manner.</t>

        <t></t>

        <figure>
          <artwork><![CDATA[
statusInformation =
receiveMessage(
IN   transportDomain               -- origin transport domain 
IN   transportAddress              -- origin transport address 
IN   incomingMessage               -- the message received
IN   incomingMessageLength         -- its length       
IN   tmStateReference              -- reference to transport state  
 )
 ]]></artwork>
        </figure>
      </section>

      <section title="Changes to RFC3411 Incoming ASIs">
      
      <t>The tmStateReference parameter has also been added to some of the
   incoming ASIs defined in RFC3411.  How or if a Message Processing Model
   or Security Model uses tmStateReference is message-processing- and
   security-model-specific.</t>
           <t>This might sound underspecified, but a message processing model might
        have access to all the information from the cache and from the
        message. The Message Processing Model might determine that the USM
        Security Model is specified in an SNMPv3 message header; the USM
        Security Model has no need of values in the tmStateReference cache to
        authenticate and secure the SNMP message, but an application might
        have specified to use a secure transport such as that provided by the
        SSH Transport Model to send the message to its destination.</t>
   
<section title="Message Processing Subsystem Primitive">

        <t>The tmStateReference parameter of prepareDataElements is passed
        from the dispatcher to the Message Processing Subsystem. How or if the
        Message Processing Subsystem modifies or utilizes the contents of the
        cache is message-processing-model-specific.</t>
        
        <figure>
          <artwork><![CDATA[
result =                       -- SUCCESS or errorIndication
prepareDataElements(
IN   transportDomain           -- origin transport domain
IN   transportAddress          -- origin transport address
IN   wholeMsg                  -- as received from the network
IN   wholeMsgLength            -- as received from the network
IN   tmStateReference          -- (NEW) from the Transport Model
OUT  messageProcessingModel    -- typically, SNMP version
OUT  securityModel             -- Security Model to use
OUT  securityName              -- on behalf of this principal
OUT  securityLevel             -- Level of Security requested
OUT  contextEngineID           -- data from/at this entity
OUT  contextName               -- data from/in this context
OUT  pduVersion                -- the version of the PDU
OUT  PDU                       -- SNMP Protocol Data Unit
OUT  pduType                   -- SNMP PDU type
OUT  sendPduHandle             -- handle for matched request
OUT  maxSizeResponseScopedPDU  -- maximum size sender can accept
OUT  statusInformation         -- success or errorIndication
                               -- error counter OID/value if error
OUT  stateReference            -- reference to state information
                               -- to be used for possible Response
)



]]></artwork>
        </figure>
</section>

<section title="Security Subsystem Primitive">

        <t>The processIncomingMessage ASI passes tmStateReference from the
        Message Processing Subsystem to the Security Subsystem.</t>

        <t>If tmStateReference is present and valid, an appropriate Security
        Model might utilize the information in the cache. How or if the
        Security Subsystem utilizes the information in the cache is
        security-model-specific.</t>
        
        <figure>
          <artwork><![CDATA[
statusInformation =  -- errorIndication or success
                         -- error counter OID/value if error
processIncomingMsg(
IN   messageProcessingModel    -- typically, SNMP version
IN   maxMessageSize            -- of the sending SNMP entity
IN   securityParameters        -- for the received message
IN   securityModel             -- for the received message
IN   securityLevel             -- Level of Security
IN   wholeMsg                  -- as received on the wire
IN   wholeMsgLength            -- length as received on the wire
IN   tmStateReference          -- (NEW) from the Transport Model
OUT  securityEngineID          -- authoritative SNMP entity
OUT  securityName              -- identification of the principal
OUT  scopedPDU,                -- message (plaintext) payload
OUT  maxSizeResponseScopedPDU  -- maximum size sender can handle
OUT  securityStateReference    -- reference to security state
 )                         -- information, needed for response
        ]]></artwork>
        </figure>

</section>






      </section>
    </section>

    <!-- 	***************************************************** 	-->

    <section title="Security Considerations">
      <t>This document defines an architectural approach that permits SNMP to
      utilize transport layer security services. Each proposed Transport Model
      should discuss the security considerations of that Transport Model.</t>

      <t>It is considered desirable by some industry segments that SNMP
      Transport Models utilize transport layer security that addresses
      perfect forward secrecy at least for encryption keys. Perfect forward
      secrecy guarantees that compromise of long term secret keys does not
      result in disclosure of past session keys. Each proposed Transport Model
      should include a discussion in its security considerations of whether
      perfect forward security is appropriate for that Transport Model.</t>
      
      <t>The Denial of Service characteristics of various transport models and 
      security protocols will vary and should be evaluated when determining
      the applicability of a transport model to a particular deployment situation.</t>

      <t>Since the cache will contain security-related parameters,
      implementers SHOULD store this information (in memory or in persistent
      storage) in a manner to protect it from unauthorized disclosure and/or
      modification.</t>

      <t>Care must be taken to ensure that a SNMP engine is sending packets
      out over a transport using credentials that are legal for that engine to
      use on behalf of that user. Otherwise an engine that has multiple
      transports open might be "tricked" into sending a message through the
      wrong transport.</t>

      <t>A Security Model might have multiple sources from which to define the
      securityName and securityLevel. The use of a secure Transport Model does
      not imply that the securityName and securityLevel chosen by the Security
      Model represent the transport-authenticated identity or the
      transport-provided security services. The securityModel, securityName,
      and securityLevel parameters are a related set, and an administrator
      should understand how the specified securityModel selects the
      corresponding securityName and securityLevel.</t>

      <section title="Coexistence, Security Parameters, and Access Control">
        <t>In the RFC3411 architecture, the Message Processing Model makes the
        decision about which Security Model to use. The architectural change
        described by this document does not alter that.</t>

        <t>The architecture change described by this document does however,
        allow SNMP to support two different approaches to security -
        message-driven security and transport-driven security. With
        message-driven security, SNMP provides its own security, and passes
        security parameters within the SNMP message; with transport-driven
        security, SNMP depends on an external entity to provide security
        during transport by "wrapping" the SNMP message.</t>
        


            <t>Using a non-transport-aware security model with a secure transport 
            model is NOT RECOMMENDED, for the following reasons.</t>
                  
        <t>Security models defined before the Transport Security Model (i.e.,
        SNMPv1, SNMPv2c, and USM) do not support transport-based security, and
        only have access to the security parameters contained within the SNMP
        message. They do not know about the security parameters associated
        with a secure transport. As a result, the Access Control Subsystem
        bases its decisions on the security parameters extracted from the SNMP
        message, not on transport-based security parameters.</t>

        <t>Implications of combining older security models with secure
        transport models are known. The securityName used for access control
        decisions is based on the message-driven identity, which might be 
        unauthenticated, not the transport-driven authenticated identity:
        
        <list hangIndent="" style="symbols">
            <t>An SNMPv1 message will always be paired with an SNMPv1 Security
            Model (per RFC3584), regardless of the transport mapping or
            transport model used, and access controls will be based on the
            unauthenticated community name.</t>

            <t>An SNMPv2c message will always be paired with an SNMPv2c
            Security Model (per RFC3584), regardless of the transport mapping
            or transport model used, and access controls will be based on the
            unauthenticated community name.</t>

            <t>An SNMPv3 message will always be paired with the securityModel
            specified in the msgSecurityParameters field of the message (per
            RFC3412), regardless of the transport mapping or transport model
            used. If the SNMPv3 message specifies the User-based Security
            Model (USM), with noAuthNoPriv, then the access controls will be 
            based on the unauthenticated USM user.</t>
            
            <t>For outgoing messages, if a secure transport model is selected
            in combination with a security model that does not populate a tmStateReference, 
            the secure transport model SHOULD detect the lack of a valid 
            tmStateReference and fail.</t>
          </list></t>
          
          <t>In times of network stress, a secure transport model might not work
          properly if its underlying security mechanisms (e.g., Network Time
            Protocol (NTP) or Authentication, Authorization, and Accounting
            (AAA) protocols or certificate authorities) are not reachable. The User-based Security 
            Model was explicitly designed to not depend upon external network 
            services, and provides its own security services. It is RECOMMENDED 
            that operators provision authPriv USM as a fallback mechanism to supplement 
            any security model or transport model that has external dependencies, so that secure SNMP 
            communications can continue when the external network service is not 
            available.</t>
            
      </section>
    </section>

    <!-- 	***************************************************** 	-->

    <section title="IANA Considerations">
      <t>IANA is requested to create a new registry in the Simple Network Management Protocol (SNMP) Number Spaces. The new registry should be called "SNMP Transport Domains". This registry will contain US-ASCII alpha-numeric strings of one to four characters to identify prefixes for corresponding SNMP transport domains. Each transport domain MUST have an OID assignment under snmpDomains <xref target="RFC2578"></xref> . Values are to be assigned via <xref target="RFC5226"></xref> "Specification Required".
</t>
<t>The registry should be populated with the following initial entries: </t>

<figure>
	<artwork>
Registry Name: SNMP Transport Domains
Reference: [RFC2578] [RFC3417] [XXXX] 
Registration Procedures: Specification Required 
Each domain is assigned a MIB-defined OID under snmpDomains 

Prefix     snmpDomains                       Reference
-------       -----------------------------  ---------
udp           snmpUDPDomain                  RFC3417
clns          snmpCLNSDomain                 RFC3417
cons          snmpCONSDomain                 RFC3417
ddp           snmpDDPDomain                  RFC3417
ipx           snmpIPXDomain                  RFC3417
prxy          rfc1157Domain                  RFC3417	

-- NOTE to RFC editor: replace XXXX with actual RFC number
--                     for this document and remove this note
	</artwork>
</figure>
	
	


    </section>

    <section title="Acknowledgments">
      <t>The Integrated Security for SNMP WG would like to thank the following
      people for their contributions to the process:</t>

      <t>The authors of submitted Security Model proposals: Chris Elliot, Wes
      Hardaker, David Harrington, Keith McCloghrie, Kaushik Narayan, David
      Perkins, Joseph Salowey, and Juergen Schoenwaelder.</t>

      <t>The members of the Protocol Evaluation Team: Uri Blumenthal,
      Lakshminath Dondeti, Randy Presuhn, and Eric Rescorla.</t>

      <t>WG members who performed detailed reviews: Jeffrey Hutzelman, Bert
      Wijnen, Tom Petch, Wes Hardaker, and Dave Shield.</t>
      
    </section>

    <!-- Acknowledgements -->
  </middle>

  <back>
    <references title="Normative References">
      &rfc2119;
      
      &rfc2578;

      &rfc3411;

      &rfc3412;
      
      &rfc3413;

      &__reference.RFC.3414__evo974gq;

      &rfc3417;
    </references>

    <references title="Informative References">
      &__reference.RFC.2865__evn5qyl1;

      &rfc3410;

      &rfc3584;

      &__reference.RFC.5246__evn5pqv9;

      &rfc4422;

      &__reference.RFC.4251__evn67u9c;

      &rfc4741;
      &rfc5226;

      &I-D.ietf-isms-transport-security-model;

      &I-D.ietf-isms-secshell;
      
      &rfc5424;
      
    </references>

    <section title="Why tmStateReference?">
      <t>This appendix considers why a cache-based approach was selected for
      passing parameters.</t>

      <t>There are four approaches that could be used for passing information
      between the Transport Model and a Security Model.</t>

      <t><list style="numbers">
          <t>one could define an ASI to supplement the existing ASIs, or</t>

          <t>one could add a header to encapsulate the SNMP message,</t>

          <t>one could utilize fields already defined in the existing SNMPv3
          message, or</t>

          <t>one could pass the information in an implementation-specific
          cache or via a MIB module.</t>
        </list></t>

      <section title="Define an Abstract Service Interface">
        <t>Abstract Service Interfaces (ASIs) are defined by a set of
        primitives that specify the services provided and the abstract data
        elements that are to be passed when the services are invoked. Defining
        additional ASIs to pass the security and transport information from
        the Transport Subsystem to Security Subsystem has the advantage of
        being consistent with existing RFC3411/3412 practice, and helps to
        ensure that any Transport Model proposals pass the necessary data, and
        do not cause side effects by creating model-specific dependencies
        between itself and other models or other subsystems other than those
        that are clearly defined by an ASI.</t>
      </section>

      <section title="Using an Encapsulating Header">
        <t>A header could encapsulate the SNMP message to pass necessary
        information from the Transport Model to the dispatcher and then to a
        Message Processing Model. The message header would be included in the
        wholeMessage ASI parameter, and would be removed by a corresponding
        Message Processing Model. This would imply the (one and only)
        messaging dispatcher would need to be modified to determine which SNMP
        message version was involved, and a new Message Processing Model would
        need to be developed that knew how to extract the header from the
        message and pass it to the Security Model.</t>
      </section>

      <section title="Modifying Existing Fields in an SNMP Message">
        <t><xref target="RFC3412"></xref> defines the SNMPv3 message, which
        contains fields to pass security related parameters. The Transport
        Subsystem could use these fields in an SNMPv3 message, or comparable
        fields in other message formats to pass information between Transport
        Models in different SNMP engines, and to pass information between a
        Transport Model and a corresponding Message Processing Model.</t>

        <t>If the fields in an incoming SNMPv3 message are changed by the
        Transport Model before passing it to the Security Model, then the
        Transport Model will need to decode the ASN.1 message, modify the
        fields, and re-encode the message in ASN.1 before passing the message
        on to the message dispatcher or to the transport layer. This would
        require an intimate knowledge of the message format and message
        versions so the Transport Model knew which fields could be modified.
        This would seriously violate the modularity of the architecture.</t>
      </section>

      <section title="Using a Cache">
        <t>This document describes a cache, into which the Transport Model
        puts information about the security applied to an incoming message,
        and a Security Model can extract that information from the cache.
        Given that there might be multiple TM-security caches, a
        tmStateReference is passed as an extra parameter in the ASIs between
        the Transport Subsystem and the Security Subsystem, so the Security
        Model knows which cache of information to consult.</t>

        <t>This approach does create dependencies between a specific Transport
        Model and a corresponding specific Security Model. However, the
        approach of passing a model-independent reference to a model-dependent
        cache is consistent with the securityStateReference already being
        passed around in the RFC3411 ASIs.</t>
      </section>
    </section>

  </back>
</rfc>
<!-- Local Variables:                                           -->
<!-- compile-command: "xml2rfc draft-schoenw-snmp-tlsm-03.xml"  -->
<!-- ispell-local-dictionary: "american"                        -->
<!-- sgml-declaration: "/usr/lib/sgml/declaration/xml.decl"     -->
<!-- sgml-omittag:nil                                           -->
<!-- sgml-shorttag:t                                            -->
<!-- sgml-namecase-general:t                                    -->
<!-- sgml-minimize-attributes:nil                               -->
<!-- sgml-always-quote-attributes:t                             -->
<!-- sgml-indent-step:2                                         -->
<!-- sgml-indent-data:t                                         -->
<!-- sgml-parent-document:nil                                   -->
<!-- sgml-exposed-tags:nil                                      -->
<!-- sgml-local-catalogs:nil                                    -->
<!-- sgml-local-ecat-files:nil                                  -->
<!-- End:                                                       -->