diff options
Diffstat (limited to 'doc/rfc/rfc3414.txt')
-rw-r--r-- | doc/rfc/rfc3414.txt | 4931 |
1 files changed, 4931 insertions, 0 deletions
diff --git a/doc/rfc/rfc3414.txt b/doc/rfc/rfc3414.txt new file mode 100644 index 0000000..d3c522b --- /dev/null +++ b/doc/rfc/rfc3414.txt @@ -0,0 +1,4931 @@ + + + + + + +Network Working Group U. Blumenthal +Request for Comments: 3414 B. Wijnen +STD: 62 Lucent Technologies +Obsoletes: 2574 December 2002 +Category: Standards Track + + + User-based Security Model (USM) for version 3 of the + Simple Network Management Protocol (SNMPv3) + +Status of this Memo + + This document specifies an Internet standards track protocol for the + Internet community, and requests discussion and suggestions for + improvements. Please refer to the current edition of the "Internet + Official Protocol Standards" (STD 1) for the standardization state + and status of this protocol. Distribution of this memo is unlimited. + +Copyright Notice + + Copyright (C) The Internet Society (2002). All Rights Reserved. + +Abstract + + This document describes the User-based Security Model (USM) for + Simple Network Management Protocol (SNMP) version 3 for use in the + SNMP architecture. It defines the Elements of Procedure for + providing SNMP message level security. This document also includes a + Management Information Base (MIB) for remotely monitoring/managing + the configuration parameters for this Security Model. This document + obsoletes RFC 2574. + +Table of Contents + + 1. Introduction.......................................... 4 + 1.1. Threats............................................... 4 + 1.2. Goals and Constraints................................. 6 + 1.3. Security Services..................................... 6 + 1.4. Module Organization................................... 7 + 1.4.1. Timeliness Module..................................... 8 + 1.4.2. Authentication Protocol............................... 8 + 1.4.3. Privacy Protocol...................................... 8 + 1.5. Protection against Message Replay, Delay + and Redirection....................................... 9 + 1.5.1. Authoritative SNMP engine............................. 9 + 1.5.2. Mechanisms............................................ 9 + 1.6. Abstract Service Interfaces........................... 11 + + + + +Blumenthal & Wijnen Standards Track [Page 1] + +RFC 3414 USM for SNMPv3 December 2002 + + + 1.6.1. User-based Security Model Primitives + for Authentication.................................... 11 + 1.6.2. User-based Security Model Primitives + for Privacy........................................... 12 + 2. Elements of the Model................................. 12 + 2.1. User-based Security Model Users....................... 12 + 2.2. Replay Protection..................................... 13 + 2.2.1. msgAuthoritativeEngineID.............................. 14 + 2.2.2. msgAuthoritativeEngineBoots and + msgAuthoritativeEngineTime............................ 14 + 2.2.3. Time Window........................................... 15 + 2.3. Time Synchronization.................................. 15 + 2.4. SNMP Messages Using this Security Model............... 16 + 2.5. Services provided by the User-based Security Model.... 17 + 2.5.1. Services for Generating an Outgoing SNMP Message...... 17 + 2.5.2. Services for Processing an Incoming SNMP Message...... 20 + 2.6. Key Localization Algorithm............................ 22 + 3. Elements of Procedure................................. 22 + 3.1. Generating an Outgoing SNMP Message................... 22 + 3.2. Processing an Incoming SNMP Message................... 26 + 4. Discovery............................................. 31 + 5. Definitions........................................... 32 + 6. HMAC-MD5-96 Authentication Protocol................... 51 + 6.1. Mechanisms............................................ 51 + 6.1.1. Digest Authentication Mechanism....................... 51 + 6.2. Elements of the Digest Authentication Protocol........ 52 + 6.2.1. Users................................................. 52 + 6.2.2. msgAuthoritativeEngineID.............................. 53 + 6.2.3. SNMP Messages Using this Authentication Protocol...... 53 + 6.2.4. Services provided by the HMAC-MD5-96 + Authentication Module................................. 53 + 6.2.4.1. Services for Generating an Outgoing SNMP Message...... 53 + 6.2.4.2. Services for Processing an Incoming SNMP Message...... 54 + 6.3. Elements of Procedure................................. 55 + 6.3.1. Processing an Outgoing Message........................ 55 + 6.3.2. Processing an Incoming Message........................ 56 + 7. HMAC-SHA-96 Authentication Protocol................... 57 + 7.1. Mechanisms............................................ 57 + 7.1.1. Digest Authentication Mechanism....................... 57 + 7.2. Elements of the HMAC-SHA-96 Authentication Protocol... 58 + 7.2.1. Users................................................. 58 + 7.2.2. msgAuthoritativeEngineID.............................. 58 + 7.2.3. SNMP Messages Using this Authentication Protocol...... 59 + 7.2.4. Services provided by the HMAC-SHA-96 + Authentication Module................................. 59 + 7.2.4.1. Services for Generating an Outgoing SNMP Message...... 59 + 7.2.4.2. Services for Processing an Incoming SNMP Message...... 60 + 7.3. Elements of Procedure................................. 61 + + + +Blumenthal & Wijnen Standards Track [Page 2] + +RFC 3414 USM for SNMPv3 December 2002 + + + 7.3.1. Processing an Outgoing Message........................ 61 + 7.3.2. Processing an Incoming Message........................ 61 + 8. CBC-DES Symmetric Encryption Protocol................. 63 + 8.1. Mechanisms............................................ 63 + 8.1.1. Symmetric Encryption Protocol......................... 63 + 8.1.1.1. DES key and Initialization Vector..................... 64 + 8.1.1.2. Data Encryption....................................... 65 + 8.1.1.3. Data Decryption....................................... 65 + 8.2. Elements of the DES Privacy Protocol.................. 65 + 8.2.1. Users................................................. 65 + 8.2.2. msgAuthoritativeEngineID.............................. 66 + 8.2.3. SNMP Messages Using this Privacy Protocol............. 66 + 8.2.4. Services provided by the DES Privacy Module........... 66 + 8.2.4.1. Services for Encrypting Outgoing Data................. 66 + 8.2.4.2. Services for Decrypting Incoming Data................. 67 + 8.3. Elements of Procedure................................. 68 + 8.3.1. Processing an Outgoing Message........................ 68 + 8.3.2. Processing an Incoming Message........................ 69 + 9. Intellectual Property................................. 69 + 10. Acknowledgements...................................... 70 + 11. Security Considerations............................... 71 + 11.1. Recommended Practices................................. 71 + 11.2. Defining Users........................................ 73 + 11.3. Conformance........................................... 74 + 11.4. Use of Reports........................................ 75 + 11.5. Access to the SNMP-USER-BASED-SM-MIB.................. 75 + 12. References............................................ 75 + A.1. SNMP engine Installation Parameters................... 78 + A.2. Password to Key Algorithm............................. 80 + A.2.1. Password to Key Sample Code for MD5................... 81 + A.2.2. Password to Key Sample Code for SHA................... 82 + A.3. Password to Key Sample Results........................ 83 + A.3.1. Password to Key Sample Results using MD5.............. 83 + A.3.2. Password to Key Sample Results using SHA.............. 83 + A.4. Sample encoding of msgSecurityParameters.............. 83 + A.5. Sample keyChange Results.............................. 84 + A.5.1. Sample keyChange Results using MD5.................... 84 + A.5.2. Sample keyChange Results using SHA.................... 85 + B. Change Log............................................ 86 + Editors' Addresses.................................... 87 + Full Copyright Statement.............................. 88 + + + + + + + + + + +Blumenthal & Wijnen Standards Track [Page 3] + +RFC 3414 USM for SNMPv3 December 2002 + + +1. Introduction + + The Architecture for describing Internet Management Frameworks + [RFC3411] describes that an SNMP engine is composed of: + + 1) a Dispatcher, + 2) a Message Processing Subsystem, + 3) a Security Subsystem, and + 4) an Access Control Subsystem. + + Applications make use of the services of these subsystems. + + It is important to understand the SNMP architecture and the + terminology of the architecture to understand where the Security + Model described in this document fits into the architecture and + interacts with other subsystems within the architecture. The reader + is expected to have read and understood the description of the SNMP + architecture, as defined in [RFC3411]. + + This memo describes the User-based Security Model as it is used + within the SNMP Architecture. The main idea is that we use the + traditional concept of a user (identified by a userName) with which + to associate security information. + + This memo describes the use of HMAC-MD5-96 and HMAC-SHA-96 as the + authentication protocols and the use of CBC-DES as the privacy + protocol. The User-based Security Model however allows for other + such protocols to be used instead of or concurrent with these + protocols. Therefore, the description of HMAC-MD5-96, HMAC-SHA-96 + and CBC-DES are in separate sections to reflect their self-contained + nature and to indicate that they can be replaced or supplemented in + the future. + + 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 [RFC2119]. + +1.1. Threats + + Several of the classical threats to network protocols are applicable + to the network management problem and therefore would be applicable + to any SNMP Security Model. Other threats are not applicable to the + network management problem. This section discusses principal + threats, secondary threats, and threats which are of lesser + importance. + + The principal threats against which this SNMP Security Model should + provide protection are: + + + +Blumenthal & Wijnen Standards Track [Page 4] + +RFC 3414 USM for SNMPv3 December 2002 + + + - Modification of Information The modification threat is the danger + that some unauthorized entity may alter in-transit SNMP messages + generated on behalf of an authorized principal in such a way as to + effect unauthorized management operations, including falsifying the + value of an object. + + - Masquerade The masquerade threat is the danger that management + operations not authorized for some user may be attempted by + assuming the identity of another user that has the appropriate + authorizations. + + Two secondary threats are also identified. The Security Model + defined in this memo provides limited protection against: + + - Disclosure The disclosure threat is the danger of eavesdropping on + the exchanges between managed agents and a management station. + Protecting against this threat may be required as a matter of local + policy. + + - Message Stream Modification The SNMP protocol is typically based + upon a connection-less transport service which may operate over any + sub-network service. The re-ordering, delay or replay of messages + can and does occur through the natural operation of many such sub- + network services. The message stream modification threat is the + danger that messages may be maliciously re-ordered, delayed or + replayed to an extent which is greater than can occur through the + natural operation of a sub-network service, in order to effect + unauthorized management operations. + + There are at least two threats that an SNMP Security Model need not + protect against. The security protocols defined in this memo do not + provide protection against: + + - Denial of Service This SNMP Security Model does not attempt to + address the broad range of attacks by which service on behalf of + authorized users is denied. Indeed, such denial-of-service attacks + are in many cases indistinguishable from the type of network + failures with which any viable network management protocol must + cope as a matter of course. + + - Traffic Analysis This SNMP Security Model does not attempt to + address traffic analysis attacks. Indeed, many traffic patterns + are predictable - devices may be managed on a regular basis by a + relatively small number of management applications - and therefore + there is no significant advantage afforded by protecting against + traffic analysis. + + + + + +Blumenthal & Wijnen Standards Track [Page 5] + +RFC 3414 USM for SNMPv3 December 2002 + + +1.2. Goals and Constraints + + Based on the foregoing account of threats in the SNMP network + management environment, the goals of this SNMP Security Model are as + follows. + + 1) Provide for verification that each received SNMP message has not + been modified during its transmission through the network. + + 2) Provide for verification of the identity of the user on whose + behalf a received SNMP message claims to have been generated. + + 3) Provide for detection of received SNMP messages, which request or + contain management information, whose time of generation was not + recent. + + 4) Provide, when necessary, that the contents of each received SNMP + message are protected from disclosure. + + In addition to the principal goal of supporting secure network + management, the design of this SNMP Security Model is also influenced + by the following constraints: + + 1) When the requirements of effective management in times of network + stress are inconsistent with those of security, the design of USM + has given preference to the former. + + 2) Neither the security protocol nor its underlying security + mechanisms should depend upon the ready availability of other + network services (e.g., Network Time Protocol (NTP) or key + management protocols). + + 3) A security mechanism should entail no changes to the basic SNMP + network management philosophy. + +1.3. Security Services + + The security services necessary to support the goals of this SNMP + Security Model are as follows: + + - Data Integrity is the provision of the property that data has not + been altered or destroyed in an unauthorized manner, nor have data + sequences been altered to an extent greater than can occur non- + maliciously. + + - Data Origin Authentication is the provision of the property that + the claimed identity of the user on whose behalf received data was + originated is corroborated. + + + +Blumenthal & Wijnen Standards Track [Page 6] + +RFC 3414 USM for SNMPv3 December 2002 + + + - Data Confidentiality is the provision of the property that + information is not made available or disclosed to unauthorized + individuals, entities, or processes. + + - Message timeliness and limited replay protection is the provision + of the property that a message whose generation time is outside of + a specified time window is not accepted. Note that message + reordering is not dealt with and can occur in normal conditions + too. + + For the protocols specified in this memo, it is not possible to + assure the specific originator of a received SNMP message; rather, it + is the user on whose behalf the message was originated that is + authenticated. + + For these protocols, it not possible to obtain data integrity without + data origin authentication, nor is it possible to obtain data origin + authentication without data integrity. Further, there is no + provision for data confidentiality without both data integrity and + data origin authentication. + + The security protocols used in this memo are considered acceptably + secure at the time of writing. However, the procedures allow for new + authentication and privacy methods to be specified at a future time + if the need arises. + +1.4. Module Organization + + The security protocols defined in this memo are split in three + different modules and each has its specific responsibilities such + that together they realize the goals and security services described + above: + + - The authentication module MUST provide for: + + - Data Integrity, + + - Data Origin Authentication, + + - The timeliness module MUST provide for: + + - Protection against message delay or replay (to an extent greater + than can occur through normal operation). + + - The privacy module MUST provide for + + - Protection against disclosure of the message payload. + + + + +Blumenthal & Wijnen Standards Track [Page 7] + +RFC 3414 USM for SNMPv3 December 2002 + + + The timeliness module is fixed for the User-based Security Model + while there is provision for multiple authentication and/or privacy + modules, each of which implements a specific authentication or + privacy protocol respectively. + +1.4.1. Timeliness Module + + Section 3 (Elements of Procedure) uses the timeliness values in an + SNMP message to do timeliness checking. The timeliness check is only + performed if authentication is applied to the message. Since the + complete message is checked for integrity, we can assume that the + timeliness values in a message that passes the authentication module + are trustworthy. + +1.4.2. Authentication Protocol + + Section 6 describes the HMAC-MD5-96 authentication protocol which is + the first authentication protocol that MUST be supported with the + User-based Security Model. Section 7 describes the HMAC-SHA-96 + authentication protocol which is another authentication protocol that + SHOULD be supported with the User-based Security Model. In the + future additional or replacement authentication protocols may be + defined as new needs arise. + + The User-based Security Model prescribes that, if authentication is + used, then the complete message is checked for integrity in the + authentication module. + + For a message to be authenticated, it needs to pass authentication + check by the authentication module and the timeliness check which is + a fixed part of this User-based Security model. + +1.4.3. Privacy Protocol + + Section 8 describes the CBC-DES Symmetric Encryption Protocol which + is the first privacy protocol to be used with the User-based Security + Model. In the future additional or replacement privacy protocols may + be defined as new needs arise. + + The User-based Security Model prescribes that the scopedPDU is + protected from disclosure when a message is sent with privacy. + + The User-based Security Model also prescribes that a message needs to + be authenticated if privacy is in use. + + + + + + + +Blumenthal & Wijnen Standards Track [Page 8] + +RFC 3414 USM for SNMPv3 December 2002 + + +1.5. Protection against Message Replay, Delay and Redirection + +1.5.1. Authoritative SNMP Engine + + In order to protect against message replay, delay and redirection, + one of the SNMP engines involved in each communication is designated + to be the authoritative SNMP engine. When an SNMP message contains a + payload which expects a response (those messages that contain a + Confirmed Class PDU [RFC3411]), then the receiver of such messages is + authoritative. When an SNMP message contains a payload which does + not expect a response (those messages that contain an Unconfirmed + Class PDU [RFC3411]), then the sender of such a message is + authoritative. + +1.5.2. Mechanisms + + The following mechanisms are used: + + 1) To protect against the threat of message delay or replay (to an + extent greater than can occur through normal operation), a set of + timeliness indicators (for the authoritative SNMP engine) are + included in each message generated. An SNMP engine evaluates the + timeliness indicators to determine if a received message is + recent. An SNMP engine may evaluate the timeliness indicators to + ensure that a received message is at least as recent as the last + message it received from the same source. A non-authoritative + SNMP engine uses received authentic messages to advance its notion + of the timeliness indicators at the remote authoritative source. + + An SNMP engine MUST also use a mechanism to match incoming + Responses to outstanding Requests and it MUST drop any Responses + that do not match an outstanding request. For example, a msgID + can be inserted in every message to cater for this functionality. + + These mechanisms provide for the detection of authenticated + messages whose time of generation was not recent. + + This protection against the threat of message delay or replay does + not imply nor provide any protection against unauthorized deletion + or suppression of messages. Also, an SNMP engine may not be able + to detect message reordering if all the messages involved are sent + within the Time Window interval. Other mechanisms defined + independently of the security protocol can also be used to detect + the re-ordering replay, deletion, or suppression of messages + containing Set operations (e.g., the MIB variable snmpSetSerialNo + [RFC3418]). + + + + + +Blumenthal & Wijnen Standards Track [Page 9] + +RFC 3414 USM for SNMPv3 December 2002 + + + 2) Verification that a message sent to/from one authoritative SNMP + engine cannot be replayed to/as-if-from another authoritative SNMP + engine. + + Included in each message is an identifier unique to the + authoritative SNMP engine associated with the sender or intended + recipient of the message. + + A message containing an Unconfirmed Class PDU sent by an + authoritative SNMP engine to one non-authoritative SNMP engine can + potentially be replayed to another non-authoritative SNMP engine. + The latter non-authoritative SNMP engine might (if it knows about + the same userName with the same secrets at the authoritative SNMP + engine) as a result update its notion of timeliness indicators of + the authoritative SNMP engine, but that is not considered a + threat. In this case, A Report or Response message will be + discarded by the Message Processing Model, because there should + not be an outstanding Request message. A Trap will possibly be + accepted. Again, that is not considered a threat, because the + communication was authenticated and timely. It is as if the + authoritative SNMP engine was configured to start sending Traps to + the second SNMP engine, which theoretically can happen without the + knowledge of the second SNMP engine anyway. Anyway, the second + SNMP engine may not expect to receive this Trap, but is allowed to + see the management information contained in it. + + 3) Detection of messages which were not recently generated. + + A set of time indicators are included in the message, indicating + the time of generation. Messages without recent time indicators + are not considered authentic. In addition, an SNMP engine MUST + drop any Responses that do not match an outstanding request. This + however is the responsibility of the Message Processing Model. + + This memo allows the same user to be defined on multiple SNMP + engines. Each SNMP engine maintains a value, snmpEngineID, which + uniquely identifies the SNMP engine. This value is included in each + message sent to/from the SNMP engine that is authoritative (see + section 1.5.1). On receipt of a message, an authoritative SNMP + engine checks the value to ensure that it is the intended recipient, + and a non-authoritative SNMP engine uses the value to ensure that the + message is processed using the correct state information. + + Each SNMP engine maintains two values, snmpEngineBoots and + snmpEngineTime, which taken together provide an indication of time at + that SNMP engine. Both of these values are included in an + authenticated message sent to/received from that SNMP engine. On + receipt, the values are checked to ensure that the indicated + + + +Blumenthal & Wijnen Standards Track [Page 10] + +RFC 3414 USM for SNMPv3 December 2002 + + + timeliness value is within a Time Window of the current time. The + Time Window represents an administrative upper bound on acceptable + delivery delay for protocol messages. + + For an SNMP engine to generate a message which an authoritative SNMP + engine will accept as authentic, and to verify that a message + received from that authoritative SNMP engine is authentic, such an + SNMP engine must first achieve timeliness synchronization with the + authoritative SNMP engine. See section 2.3. + +1.6. Abstract Service Interfaces + + Abstract service interfaces have been defined to describe the + conceptual interfaces between the various subsystems within an SNMP + entity. Similarly a set of abstract service interfaces have been + defined within the User-based Security Model (USM) to describe the + conceptual interfaces between the generic USM services and the + self-contained authentication and privacy services. + + These abstract service interfaces are defined by a set of primitives + that define the services provided and the abstract data elements that + must be passed when the services are invoked. This section lists the + primitives that have been defined for the User-based Security Model. + +1.6.1. User-based Security Model Primitives for Authentication + + The User-based Security Model provides the following internal + primitives to pass data back and forth between the Security Model + itself and the authentication service: + + statusInformation = + authenticateOutgoingMsg( + IN authKey -- secret key for authentication + IN wholeMsg -- unauthenticated complete message + OUT authenticatedWholeMsg -- complete authenticated message + ) + + statusInformation = + authenticateIncomingMsg( + IN authKey -- secret key for authentication + IN authParameters -- as received on the wire + IN wholeMsg -- as received on the wire + OUT authenticatedWholeMsg -- complete authenticated message + ) + + + + + + + +Blumenthal & Wijnen Standards Track [Page 11] + +RFC 3414 USM for SNMPv3 December 2002 + + +1.6.2. User-based Security Model Primitives for Privacy + + The User-based Security Model provides the following internal + primitives to pass data back and forth between the Security Model + itself and the privacy service: + + statusInformation = + encryptData( + IN encryptKey -- secret key for encryption + IN dataToEncrypt -- data to encrypt (scopedPDU) + OUT encryptedData -- encrypted data (encryptedPDU) + OUT privParameters -- filled in by service provider + ) + + statusInformation = + decryptData( + IN decryptKey -- secret key for decrypting + IN privParameters -- as received on the wire + IN encryptedData -- encrypted data (encryptedPDU) + OUT decryptedData -- decrypted data (scopedPDU) + ) + +2. Elements of the Model + + This section contains definitions required to realize the security + model defined by this memo. + +2.1. User-based Security Model Users + + Management operations using this Security Model make use of a defined + set of user identities. For any user on whose behalf management + operations are authorized at a particular SNMP engine, that SNMP + engine must have knowledge of that user. An SNMP engine that wishes + to communicate with another SNMP engine must also have knowledge of a + user known to that engine, including knowledge of the applicable + attributes of that user. + + A user and its attributes are defined as follows: + + userName + A string representing the name of the user. + + securityName + A human-readable string representing the user in a format that is + Security Model independent. There is a one-to-one relationship + between userName and securityName. + + + + + +Blumenthal & Wijnen Standards Track [Page 12] + +RFC 3414 USM for SNMPv3 December 2002 + + + authProtocol + An indication of whether messages sent on behalf of this user can + be authenticated, and if so, the type of authentication protocol + which is used. Two such protocols are defined in this memo: + + - the HMAC-MD5-96 authentication protocol. + - the HMAC-SHA-96 authentication protocol. + + authKey + If messages sent on behalf of this user can be authenticated, the + (private) authentication key for use with the authentication + protocol. Note that a user's authentication key will normally be + different at different authoritative SNMP engines. The authKey is + not accessible via SNMP. The length requirements of the authKey + are defined by the authProtocol in use. + + authKeyChange and authOwnKeyChange + The only way to remotely update the authentication key. Does that + in a secure manner, so that the update can be completed without + the need to employ privacy protection. + + privProtocol + An indication of whether messages sent on behalf of this user can + be protected from disclosure, and if so, the type of privacy + protocol which is used. One such protocol is defined in this + memo: the CBC-DES Symmetric Encryption Protocol. + + privKey + If messages sent on behalf of this user can be en/decrypted, the + (private) privacy key for use with the privacy protocol. Note + that a user's privacy key will normally be different at different + authoritative SNMP engines. The privKey is not accessible via + SNMP. The length requirements of the privKey are defined by the + privProtocol in use. + + privKeyChange and privOwnKeyChange + The only way to remotely update the encryption key. Does that in + a secure manner, so that the update can be completed without the + need to employ privacy protection. + +2.2. Replay Protection + + Each SNMP engine maintains three objects: + + - snmpEngineID, which (at least within an administrative domain) + uniquely and unambiguously identifies an SNMP engine. + + + + + +Blumenthal & Wijnen Standards Track [Page 13] + +RFC 3414 USM for SNMPv3 December 2002 + + + - snmpEngineBoots, which is a count of the number of times the SNMP + engine has re-booted/re-initialized since snmpEngineID was last + configured; and, + + - snmpEngineTime, which is the number of seconds since the + snmpEngineBoots counter was last incremented. + + Each SNMP engine is always authoritative with respect to these + objects in its own SNMP entity. It is the responsibility of a non- + authoritative SNMP engine to synchronize with the authoritative SNMP + engine, as appropriate. + + An authoritative SNMP engine is required to maintain the values of + its snmpEngineID and snmpEngineBoots in non-volatile storage. + +2.2.1. msgAuthoritativeEngineID + + The msgAuthoritativeEngineID value contained in an authenticated + message is used to defeat attacks in which messages from one SNMP + engine to another SNMP engine are replayed to a different SNMP + engine. It represents the snmpEngineID at the authoritative SNMP + engine involved in the exchange of the message. + + When an authoritative SNMP engine is first installed, it sets its + local value of snmpEngineID according to a enterprise-specific + algorithm (see the definition of the Textual Convention for + SnmpEngineID in the SNMP Architecture document [RFC3411]). + +2.2.2. msgAuthoritativeEngineBoots and msgAuthoritativeEngineTime + + The msgAuthoritativeEngineBoots and msgAuthoritativeEngineTime values + contained in an authenticated message are used to defeat attacks in + which messages are replayed when they are no longer valid. They + represent the snmpEngineBoots and snmpEngineTime values at the + authoritative SNMP engine involved in the exchange of the message. + + Through use of snmpEngineBoots and snmpEngineTime, there is no + requirement for an SNMP engine to have a non-volatile clock which + ticks (i.e., increases with the passage of time) even when the + SNMP engine is powered off. Rather, each time an SNMP engine + re-boots, it retrieves, increments, and then stores snmpEngineBoots + in non-volatile storage, and resets snmpEngineTime to zero. + + When an SNMP engine is first installed, it sets its local values of + snmpEngineBoots and snmpEngineTime to zero. If snmpEngineTime ever + reaches its maximum value (2147483647), then snmpEngineBoots is + incremented as if the SNMP engine has re-booted and snmpEngineTime is + reset to zero and starts incrementing again. + + + +Blumenthal & Wijnen Standards Track [Page 14] + +RFC 3414 USM for SNMPv3 December 2002 + + + Each time an authoritative SNMP engine re-boots, any SNMP engines + holding that authoritative SNMP engine's values of snmpEngineBoots + and snmpEngineTime need to re-synchronize prior to sending correctly + authenticated messages to that authoritative SNMP engine (see Section + 2.3 for (re-)synchronization procedures). Note, however, that the + procedures do provide for a notification to be accepted as authentic + by a receiving SNMP engine, when sent by an authoritative SNMP engine + which has re-booted since the receiving SNMP engine last (re- + )synchronized. + + + If an authoritative SNMP engine is ever unable to determine its + latest snmpEngineBoots value, then it must set its snmpEngineBoots + value to 2147483647. + + Whenever the local value of snmpEngineBoots has the value 2147483647 + it latches at that value and an authenticated message always causes + an notInTimeWindow authentication failure. + + In order to reset an SNMP engine whose snmpEngineBoots value has + reached the value 2147483647, manual intervention is required. The + engine must be physically visited and re-configured, either with a + new snmpEngineID value, or with new secret values for the + authentication and privacy protocols of all users known to that SNMP + engine. Note that even if an SNMP engine re-boots once a second that + it would still take approximately 68 years before the max value of + 2147483647 would be reached. + +2.2.3. Time Window + + The Time Window is a value that specifies the window of time in which + a message generated on behalf of any user is valid. This memo + specifies that the same value of the Time Window, 150 seconds, is + used for all users. + +2.3. Time Synchronization + + Time synchronization, required by a non-authoritative SNMP engine + in order to proceed with authentic communications, has occurred + when the non-authoritative SNMP engine has obtained a local notion + of the authoritative SNMP engine's values of snmpEngineBoots and + snmpEngineTime from the authoritative SNMP engine. These values + must be (and remain) within the authoritative SNMP engine's Time + Window. So the local notion of the authoritative SNMP engine's + values must be kept loosely synchronized with the values stored + at the authoritative SNMP engine. In addition to keeping a local + copy of snmpEngineBoots and snmpEngineTime from the authoritative + SNMP engine, a non-authoritative SNMP engine must also keep one + + + +Blumenthal & Wijnen Standards Track [Page 15] + +RFC 3414 USM for SNMPv3 December 2002 + + + local variable, latestReceivedEngineTime. This value records the + highest value of snmpEngineTime that was received by the + non-authoritative SNMP engine from the authoritative SNMP engine + and is used to eliminate the possibility of replaying messages + that would prevent the non-authoritative SNMP engine's notion of + the snmpEngineTime from advancing. + + A non-authoritative SNMP engine must keep local notions of these + values (snmpEngineBoots, snmpEngineTime and latestReceivedEngineTime) + for each authoritative SNMP engine with which it wishes to + communicate. Since each authoritative SNMP engine is uniquely and + unambiguously identified by its value of snmpEngineID, the + non-authoritative SNMP engine may use this value as a key in order to + cache its local notions of these values. + + Time synchronization occurs as part of the procedures of receiving an + SNMP message (Section 3.2, step 7b). As such, no explicit time + synchronization procedure is required by a non-authoritative SNMP + engine. Note, that whenever the local value of snmpEngineID is + changed (e.g., through discovery) or when secure communications are + first established with an authoritative SNMP engine, the local values + of snmpEngineBoots and latestReceivedEngineTime should be set to + zero. This will cause the time synchronization to occur when the + next authentic message is received. + +2.4. SNMP Messages Using this Security Model + + The syntax of an SNMP message using this Security Model adheres to + the message format defined in the version-specific Message Processing + Model document (for example [RFC3412]). + + The field msgSecurityParameters in SNMPv3 messages has a data type of + OCTET STRING. Its value is the BER serialization of the following + ASN.1 sequence: + + USMSecurityParametersSyntax DEFINITIONS IMPLICIT TAGS ::= BEGIN + + UsmSecurityParameters ::= + SEQUENCE { + -- global User-based security parameters + msgAuthoritativeEngineID OCTET STRING, + msgAuthoritativeEngineBoots INTEGER (0..2147483647), + msgAuthoritativeEngineTime INTEGER (0..2147483647), + msgUserName OCTET STRING (SIZE(0..32)), + -- authentication protocol specific parameters + msgAuthenticationParameters OCTET STRING, + -- privacy protocol specific parameters + msgPrivacyParameters OCTET STRING + + + +Blumenthal & Wijnen Standards Track [Page 16] + +RFC 3414 USM for SNMPv3 December 2002 + + + } + END + + The fields of this sequence are: + + - The msgAuthoritativeEngineID specifies the snmpEngineID of the + authoritative SNMP engine involved in the exchange of the message. + + - The msgAuthoritativeEngineBoots specifies the snmpEngineBoots value + at the authoritative SNMP engine involved in the exchange of the + message. + + - The msgAuthoritativeEngineTime specifies the snmpEngineTime value + at the authoritative SNMP engine involved in the exchange of the + message. + + - The msgUserName specifies the user (principal) on whose behalf the + message is being exchanged. Note that a zero-length userName will + not match any user, but it can be used for snmpEngineID discovery. + + - The msgAuthenticationParameters are defined by the authentication + protocol in use for the message, as defined by the + usmUserAuthProtocol column in the user's entry in the usmUserTable. + + - The msgPrivacyParameters are defined by the privacy protocol in use + for the message, as defined by the usmUserPrivProtocol column in + the user's entry in the usmUserTable). + + See appendix A.4 for an example of the BER encoding of field + msgSecurityParameters. + +2.5. Services provided by the User-based Security Model + + This section describes the services provided by the User-based + Security Model with their inputs and outputs. + + The services are described as primitives of an abstract service + interface and the inputs and outputs are described as abstract data + elements as they are passed in these abstract service primitives. + +2.5.1. Services for Generating an Outgoing SNMP Message + + When the Message Processing (MP) Subsystem invokes the User-based + Security module to secure an outgoing SNMP message, it must use the + appropriate service as provided by the Security module. These two + services are provided: + + + + + +Blumenthal & Wijnen Standards Track [Page 17] + +RFC 3414 USM for SNMPv3 December 2002 + + + 1) A service to generate a Request message. The abstract service + primitive is: + + statusInformation = -- success or errorIndication + generateRequestMsg( + 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 + ) + + 2) A service to generate a Response message. The abstract service + primitive is: + + statusInformation = -- success or errorIndication + generateResponseMsg( + 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 + IN securityStateReference -- reference to security state + -- information from original + -- request + OUT securityParameters -- filled in by Security Module + OUT wholeMsg -- complete generated message + OUT wholeMsgLength -- length of generated message + ) + + The abstract data elements passed as parameters in the abstract + service primitives are as follows: + + statusInformation + An indication of whether the encoding and securing of the message + was successful. If not it is an indication of the problem. + + + + + + +Blumenthal & Wijnen Standards Track [Page 18] + +RFC 3414 USM for SNMPv3 December 2002 + + + messageProcessingModel + The SNMP version number for the message to be generated. This + data is not used by the User-based Security module. + + globalData + The message header (i.e., its administrative information). This + data is not used by the User-based Security module. + + maxMessageSize + The maximum message size as included in the message. This data is + not used by the User-based Security module. + + securityParameters + These are the security parameters. They will be filled in by the + User-based Security module. + + securityModel + The securityModel in use. Should be User-based Security Model. + This data is not used by the User-based Security module. + + securityName + Together with the snmpEngineID it identifies a row in the + usmUserTablethat is to be used for securing the message. The + securityName has a format that is independent of the Security + Model. In case of a response this parameter is ignored and the + value from the cache is used. + + securityLevel + The Level of Security from which the User-based Security module + determines if the message needs to be protected from disclosure + and if the message needs to be authenticated. + + securityEngineID + The snmpEngineID of the authoritative SNMP engine to which a + dateRequest message is to be sent. In case of a response it is + implied to be the processing SNMP engine's snmpEngineID and so if + it is specified, then it is ignored. + + scopedPDU + The message payload. The data is opaque as far as the User-based + Security Model is concerned. + + securityStateReference + A handle/reference to cachedSecurityData to be used when securing + an outgoing Response message. This is the exact same + handle/reference as it was generated by the User-based Security + module when processing the incoming Request message to which this + is the Response message. + + + +Blumenthal & Wijnen Standards Track [Page 19] + +RFC 3414 USM for SNMPv3 December 2002 + + + wholeMsg + The fully encoded and secured message ready for sending on the + wire. + + wholeMsgLength + The length of the encoded and secured message (wholeMsg). + + Upon completion of the process, the User-based Security module + returns statusInformation. If the process was successful, the + completed message with privacy and authentication applied if such was + requested by the specified securityLevel is returned. If the process + was not successful, then an errorIndication is returned. + +2.5.2. Services for Processing an Incoming SNMP Message + + When the Message Processing (MP) Subsystem invokes the User-based + Security module to verify proper security of an incoming message, it + must use the service provided for an incoming message. The abstract + service primitive is: + + 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 + OUT securityEngineID -- authoritative SNMP entity + OUT securityName -- identification of the principal + OUT scopedPDU, -- message (plaintext) payload + OUT maxSizeResponseScopedPDU -- maximum size of the Response PDU + OUT securityStateReference -- reference to security state + ) -- information, needed for response + + The abstract data elements passed as parameters in the abstract + service primitives are as follows: + + statusInformation + An indication of whether the process was successful or not. If + not, then the statusInformation includes the OID and the value of + the error counter that was incremented. + + messageProcessingModel + The SNMP version number as received in the message. This data is + not used by the User-based Security module. + + + +Blumenthal & Wijnen Standards Track [Page 20] + +RFC 3414 USM for SNMPv3 December 2002 + + + maxMessageSize + The maximum message size as included in the message. The User-bas + User-based Security module uses this value to calculate the + maxSizeResponseScopedPDU. + + securityParameters + These are the security parameters as received in the message. + + securityModel + The securityModel in use. Should be the User-based Security + Model. This data is not used by the User-based Security module. + + securityLevel + The Level of Security from which the User-based Security module + determines if the message needs to be protected from disclosure + and if the message needs to be authenticated. + + wholeMsg + The whole message as it was received. + + wholeMsgLength + The length of the message as it was received (wholeMsg). + + securityEngineID + The snmpEngineID that was extracted from the field + msgAuthoritativeEngineID and that was used to lookup the secrets + in the usmUserTable. + + securityName + The security name representing the user on whose behalf the + message was received. The securityName has a format that is + independent of the Security Model. + + scopedPDU + The message payload. The data is opaque as far as the User-based + Security Model is concerned. + + maxSizeResponseScopedPDU + The maximum size of a scopedPDU to be included in a possible + Response message. The User-based Security module calculates this + size based on the msgMaxSize (as received in the message) and the + space required for the message header (including the + securityParameters) for such a Response message. + + securityStateReference + A handle/reference to cachedSecurityData to be used when securing + an outgoing Response message. When the Message Processing + Subsystem calls the User-based Security module to generate a + + + +Blumenthal & Wijnen Standards Track [Page 21] + +RFC 3414 USM for SNMPv3 December 2002 + + + response to this incoming message it must pass this + handle/reference. + + Upon completion of the process, the User-based Security module + returns statusInformation and, if the process was successful, the + additional data elements for further processing of the message. If + the process was not successful, then an errorIndication, possibly + with a OID and value pair of an error counter that was incremented. + +2.6. Key Localization Algorithm. + + A localized key is a secret key shared between a user U and one + authoritative SNMP engine E. Even though a user may have only one + password and therefore one key for the whole network, the actual + secrets shared between the user and each authoritative SNMP engine + will be different. This is achieved by key localization [Localized- + key]. + + First, if a user uses a password, then the user's password is + converted into a key Ku using one of the two algorithms described in + Appendices A.2.1 and A.2.2. + + To convert key Ku into a localized key Kul of user U at the + authoritative SNMP engine E, one appends the snmpEngineID of the + authoritative SNMP engine to the key Ku and then appends the key Ku + to the result, thus enveloping the snmpEngineID within the two copies + of user's key Ku. Then one runs a secure hash function (which one + depends on the authentication protocol defined for this user U at + authoritative SNMP engine E; this document defines two authentication + protocols with their associated algorithms based on MD5 and SHA). + The output of the hash-function is the localized key Kul for user U + at the authoritative SNMP engine E. + +3. Elements of Procedure + + This section describes the security related procedures followed by an + SNMP engine when processing SNMP messages according to the User-based + Security Model. + +3.1. Generating an Outgoing SNMP Message + + This section describes the procedure followed by an SNMP engine + whenever it generates a message containing a management operation + (like a request, a response, a notification, or a report) on behalf + of a user, with a particular securityLevel. + + + + + + +Blumenthal & Wijnen Standards Track [Page 22] + +RFC 3414 USM for SNMPv3 December 2002 + + + 1) a) If any securityStateReference is passed (Response or Report + message), then information concerning the user is extracted + from the cachedSecurityData. The cachedSecurityData can now be + discarded. The securityEngineID is set to the local + snmpEngineID. The securityLevel is set to the value specified + by the calling module. + + Otherwise, + + b) based on the securityName, information concerning the user at + the destination snmpEngineID, specified by the + securityEngineID, is extracted from the Local Configuration + Datastore (LCD, usmUserTable). If information about the user + is absent from the LCD, then an error indication + (unknownSecurityName) is returned to the calling module. + + 2) If the securityLevel specifies that the message is to be protected + from disclosure, but the user does not support both an + authentication and a privacy protocol then the message cannot be + sent. An error indication (unsupportedSecurityLevel) is returned + to the calling module. + + 3) If the securityLevel specifies that the message is to be + authenticated, but the user does not support an authentication + protocol, then the message cannot be sent. An error indication + (unsupportedSecurityLevel) is returned to the calling module. + + 4) a) If the securityLevel specifies that the message is to be + protected from disclosure, then the octet sequence representing + the serialized scopedPDU is encrypted according to the user's + privacy protocol. To do so a call is made to the privacy + module that implements the user's privacy protocol according to + the abstract primitive: + + statusInformation = -- success or failure + encryptData( + IN encryptKey -- user's localized privKey + IN dataToEncrypt -- serialized scopedPDU + OUT encryptedData -- serialized encryptedPDU + OUT privParameters -- serialized privacy parameters + ) + + statusInformation + indicates if the encryption process was successful or not. + + encryptKey + the user's localized private privKey is the secret key that + can be used by the encryption algorithm. + + + +Blumenthal & Wijnen Standards Track [Page 23] + +RFC 3414 USM for SNMPv3 December 2002 + + + dataToEncrypt + the serialized scopedPDU is the data to be encrypted. + + encryptedData + the encryptedPDU represents the encrypted scopedPDU, encoded + as an OCTET STRING. + + privParameters + the privacy parameters, encoded as an OCTET STRING. + + If the privacy module returns failure, then the message cannot + be sent and an error indication (encryptionError) is returned + to the calling module. + + If the privacy module returns success, then the returned + privParameters are put into the msgPrivacyParameters field of + the securityParameters and the encryptedPDU serves as the + payload of the message being prepared. + + Otherwise, + + b) If the securityLevel specifies that the message is not to be be + protected from disclosure, then a zero-length OCTET STRING is + encoded into the msgPrivacyParameters field of the + securityParameters and the plaintext scopedPDU serves as the + payload of the message being prepared. + + 5) The securityEngineID is encoded as an OCTET STRING into the + msgAuthoritativeEngineID field of the securityParameters. Note + that an empty (zero length) securityEngineID is OK for a Request + message, because that will cause the remote (authoritative) SNMP + engine to return a Report PDU with the proper securityEngineID + included in the msgAuthoritativeEngineID in the securityParameters + of that returned Report PDU. + + 6) a) If the securityLevel specifies that the message is to be + authenticated, then the current values of snmpEngineBoots and + snmpEngineTime corresponding to the securityEngineID from the + LCD are used. + + Otherwise, + + b) If this is a Response or Report message, then the current value + of snmpEngineBoots and snmpEngineTime corresponding to the + local snmpEngineID from the LCD are used. + + + + + + +Blumenthal & Wijnen Standards Track [Page 24] + +RFC 3414 USM for SNMPv3 December 2002 + + + Otherwise, + + c) If this is a Request message, then a zero value is used for + both snmpEngineBoots and snmpEngineTime. This zero value gets + used if snmpEngineID is empty. + + The values are encoded as INTEGER respectively into the + msgAuthoritativeEngineBoots and msgAuthoritativeEngineTime + fields of the securityParameters. + + 7) The userName is encoded as an OCTET STRING into the msgUserName + field of the securityParameters. + + 8) a) If the securityLevel specifies that the message is to be + authenticated, the message is authenticated according to the + user's authentication protocol. To do so a call is made to the + authentication module that implements the user's authentication + protocol according to the abstract service primitive: + + statusInformation = + authenticateOutgoingMsg( + IN authKey -- the user's localized authKey + IN wholeMsg -- unauthenticated message + OUT authenticatedWholeMsg -- authenticated complete message + ) + + statusInformation + indicates if authentication was successful or not. + + authKey + the user's localized private authKey is the secret key that + can be used by the authentication algorithm. + + wholeMsg + the complete serialized message to be authenticated. + + authenticatedWholeMsg + the same as the input given to the authenticateOutgoingMsg + service, but with msgAuthenticationParameters properly + filled in. + + If the authentication module returns failure, then the message + cannot be sent and an error indication (authenticationFailure) + is returned to the calling module. + + + + + + + +Blumenthal & Wijnen Standards Track [Page 25] + +RFC 3414 USM for SNMPv3 December 2002 + + + If the authentication module returns success, then the + msgAuthenticationParameters field is put into the + securityParameters and the authenticatedWholeMsg represents the + serialization of the authenticated message being prepared. + + Otherwise, + + b) If the securityLevel specifies that the message is not to be + authenticated then a zero-length OCTET STRING is encoded into + the msgAuthenticationParameters field of the + securityParameters. The wholeMsg is now serialized and then + represents the unauthenticated message being prepared. + + 9) The completed message with its length is returned to the calling + module with the statusInformation set to success. + +3.2. Processing an Incoming SNMP Message + + This section describes the procedure followed by an SNMP engine + whenever it receives a message containing a management operation on + behalf of a user, with a particular securityLevel. + + 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 gets discarded, the + state information should also be released. Also, an error indication + can return an OID and value for an incremented counter and optionally + a value for securityLevel, and values for contextEngineID or + contextName for the counter. In addition, the securityStateReference + data is returned if any such information is available at the point + where the error is detected. + + 1) If the received securityParameters is not the serialization + (according to the conventions of [RFC3417]) of an OCTET STRING + formatted according to the UsmSecurityParameters defined in + section 2.4, then the snmpInASNParseErrs counter [RFC3418] is + incremented, and an error indication (parseError) is returned to + the calling module. Note that we return without the OID and + value of the incremented counter, because in this case there is + not enough information to generate a Report PDU. + + 2) The values of the security parameter fields are extracted from + the securityParameters. The securityEngineID to be returned to + the caller is the value of the msgAuthoritativeEngineID field. + The cachedSecurityData is prepared and a securityStateReference + is prepared to reference this data. Values to be cached are: + + msgUserName + + + +Blumenthal & Wijnen Standards Track [Page 26] + +RFC 3414 USM for SNMPv3 December 2002 + + + 3) If the value of the msgAuthoritativeEngineID field in the + securityParameters is unknown then: + + a) a non-authoritative SNMP engine that performs discovery may + optionally create a new entry in its Local Configuration + Datastore (LCD) and continue processing; + + or + + b) the usmStatsUnknownEngineIDs counter is incremented, and an + error indication (unknownEngineID) together with the OID and + value of the incremented counter is returned to the calling + module. + + Note in the event that a zero-length, or other illegally sized + msgAuthoritativeEngineID is received, b) should be chosen to + facilitate engineID discovery. Otherwise the choice between a) + and b) is an implementation issue. + + 4) Information about the value of the msgUserName and + msgAuthoritativeEngineID fields is extracted from the Local + Configuration Datastore (LCD, usmUserTable). If no information + is available for the user, then the usmStatsUnknownUserNames + counter is incremented and an error indication + (unknownSecurityName) together with the OID and value of the + incremented counter is returned to the calling module. + + 5) If the information about the user indicates that it does not + support the securityLevel requested by the caller, then the + usmStatsUnsupportedSecLevels counter is incremented and an error + indication (unsupportedSecurityLevel) together with the OID and + value of the incremented counter is returned to the calling + module. + + 6) If the securityLevel specifies that the message is to be + authenticated, then the message is authenticated according to the + user's authentication protocol. To do so a call is made to the + authentication module that implements the user's authentication + protocol according to the abstract service primitive: + + statusInformation = -- success or failure + authenticateIncomingMsg( + IN authKey -- the user's localized authKey + IN authParameters -- as received on the wire + IN wholeMsg -- as received on the wire + OUT authenticatedWholeMsg -- checked for authentication + ) + + + + +Blumenthal & Wijnen Standards Track [Page 27] + +RFC 3414 USM for SNMPv3 December 2002 + + + statusInformation + indicates if authentication was successful or not. + + authKey + the user's localized private authKey is the secret key that + can be used by the authentication algorithm. + + wholeMsg + the complete serialized message to be authenticated. + + authenticatedWholeMsg + the same as the input given to the authenticateIncomingMsg + service, but after authentication has been checked. + + If the authentication module returns failure, then the message + cannot be trusted, so the usmStatsWrongDigests counter is + incremented and an error indication (authenticationFailure) + together with the OID and value of the incremented counter is + returned to the calling module. + + If the authentication module returns success, then the message is + authentic and can be trusted so processing continues. + + 7) If the securityLevel indicates an authenticated message, then the + local values of snmpEngineBoots, snmpEngineTime and + latestReceivedEngineTime corresponding to the value of the + msgAuthoritativeEngineID field are extracted from the Local + Configuration Datastore. + + a) If the extracted value of msgAuthoritativeEngineID is the same + as the value of snmpEngineID of the processing SNMP engine + (meaning this is the authoritative SNMP engine), then if any + of the following conditions is true, then the message is + considered to be outside of the Time Window: + + - the local value of snmpEngineBoots is 2147483647; + + - the value of the msgAuthoritativeEngineBoots field differs + from the local value of snmpEngineBoots; or, + + - the value of the msgAuthoritativeEngineTime field differs + from the local notion of snmpEngineTime by more than +/- 150 + seconds. + + If the message is considered to be outside of the Time Window + then the usmStatsNotInTimeWindows counter is incremented and + an error indication (notInTimeWindow) together with the OID, + the value of the incremented counter, and an indication that + + + +Blumenthal & Wijnen Standards Track [Page 28] + +RFC 3414 USM for SNMPv3 December 2002 + + + the error must be reported with a securityLevel of authNoPriv, + is returned to the calling module + + b) If the extracted value of msgAuthoritativeEngineID is not the + same as the value snmpEngineID of the processing SNMP engine + (meaning this is not the authoritative SNMP engine), then: + + 1) if at least one of the following conditions is true: + + - the extracted value of the msgAuthoritativeEngineBoots + field is greater than the local notion of the value of + snmpEngineBoots; or, + + - the extracted value of the msgAuthoritativeEngineBoots + field is equal to the local notion of the value of + snmpEngineBoots, and the extracted value of + msgAuthoritativeEngineTime field is greater than the + value of latestReceivedEngineTime, + + then the LCD entry corresponding to the extracted value of + the msgAuthoritativeEngineID field is updated, by setting: + + - the local notion of the value of snmpEngineBoots to the + value of the msgAuthoritativeEngineBoots field, + + - the local notion of the value of snmpEngineTime to the + value of the msgAuthoritativeEngineTime field, and + + - the latestReceivedEngineTime to the value of the value of + the msgAuthoritativeEngineTime field. + + 2) if any of the following conditions is true, then the + message is considered to be outside of the Time Window: + + - the local notion of the value of snmpEngineBoots is + 2147483647; + + - the value of the msgAuthoritativeEngineBoots field is + less than the local notion of the value of + snmpEngineBoots; or, + + - the value of the msgAuthoritativeEngineBoots field is + equal to the local notion of the value of snmpEngineBoots + and the value of the msgAuthoritativeEngineTime field is + more than 150 seconds less than the local notion of the + value of snmpEngineTime. + + + + + +Blumenthal & Wijnen Standards Track [Page 29] + +RFC 3414 USM for SNMPv3 December 2002 + + + If the message is considered to be outside of the Time + Window then an error indication (notInTimeWindow) is + returned to the calling module. + + Note that this means that a too old (possibly replayed) + message has been detected and is deemed unauthentic. + + Note that this procedure allows for the value of + msgAuthoritativeEngineBoots in the message to be greater + than the local notion of the value of snmpEngineBoots to + allow for received messages to be accepted as authentic + when received from an authoritative SNMP engine that has + re-booted since the receiving SNMP engine last + (re-)synchronized. + + 8) a) If the securityLevel indicates that the message was protected + from disclosure, then the OCTET STRING representing the + encryptedPDU is decrypted according to the user's privacy + protocol to obtain an unencrypted serialized scopedPDU value. + To do so a call is made to the privacy module that implements + the user's privacy protocol according to the abstract + primitive: + + statusInformation = -- success or failure + decryptData( + IN decryptKey -- the user's localized privKey + IN privParameters -- as received on the wire + IN encryptedData -- encryptedPDU as received + OUT decryptedData -- serialized decrypted scopedPDU + ) + + statusInformation + indicates if the decryption process was successful or not. + + decryptKey + the user's localized private privKey is the secret key that + can be used by the decryption algorithm. + + privParameters + the msgPrivacyParameters, encoded as an OCTET STRING. + + encryptedData + the encryptedPDU represents the encrypted scopedPDU, + encoded as an OCTET STRING. + + decryptedData + the serialized scopedPDU if decryption is successful. + + + + +Blumenthal & Wijnen Standards Track [Page 30] + +RFC 3414 USM for SNMPv3 December 2002 + + + If the privacy module returns failure, then the message can + not be processed, so the usmStatsDecryptionErrors counter is + incremented and an error indication (decryptionError) together + with the OID and value of the incremented counter is returned + to the calling module. + + If the privacy module returns success, then the decrypted + scopedPDU is the message payload to be returned to the calling + module. + + Otherwise, + + b) The scopedPDU component is assumed to be in plain text and is + the message payload to be returned to the calling module. + + 9) The maxSizeResponseScopedPDU is calculated. This is the maximum + size allowed for a scopedPDU for a possible Response message. + Provision is made for a message header that allows the same + securityLevel as the received Request. + + 10) The securityName for the user is retrieved from the usmUserTable. + + 11) The security data is cached as cachedSecurityData, so that a + possible response to this message can and will use the same + authentication and privacy secrets. Information to be + saved/cached is as follows: + + msgUserName, + usmUserAuthProtocol, usmUserAuthKey + usmUserPrivProtocol, usmUserPrivKey + + 12) The statusInformation is set to success and a return is made to + the calling module passing back the OUT parameters as specified + in the processIncomingMsg primitive. + +4. Discovery + + The User-based Security Model requires that a discovery process + obtains sufficient information about other SNMP engines in order to + communicate with them. Discovery requires an non-authoritative SNMP + engine to learn the authoritative SNMP engine's snmpEngineID value + before communication may proceed. This may be accomplished by + generating a Request message with a securityLevel of noAuthNoPriv, a + msgUserName of zero-length, a msgAuthoritativeEngineID value of zero + length, and the varBindList left empty. The response to this message + will be a Report message containing the snmpEngineID of the + authoritative SNMP engine as the value of the + msgAuthoritativeEngineID field within the msgSecurityParameters + + + +Blumenthal & Wijnen Standards Track [Page 31] + +RFC 3414 USM for SNMPv3 December 2002 + + + field. It contains a Report PDU with the usmStatsUnknownEngineIDs + counter in the varBindList. + + If authenticated communication is required, then the discovery + process should also establish time synchronization with the + authoritative SNMP engine. This may be accomplished by sending an + authenticated Request message with the value of + msgAuthoritativeEngineID set to the newly learned snmpEngineID and + with the values of msgAuthoritativeEngineBoots and + msgAuthoritativeEngineTime set to zero. For an authenticated Request + message, a valid userName must be used in the msgUserName field. The + response to this authenticated message will be a Report message + containing the up to date values of the authoritative SNMP engine's + snmpEngineBoots and snmpEngineTime as the value of the + msgAuthoritativeEngineBoots and msgAuthoritativeEngineTime fields + respectively. It also contains the usmStatsNotInTimeWindows counter + in the varBindList of the Report PDU. The time synchronization then + happens automatically as part of the procedures in section 3.2 step + 7b. See also section 2.3. + +5. Definitions + +SNMP-USER-BASED-SM-MIB DEFINITIONS ::= BEGIN + +IMPORTS + MODULE-IDENTITY, OBJECT-TYPE, + OBJECT-IDENTITY, + snmpModules, Counter32 FROM SNMPv2-SMI + TEXTUAL-CONVENTION, TestAndIncr, + RowStatus, RowPointer, + StorageType, AutonomousType FROM SNMPv2-TC + MODULE-COMPLIANCE, OBJECT-GROUP FROM SNMPv2-CONF + SnmpAdminString, SnmpEngineID, + snmpAuthProtocols, snmpPrivProtocols FROM SNMP-FRAMEWORK-MIB; + +snmpUsmMIB MODULE-IDENTITY + LAST-UPDATED "200210160000Z" -- 16 Oct 2002, midnight + ORGANIZATION "SNMPv3 Working Group" + CONTACT-INFO "WG-email: snmpv3@lists.tislabs.com + Subscribe: majordomo@lists.tislabs.com + In msg body: subscribe snmpv3 + + Chair: Russ Mundy + Network Associates Laboratories + postal: 15204 Omega Drive, Suite 300 + Rockville, MD 20850-4601 + USA + email: mundy@tislabs.com + + + +Blumenthal & Wijnen Standards Track [Page 32] + +RFC 3414 USM for SNMPv3 December 2002 + + + phone: +1 301-947-7107 + + Co-Chair: David Harrington + Enterasys Networks + Postal: 35 Industrial Way + P. O. Box 5004 + Rochester, New Hampshire 03866-5005 + USA + EMail: dbh@enterasys.com + Phone: +1 603-337-2614 + + Co-editor Uri Blumenthal + Lucent Technologies + postal: 67 Whippany Rd. + Whippany, NJ 07981 + USA + email: uri@lucent.com + phone: +1-973-386-2163 + + Co-editor: Bert Wijnen + Lucent Technologies + postal: Schagen 33 + 3461 GL Linschoten + Netherlands + email: bwijnen@lucent.com + phone: +31-348-480-685 + " + DESCRIPTION "The management information definitions for the + SNMP User-based Security Model. + + Copyright (C) The Internet Society (2002). This + version of this MIB module is part of RFC 3414; + see the RFC itself for full legal notices. + " +-- Revision history + + REVISION "200210160000Z" -- 16 Oct 2002, midnight + DESCRIPTION "Changes in this revision: + - Updated references and contact info. + - Clarification to usmUserCloneFrom DESCRIPTION + clause + - Fixed 'command responder' into 'command generator' + in last para of DESCRIPTION clause of + usmUserTable. + This revision published as RFC3414. + " + REVISION "199901200000Z" -- 20 Jan 1999, midnight + DESCRIPTION "Clarifications, published as RFC2574" + + + +Blumenthal & Wijnen Standards Track [Page 33] + +RFC 3414 USM for SNMPv3 December 2002 + + + REVISION "199711200000Z" -- 20 Nov 1997, midnight + DESCRIPTION "Initial version, published as RFC2274" + + ::= { snmpModules 15 } + +-- Administrative assignments **************************************** + +usmMIBObjects OBJECT IDENTIFIER ::= { snmpUsmMIB 1 } +usmMIBConformance OBJECT IDENTIFIER ::= { snmpUsmMIB 2 } + +-- Identification of Authentication and Privacy Protocols ************ + +usmNoAuthProtocol OBJECT-IDENTITY + STATUS current + DESCRIPTION "No Authentication Protocol." + ::= { snmpAuthProtocols 1 } + +usmHMACMD5AuthProtocol OBJECT-IDENTITY + STATUS current + DESCRIPTION "The HMAC-MD5-96 Digest Authentication Protocol." + REFERENCE "- H. Krawczyk, M. Bellare, R. Canetti HMAC: + Keyed-Hashing for Message Authentication, + RFC2104, Feb 1997. + - Rivest, R., Message Digest Algorithm MD5, RFC1321. + " + ::= { snmpAuthProtocols 2 } + +usmHMACSHAAuthProtocol OBJECT-IDENTITY + STATUS current + DESCRIPTION "The HMAC-SHA-96 Digest Authentication Protocol." + REFERENCE "- H. Krawczyk, M. Bellare, R. Canetti, HMAC: + Keyed-Hashing for Message Authentication, + RFC2104, Feb 1997. + - Secure Hash Algorithm. NIST FIPS 180-1. + " + ::= { snmpAuthProtocols 3 } + +usmNoPrivProtocol OBJECT-IDENTITY + STATUS current + DESCRIPTION "No Privacy Protocol." + ::= { snmpPrivProtocols 1 } + +usmDESPrivProtocol OBJECT-IDENTITY + STATUS current + DESCRIPTION "The CBC-DES Symmetric Encryption Protocol." + REFERENCE "- Data Encryption Standard, National Institute of + Standards and Technology. Federal Information + Processing Standard (FIPS) Publication 46-1. + + + +Blumenthal & Wijnen Standards Track [Page 34] + +RFC 3414 USM for SNMPv3 December 2002 + + + Supersedes FIPS Publication 46, + (January, 1977; reaffirmed January, 1988). + + - Data Encryption Algorithm, American National + Standards Institute. ANSI X3.92-1981, + (December, 1980). + + - DES Modes of Operation, National Institute of + Standards and Technology. Federal Information + Processing Standard (FIPS) Publication 81, + (December, 1980). + + - Data Encryption Algorithm - Modes of Operation, + American National Standards Institute. + ANSI X3.106-1983, (May 1983). + " + ::= { snmpPrivProtocols 2 } + +-- Textual Conventions *********************************************** + +KeyChange ::= TEXTUAL-CONVENTION + STATUS current + DESCRIPTION + "Every definition of an object with this syntax must identify + a protocol P, a secret key K, and a hash algorithm H + that produces output of L octets. + + The object's value is a manager-generated, partially-random + value which, when modified, causes the value of the secret + key K, to be modified via a one-way function. + + The value of an instance of this object is the concatenation + of two components: first a 'random' component and then a + 'delta' component. + + The lengths of the random and delta components + are given by the corresponding value of the protocol P; + if P requires K to be a fixed length, the length of both the + random and delta components is that fixed length; if P + allows the length of K to be variable up to a particular + maximum length, the length of the random component is that + maximum length and the length of the delta component is any + length less than or equal to that maximum length. + For example, usmHMACMD5AuthProtocol requires K to be a fixed + length of 16 octets and L - of 16 octets. + usmHMACSHAAuthProtocol requires K to be a fixed length of + 20 octets and L - of 20 octets. Other protocols may define + other sizes, as deemed appropriate. + + + +Blumenthal & Wijnen Standards Track [Page 35] + +RFC 3414 USM for SNMPv3 December 2002 + + + When a requester wants to change the old key K to a new + key keyNew on a remote entity, the 'random' component is + obtained from either a true random generator, or from a + pseudorandom generator, and the 'delta' component is + computed as follows: + + - a temporary variable is initialized to the existing value + of K; + - if the length of the keyNew is greater than L octets, + then: + - the random component is appended to the value of the + temporary variable, and the result is input to the + the hash algorithm H to produce a digest value, and + the temporary variable is set to this digest value; + - the value of the temporary variable is XOR-ed with + the first (next) L-octets (16 octets in case of MD5) + of the keyNew to produce the first (next) L-octets + (16 octets in case of MD5) of the 'delta' component. + - the above two steps are repeated until the unused + portion of the keyNew component is L octets or less, + - the random component is appended to the value of the + temporary variable, and the result is input to the + hash algorithm H to produce a digest value; + - this digest value, truncated if necessary to be the same + length as the unused portion of the keyNew, is XOR-ed + with the unused portion of the keyNew to produce the + (final portion of the) 'delta' component. + + For example, using MD5 as the hash algorithm H: + + iterations = (lenOfDelta - 1)/16; /* integer division */ + temp = keyOld; + for (i = 0; i < iterations; i++) { + temp = MD5 (temp || random); + delta[i*16 .. (i*16)+15] = + temp XOR keyNew[i*16 .. (i*16)+15]; + } + temp = MD5 (temp || random); + delta[i*16 .. lenOfDelta-1] = + temp XOR keyNew[i*16 .. lenOfDelta-1]; + + The 'random' and 'delta' components are then concatenated as + described above, and the resulting octet string is sent to + the recipient as the new value of an instance of this object. + + At the receiver side, when an instance of this object is set + to a new value, then a new value of K is computed as follows: + + + + +Blumenthal & Wijnen Standards Track [Page 36] + +RFC 3414 USM for SNMPv3 December 2002 + + + - a temporary variable is initialized to the existing value + of K; + - if the length of the delta component is greater than L + octets, then: + - the random component is appended to the value of the + temporary variable, and the result is input to the + hash algorithm H to produce a digest value, and the + temporary variable is set to this digest value; + - the value of the temporary variable is XOR-ed with + the first (next) L-octets (16 octets in case of MD5) + of the delta component to produce the first (next) + L-octets (16 octets in case of MD5) of the new value + of K. + - the above two steps are repeated until the unused + portion of the delta component is L octets or less, + - the random component is appended to the value of the + temporary variable, and the result is input to the + hash algorithm H to produce a digest value; + - this digest value, truncated if necessary to be the same + length as the unused portion of the delta component, is + XOR-ed with the unused portion of the delta component to + produce the (final portion of the) new value of K. + + For example, using MD5 as the hash algorithm H: + + iterations = (lenOfDelta - 1)/16; /* integer division */ + temp = keyOld; + for (i = 0; i < iterations; i++) { + temp = MD5 (temp || random); + keyNew[i*16 .. (i*16)+15] = + temp XOR delta[i*16 .. (i*16)+15]; + } + temp = MD5 (temp || random); + keyNew[i*16 .. lenOfDelta-1] = + temp XOR delta[i*16 .. lenOfDelta-1]; + + The value of an object with this syntax, whenever it is + retrieved by the management protocol, is always the zero + length string. + + Note that the keyOld and keyNew are the localized keys. + + Note that it is probably wise that when an SNMP entity sends + a SetRequest to change a key, that it keeps a copy of the old + key until it has confirmed that the key change actually + succeeded. + " + SYNTAX OCTET STRING + + + +Blumenthal & Wijnen Standards Track [Page 37] + +RFC 3414 USM for SNMPv3 December 2002 + + +-- Statistics for the User-based Security Model ********************** + + +usmStats OBJECT IDENTIFIER ::= { usmMIBObjects 1 } + + +usmStatsUnsupportedSecLevels OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION "The total number of packets received by the SNMP + engine which were dropped because they requested a + securityLevel that was unknown to the SNMP engine + or otherwise unavailable. + " + ::= { usmStats 1 } + +usmStatsNotInTimeWindows OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION "The total number of packets received by the SNMP + engine which were dropped because they appeared + outside of the authoritative SNMP engine's window. + " + ::= { usmStats 2 } + +usmStatsUnknownUserNames OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION "The total number of packets received by the SNMP + engine which were dropped because they referenced a + user that was not known to the SNMP engine. + " + ::= { usmStats 3 } + +usmStatsUnknownEngineIDs OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION "The total number of packets received by the SNMP + engine which were dropped because they referenced an + snmpEngineID that was not known to the SNMP engine. + " + ::= { usmStats 4 } + +usmStatsWrongDigests OBJECT-TYPE + + + +Blumenthal & Wijnen Standards Track [Page 38] + +RFC 3414 USM for SNMPv3 December 2002 + + + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION "The total number of packets received by the SNMP + engine which were dropped because they didn't + contain the expected digest value. + " + ::= { usmStats 5 } + +usmStatsDecryptionErrors OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION "The total number of packets received by the SNMP + engine which were dropped because they could not be + decrypted. + " + ::= { usmStats 6 } + +-- The usmUser Group ************************************************ + +usmUser OBJECT IDENTIFIER ::= { usmMIBObjects 2 } + +usmUserSpinLock OBJECT-TYPE + SYNTAX TestAndIncr + MAX-ACCESS read-write + STATUS current + DESCRIPTION "An advisory lock used to allow several cooperating + Command Generator Applications to coordinate their + use of facilities to alter secrets in the + usmUserTable. + " + ::= { usmUser 1 } + +-- The table of valid users for the User-based Security Model ******** + +usmUserTable OBJECT-TYPE + SYNTAX SEQUENCE OF UsmUserEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION "The table of users configured in the SNMP engine's + Local Configuration Datastore (LCD). + + To create a new user (i.e., to instantiate a new + conceptual row in this table), it is recommended to + follow this procedure: + + 1) GET(usmUserSpinLock.0) and save in sValue. + + + +Blumenthal & Wijnen Standards Track [Page 39] + +RFC 3414 USM for SNMPv3 December 2002 + + + 2) SET(usmUserSpinLock.0=sValue, + usmUserCloneFrom=templateUser, + usmUserStatus=createAndWait) + You should use a template user to clone from + which has the proper auth/priv protocol defined. + + If the new user is to use privacy: + + 3) generate the keyChange value based on the secret + privKey of the clone-from user and the secret key + to be used for the new user. Let us call this + pkcValue. + 4) GET(usmUserSpinLock.0) and save in sValue. + 5) SET(usmUserSpinLock.0=sValue, + usmUserPrivKeyChange=pkcValue + usmUserPublic=randomValue1) + 6) GET(usmUserPulic) and check it has randomValue1. + If not, repeat steps 4-6. + + If the new user will never use privacy: + + 7) SET(usmUserPrivProtocol=usmNoPrivProtocol) + + If the new user is to use authentication: + + 8) generate the keyChange value based on the secret + authKey of the clone-from user and the secret key + to be used for the new user. Let us call this + akcValue. + 9) GET(usmUserSpinLock.0) and save in sValue. + 10) SET(usmUserSpinLock.0=sValue, + usmUserAuthKeyChange=akcValue + usmUserPublic=randomValue2) + 11) GET(usmUserPulic) and check it has randomValue2. + If not, repeat steps 9-11. + + If the new user will never use authentication: + + 12) SET(usmUserAuthProtocol=usmNoAuthProtocol) + + Finally, activate the new user: + + 13) SET(usmUserStatus=active) + + The new user should now be available and ready to be + used for SNMPv3 communication. Note however that access + to MIB data must be provided via configuration of the + SNMP-VIEW-BASED-ACM-MIB. + + + +Blumenthal & Wijnen Standards Track [Page 40] + +RFC 3414 USM for SNMPv3 December 2002 + + + The use of usmUserSpinlock is to avoid conflicts with + another SNMP command generator application which may + also be acting on the usmUserTable. + " + ::= { usmUser 2 } + +usmUserEntry OBJECT-TYPE + SYNTAX UsmUserEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION "A user configured in the SNMP engine's Local + Configuration Datastore (LCD) for the User-based + Security Model. + " + INDEX { usmUserEngineID, + usmUserName + } + ::= { usmUserTable 1 } + +UsmUserEntry ::= SEQUENCE + { + usmUserEngineID SnmpEngineID, + usmUserName SnmpAdminString, + usmUserSecurityName SnmpAdminString, + usmUserCloneFrom RowPointer, + usmUserAuthProtocol AutonomousType, + usmUserAuthKeyChange KeyChange, + usmUserOwnAuthKeyChange KeyChange, + usmUserPrivProtocol AutonomousType, + usmUserPrivKeyChange KeyChange, + usmUserOwnPrivKeyChange KeyChange, + usmUserPublic OCTET STRING, + usmUserStorageType StorageType, + usmUserStatus RowStatus + } + +usmUserEngineID OBJECT-TYPE + SYNTAX SnmpEngineID + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION "An SNMP engine's administratively-unique identifier. + + In a simple agent, this value is always that agent's + own snmpEngineID value. + + The value can also take the value of the snmpEngineID + of a remote SNMP engine with which this user can + communicate. + + + +Blumenthal & Wijnen Standards Track [Page 41] + +RFC 3414 USM for SNMPv3 December 2002 + + + " + ::= { usmUserEntry 1 } + +usmUserName OBJECT-TYPE + SYNTAX SnmpAdminString (SIZE(1..32)) + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION "A human readable string representing the name of + the user. + + This is the (User-based Security) Model dependent + security ID. + " + ::= { usmUserEntry 2 } + +usmUserSecurityName OBJECT-TYPE + SYNTAX SnmpAdminString + MAX-ACCESS read-only + STATUS current + DESCRIPTION "A human readable string representing the user in + Security Model independent format. + + The default transformation of the User-based Security + Model dependent security ID to the securityName and + vice versa is the identity function so that the + securityName is the same as the userName. + " + ::= { usmUserEntry 3 } + +usmUserCloneFrom OBJECT-TYPE + SYNTAX RowPointer + MAX-ACCESS read-create + STATUS current + DESCRIPTION "A pointer to another conceptual row in this + usmUserTable. The user in this other conceptual + row is called the clone-from user. + + When a new user is created (i.e., a new conceptual + row is instantiated in this table), the privacy and + authentication parameters of the new user must be + cloned from its clone-from user. These parameters are: + - authentication protocol (usmUserAuthProtocol) + - privacy protocol (usmUserPrivProtocol) + They will be copied regardless of what the current + value is. + + Cloning also causes the initial values of the secret + authentication key (authKey) and the secret encryption + + + +Blumenthal & Wijnen Standards Track [Page 42] + +RFC 3414 USM for SNMPv3 December 2002 + + + key (privKey) of the new user to be set to the same + values as the corresponding secrets of the clone-from + user to allow the KeyChange process to occur as + required during user creation. + + The first time an instance of this object is set by + a management operation (either at or after its + instantiation), the cloning process is invoked. + Subsequent writes are successful but invoke no + action to be taken by the receiver. + The cloning process fails with an 'inconsistentName' + error if the conceptual row representing the + clone-from user does not exist or is not in an active + state when the cloning process is invoked. + + When this object is read, the ZeroDotZero OID + is returned. + " + ::= { usmUserEntry 4 } + +usmUserAuthProtocol OBJECT-TYPE + SYNTAX AutonomousType + MAX-ACCESS read-create + STATUS current + DESCRIPTION "An indication of whether messages sent on behalf of + this user to/from the SNMP engine identified by + usmUserEngineID, can be authenticated, and if so, + the type of authentication protocol which is used. + + An instance of this object is created concurrently + with the creation of any other object instance for + the same user (i.e., as part of the processing of + the set operation which creates the first object + instance in the same conceptual row). + + If an initial set operation (i.e. at row creation time) + tries to set a value for an unknown or unsupported + protocol, then a 'wrongValue' error must be returned. + + The value will be overwritten/set when a set operation + is performed on the corresponding instance of + usmUserCloneFrom. + + Once instantiated, the value of such an instance of + this object can only be changed via a set operation to + the value of the usmNoAuthProtocol. + + If a set operation tries to change the value of an + + + +Blumenthal & Wijnen Standards Track [Page 43] + +RFC 3414 USM for SNMPv3 December 2002 + + + existing instance of this object to any value other + than usmNoAuthProtocol, then an 'inconsistentValue' + error must be returned. + + If a set operation tries to set the value to the + usmNoAuthProtocol while the usmUserPrivProtocol value + in the same row is not equal to usmNoPrivProtocol, + then an 'inconsistentValue' error must be returned. + That means that an SNMP command generator application + must first ensure that the usmUserPrivProtocol is set + to the usmNoPrivProtocol value before it can set + the usmUserAuthProtocol value to usmNoAuthProtocol. + " + DEFVAL { usmNoAuthProtocol } + ::= { usmUserEntry 5 } + +usmUserAuthKeyChange OBJECT-TYPE + SYNTAX KeyChange -- typically (SIZE (0 | 32)) for HMACMD5 + -- typically (SIZE (0 | 40)) for HMACSHA + MAX-ACCESS read-create + STATUS current + DESCRIPTION "An object, which when modified, causes the secret + authentication key used for messages sent on behalf + of this user to/from the SNMP engine identified by + usmUserEngineID, to be modified via a one-way + function. + + The associated protocol is the usmUserAuthProtocol. + The associated secret key is the user's secret + authentication key (authKey). The associated hash + algorithm is the algorithm used by the user's + usmUserAuthProtocol. + + When creating a new user, it is an 'inconsistentName' + error for a set operation to refer to this object + unless it is previously or concurrently initialized + through a set operation on the corresponding instance + of usmUserCloneFrom. + + When the value of the corresponding usmUserAuthProtocol + is usmNoAuthProtocol, then a set is successful, but + effectively is a no-op. + + When this object is read, the zero-length (empty) + string is returned. + + The recommended way to do a key change is as follows: + + + + +Blumenthal & Wijnen Standards Track [Page 44] + +RFC 3414 USM for SNMPv3 December 2002 + + + 1) GET(usmUserSpinLock.0) and save in sValue. + 2) generate the keyChange value based on the old + (existing) secret key and the new secret key, + let us call this kcValue. + + If you do the key change on behalf of another user: + + 3) SET(usmUserSpinLock.0=sValue, + usmUserAuthKeyChange=kcValue + usmUserPublic=randomValue) + + If you do the key change for yourself: + + 4) SET(usmUserSpinLock.0=sValue, + usmUserOwnAuthKeyChange=kcValue + usmUserPublic=randomValue) + + If you get a response with error-status of noError, + then the SET succeeded and the new key is active. + If you do not get a response, then you can issue a + GET(usmUserPublic) and check if the value is equal + to the randomValue you did send in the SET. If so, then + the key change succeeded and the new key is active + (probably the response got lost). If not, then the SET + request probably never reached the target and so you + can start over with the procedure above. + " + DEFVAL { ''H } -- the empty string + ::= { usmUserEntry 6 } + +usmUserOwnAuthKeyChange OBJECT-TYPE + SYNTAX KeyChange -- typically (SIZE (0 | 32)) for HMACMD5 + -- typically (SIZE (0 | 40)) for HMACSHA + MAX-ACCESS read-create + STATUS current + DESCRIPTION "Behaves exactly as usmUserAuthKeyChange, with one + notable difference: in order for the set operation + to succeed, the usmUserName of the operation + requester must match the usmUserName that + indexes the row which is targeted by this + operation. + In addition, the USM security model must be + used for this operation. + + The idea here is that access to this column can be + public, since it will only allow a user to change + his own secret authentication key (authKey). + Note that this can only be done once the row is active. + + + +Blumenthal & Wijnen Standards Track [Page 45] + +RFC 3414 USM for SNMPv3 December 2002 + + + When a set is received and the usmUserName of the + requester is not the same as the umsUserName that + indexes the row which is targeted by this operation, + then a 'noAccess' error must be returned. + + When a set is received and the security model in use + is not USM, then a 'noAccess' error must be returned. + " + DEFVAL { ''H } -- the empty string + ::= { usmUserEntry 7 } + +usmUserPrivProtocol OBJECT-TYPE + SYNTAX AutonomousType + MAX-ACCESS read-create + STATUS current + DESCRIPTION "An indication of whether messages sent on behalf of + this user to/from the SNMP engine identified by + usmUserEngineID, can be protected from disclosure, + and if so, the type of privacy protocol which is used. + + An instance of this object is created concurrently + with the creation of any other object instance for + the same user (i.e., as part of the processing of + the set operation which creates the first object + instance in the same conceptual row). + + If an initial set operation (i.e. at row creation time) + tries to set a value for an unknown or unsupported + protocol, then a 'wrongValue' error must be returned. + + The value will be overwritten/set when a set operation + is performed on the corresponding instance of + usmUserCloneFrom. + + Once instantiated, the value of such an instance of + this object can only be changed via a set operation to + the value of the usmNoPrivProtocol. + + If a set operation tries to change the value of an + existing instance of this object to any value other + than usmNoPrivProtocol, then an 'inconsistentValue' + error must be returned. + + Note that if any privacy protocol is used, then you + must also use an authentication protocol. In other + words, if usmUserPrivProtocol is set to anything else + than usmNoPrivProtocol, then the corresponding instance + of usmUserAuthProtocol cannot have a value of + + + +Blumenthal & Wijnen Standards Track [Page 46] + +RFC 3414 USM for SNMPv3 December 2002 + + + usmNoAuthProtocol. If it does, then an + 'inconsistentValue' error must be returned. + " + DEFVAL { usmNoPrivProtocol } + ::= { usmUserEntry 8 } + +usmUserPrivKeyChange OBJECT-TYPE + SYNTAX KeyChange -- typically (SIZE (0 | 32)) for DES + MAX-ACCESS read-create + STATUS current + DESCRIPTION "An object, which when modified, causes the secret + encryption key used for messages sent on behalf + of this user to/from the SNMP engine identified by + usmUserEngineID, to be modified via a one-way + function. + + The associated protocol is the usmUserPrivProtocol. + The associated secret key is the user's secret + privacy key (privKey). The associated hash + algorithm is the algorithm used by the user's + usmUserAuthProtocol. + + When creating a new user, it is an 'inconsistentName' + error for a set operation to refer to this object + unless it is previously or concurrently initialized + through a set operation on the corresponding instance + of usmUserCloneFrom. + + When the value of the corresponding usmUserPrivProtocol + is usmNoPrivProtocol, then a set is successful, but + effectively is a no-op. + + When this object is read, the zero-length (empty) + string is returned. + See the description clause of usmUserAuthKeyChange for + a recommended procedure to do a key change. + " + DEFVAL { ''H } -- the empty string + ::= { usmUserEntry 9 } + +usmUserOwnPrivKeyChange OBJECT-TYPE + SYNTAX KeyChange -- typically (SIZE (0 | 32)) for DES + MAX-ACCESS read-create + STATUS current + DESCRIPTION "Behaves exactly as usmUserPrivKeyChange, with one + notable difference: in order for the Set operation + to succeed, the usmUserName of the operation + requester must match the usmUserName that indexes + + + +Blumenthal & Wijnen Standards Track [Page 47] + +RFC 3414 USM for SNMPv3 December 2002 + + + the row which is targeted by this operation. + In addition, the USM security model must be + used for this operation. + + The idea here is that access to this column can be + public, since it will only allow a user to change + his own secret privacy key (privKey). + Note that this can only be done once the row is active. + + When a set is received and the usmUserName of the + requester is not the same as the umsUserName that + indexes the row which is targeted by this operation, + then a 'noAccess' error must be returned. + + When a set is received and the security model in use + is not USM, then a 'noAccess' error must be returned. + " + DEFVAL { ''H } -- the empty string + ::= { usmUserEntry 10 } + +usmUserPublic OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..32)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION "A publicly-readable value which can be written as part + of the procedure for changing a user's secret + authentication and/or privacy key, and later read to + determine whether the change of the secret was + effected. + " + DEFVAL { ''H } -- the empty string + ::= { usmUserEntry 11 } + +usmUserStorageType OBJECT-TYPE + SYNTAX StorageType + MAX-ACCESS read-create + STATUS current + DESCRIPTION "The storage type for this conceptual row. + + Conceptual rows having the value 'permanent' must + allow write-access at a minimum to: + + - usmUserAuthKeyChange, usmUserOwnAuthKeyChange + and usmUserPublic for a user who employs + authentication, and + - usmUserPrivKeyChange, usmUserOwnPrivKeyChange + and usmUserPublic for a user who employs + privacy. + + + +Blumenthal & Wijnen Standards Track [Page 48] + +RFC 3414 USM for SNMPv3 December 2002 + + + Note that any user who employs authentication or + privacy must allow its secret(s) to be updated and + thus cannot be 'readOnly'. + + If an initial set operation tries to set the value to + 'readOnly' for a user who employs authentication or + privacy, then an 'inconsistentValue' error must be + returned. Note that if the value has been previously + set (implicit or explicit) to any value, then the rules + as defined in the StorageType Textual Convention apply. + + It is an implementation issue to decide if a SET for + a readOnly or permanent row is accepted at all. In some + contexts this may make sense, in others it may not. If + a SET for a readOnly or permanent row is not accepted + at all, then a 'wrongValue' error must be returned. + " + DEFVAL { nonVolatile } + ::= { usmUserEntry 12 } + +usmUserStatus OBJECT-TYPE + SYNTAX RowStatus + MAX-ACCESS read-create + STATUS current + DESCRIPTION "The status of this conceptual row. + + Until instances of all corresponding columns are + appropriately configured, the value of the + corresponding instance of the usmUserStatus column + is 'notReady'. + + In particular, a newly created row for a user who + employs authentication, cannot be made active until the + corresponding usmUserCloneFrom and usmUserAuthKeyChange + have been set. + + Further, a newly created row for a user who also + employs privacy, cannot be made active until the + usmUserPrivKeyChange has been set. + + The RowStatus TC [RFC2579] requires that this + DESCRIPTION clause states under which circumstances + other objects in this row can be modified: + + The value of this object has no effect on whether + other objects in this conceptual row can be modified, + except for usmUserOwnAuthKeyChange and + usmUserOwnPrivKeyChange. For these 2 objects, the + + + +Blumenthal & Wijnen Standards Track [Page 49] + +RFC 3414 USM for SNMPv3 December 2002 + + + value of usmUserStatus MUST be active. + " + ::= { usmUserEntry 13 } + +-- Conformance Information ******************************************* + +usmMIBCompliances OBJECT IDENTIFIER ::= { usmMIBConformance 1 } +usmMIBGroups OBJECT IDENTIFIER ::= { usmMIBConformance 2 } + +-- Compliance statements + +usmMIBCompliance MODULE-COMPLIANCE + STATUS current + DESCRIPTION "The compliance statement for SNMP engines which + implement the SNMP-USER-BASED-SM-MIB. + " + + MODULE -- this module + MANDATORY-GROUPS { usmMIBBasicGroup } + + OBJECT usmUserAuthProtocol + MIN-ACCESS read-only + DESCRIPTION "Write access is not required." + + OBJECT usmUserPrivProtocol + MIN-ACCESS read-only + DESCRIPTION "Write access is not required." + + ::= { usmMIBCompliances 1 } + +-- Units of compliance +usmMIBBasicGroup OBJECT-GROUP + OBJECTS { + usmStatsUnsupportedSecLevels, + usmStatsNotInTimeWindows, + usmStatsUnknownUserNames, + usmStatsUnknownEngineIDs, + usmStatsWrongDigests, + usmStatsDecryptionErrors, + usmUserSpinLock, + usmUserSecurityName, + usmUserCloneFrom, + usmUserAuthProtocol, + usmUserAuthKeyChange, + usmUserOwnAuthKeyChange, + usmUserPrivProtocol, + usmUserPrivKeyChange, + usmUserOwnPrivKeyChange, + + + +Blumenthal & Wijnen Standards Track [Page 50] + +RFC 3414 USM for SNMPv3 December 2002 + + + usmUserPublic, + usmUserStorageType, + usmUserStatus + } + STATUS current + DESCRIPTION "A collection of objects providing for configuration + of an SNMP engine which implements the SNMP + User-based Security Model. + " + ::= { usmMIBGroups 1 } + +END + +6. HMAC-MD5-96 Authentication Protocol + + This section describes the HMAC-MD5-96 authentication protocol. This + authentication protocol is the first defined for the User-based + Security Model. It uses MD5 hash-function which is described in + [RFC1321], in HMAC mode described in [RFC2104], truncating the output + to 96 bits. + + This protocol is identified by usmHMACMD5AuthProtocol. + + Over time, other authentication protocols may be defined either as a + replacement of this protocol or in addition to this protocol. + +6.1. Mechanisms + + - In support of data integrity, a message digest algorithm is + required. A digest is calculated over an appropriate portion of an + SNMP message and included as part of the message sent to the + recipient. + + - In support of data origin authentication and data integrity, a + secret value is prepended to SNMP message prior to computing the + digest; the calculated digest is partially inserted into the SNMP + message prior to transmission, and the prepended value is not + transmitted. The secret value is shared by all SNMP engines + authorized to originate messages on behalf of the appropriate user. + +6.1.1. Digest Authentication Mechanism + + The Digest Authentication Mechanism defined in this memo provides + for: + + - verification of the integrity of a received message, i.e., the + message received is the message sent. + + + + +Blumenthal & Wijnen Standards Track [Page 51] + +RFC 3414 USM for SNMPv3 December 2002 + + + The integrity of the message is protected by computing a digest + over an appropriate portion of the message. The digest is computed + by the originator of the message, transmitted with the message, and + verified by the recipient of the message. + + - verification of the user on whose behalf the message was generated. + + A secret value known only to SNMP engines authorized to generate + messages on behalf of a user is used in HMAC mode (see [RFC2104]). + It also recommends the hash-function output used as Message + Authentication Code, to be truncated. + + This protocol uses the MD5 [RFC1321] message digest algorithm. A + 128-bit MD5 digest is calculated in a special (HMAC) way over the + designated portion of an SNMP message and the first 96 bits of this + digest is included as part of the message sent to the recipient. The + size of the digest carried in a message is 12 octets. The size of + the private authentication key (the secret) is 16 octets. For the + details see section 6.3. + +6.2. Elements of the Digest Authentication Protocol + + This section contains definitions required to realize the + authentication module defined in this section of this memo. + +6.2.1. Users + + Authentication using this authentication protocol makes use of a + defined set of userNames. For any user on whose behalf a message + must be authenticated at a particular SNMP engine, that SNMP engine + must have knowledge of that user. An SNMP engine that wishes to + communicate with another SNMP engine must also have knowledge of a + user known to that engine, including knowledge of the applicable + attributes of that user. + + A user and its attributes are defined as follows: + + <userName> + A string representing the name of the user. + <authKey> + A user's secret key to be used when calculating a digest. + It MUST be 16 octets long for MD5. + + + + + + + + + +Blumenthal & Wijnen Standards Track [Page 52] + +RFC 3414 USM for SNMPv3 December 2002 + + +6.2.2. msgAuthoritativeEngineID + + The msgAuthoritativeEngineID value contained in an authenticated + message specifies the authoritative SNMP engine for that particular + message (see the definition of SnmpEngineID in the SNMP Architecture + document [RFC3411]). + + The user's (private) authentication key is normally different at each + authoritative SNMP engine and so the snmpEngineID is used to select + the proper key for the authentication process. + +6.2.3. SNMP Messages Using this Authentication Protocol + + Messages using this authentication protocol carry a + msgAuthenticationParameters field as part of the + msgSecurityParameters. For this protocol, the + msgAuthenticationParameters field is the serialized OCTET STRING + representing the first 12 octets of the HMAC-MD5-96 output done over + the wholeMsg. + + The digest is calculated over the wholeMsg so if a message is + authenticated, that also means that all the fields in the message are + intact and have not been tampered with. + +6.2.4. Services provided by the HMAC-MD5-96 Authentication Module + + This section describes the inputs and outputs that the HMAC-MD5-96 + Authentication module expects and produces when the User-based + Security module calls the HMAC-MD5-96 Authentication module for + services. + +6.2.4.1. Services for Generating an Outgoing SNMP Message + + The HMAC-MD5-96 authentication protocol assumes that the selection of + the authKey is done by the caller and that the caller passes the + secret key to be used. + + Upon completion the authentication module returns statusInformation + and, if the message digest was correctly calculated, the wholeMsg + with the digest inserted at the proper place. The abstract service + primitive is: + + statusInformation = -- success or failure + authenticateOutgoingMsg( + IN authKey -- secret key for authentication + IN wholeMsg -- unauthenticated complete message + OUT authenticatedWholeMsg -- complete authenticated message + ) + + + +Blumenthal & Wijnen Standards Track [Page 53] + +RFC 3414 USM for SNMPv3 December 2002 + + + The abstract data elements are: + + statusInformation + An indication of whether the authentication process was successful. + If not it is an indication of the problem. + + authKey + The secret key to be used by the authentication algorithm. The + length of this key MUST be 16 octets. + + wholeMsg + The message to be authenticated. + + authenticatedWholeMsg + The authenticated message (including inserted digest) on output. + + Note, that authParameters field is filled by the authentication + module and this module and this field should be already present in + the wholeMsg before the Message Authentication Code (MAC) is + generated. + +6.2.4.2. Services for Processing an Incoming SNMP Message + + The HMAC-MD5-96 authentication protocol assumes that the selection of + the authKey is done by the caller and that the caller passes the + secret key to be used. + + Upon completion the authentication module returns statusInformation + and, if the message digest was correctly calculated, the wholeMsg as + it was processed. The abstract service primitive is: + + statusInformation = -- success or failure + authenticateIncomingMsg( + IN authKey -- secret key for authentication + IN authParameters -- as received on the wire + IN wholeMsg -- as received on the wire + OUT authenticatedWholeMsg -- complete authenticated message + ) + + The abstract data elements are: + + statusInformation + An indication of whether the authentication process was successful. + If not it is an indication of the problem. + + authKey + The secret key to be used by the authentication algorithm. The + length of this key MUST be 16 octets. + + + +Blumenthal & Wijnen Standards Track [Page 54] + +RFC 3414 USM for SNMPv3 December 2002 + + + authParameters + The authParameters from the incoming message. + + wholeMsg + The message to be authenticated on input and the authenticated + message on output. + + authenticatedWholeMsg + The whole message after the authentication check is complete. + +6.3. Elements of Procedure + + This section describes the procedures for the HMAC-MD5-96 + authentication protocol. + +6.3.1. Processing an Outgoing Message + + This section describes the procedure followed by an SNMP engine + whenever it must authenticate an outgoing message using the + usmHMACMD5AuthProtocol. + + 1) The msgAuthenticationParameters field is set to the serialization, + according to the rules in [RFC3417], of an OCTET STRING containing + 12 zero octets. + + 2) From the secret authKey, two keys K1 and K2 are derived: + + a) extend the authKey to 64 octets by appending 48 zero octets; + save it as extendedAuthKey + + b) obtain IPAD by replicating the octet 0x36 64 times; + + c) obtain K1 by XORing extendedAuthKey with IPAD; + + d) obtain OPAD by replicating the octet 0x5C 64 times; + + e) obtain K2 by XORing extendedAuthKey with OPAD. + + 3) Prepend K1 to the wholeMsg and calculate MD5 digest over it + according to [RFC1321]. + + 4) Prepend K2 to the result of the step 4 and calculate MD5 digest + over it according to [RFC1321]. Take the first 12 octets of the + final digest - this is Message Authentication Code (MAC). + + 5) Replace the msgAuthenticationParameters field with MAC obtained in + the step 4. + + + + +Blumenthal & Wijnen Standards Track [Page 55] + +RFC 3414 USM for SNMPv3 December 2002 + + + 6) The authenticatedWholeMsg is then returned to the caller together + with statusInformation indicating success. + +6.3.2. Processing an Incoming Message + + This section describes the procedure followed by an SNMP engine + whenever it must authenticate an incoming message using the + usmHMACMD5AuthProtocol. + + 1) If the digest received in the msgAuthenticationParameters field is + not 12 octets long, then an failure and an errorIndication + (authenticationError) is returned to the calling module. + + 2) The MAC received in the msgAuthenticationParameters field is + saved. + + 3) The digest in the msgAuthenticationParameters field is replaced by + the 12 zero octets. + + 4) From the secret authKey, two keys K1 and K2 are derived: + + a) extend the authKey to 64 octets by appending 48 zero octets; + save it as extendedAuthKey + + b) obtain IPAD by replicating the octet 0x36 64 times; + + c) obtain K1 by XORing extendedAuthKey with IPAD; + + d) obtain OPAD by replicating the octet 0x5C 64 times; + + e) obtain K2 by XORing extendedAuthKey with OPAD. + + 5) The MAC is calculated over the wholeMsg: + + a) prepend K1 to the wholeMsg and calculate the MD5 digest over + it; + + b) prepend K2 to the result of step 5.a and calculate the MD5 + digest over it; + + c) first 12 octets of the result of step 5.b is the MAC. + + The msgAuthenticationParameters field is replaced with the MAC + value that was saved in step 2. + + + + + + + +Blumenthal & Wijnen Standards Track [Page 56] + +RFC 3414 USM for SNMPv3 December 2002 + + + 6) Then the newly calculated MAC is compared with the MAC saved in + step 2. If they do not match, then an failure and an + errorIndication (authenticationFailure) is returned to the calling + module. + + 7) The authenticatedWholeMsg and statusInformation indicating success + are then returned to the caller. + +7. HMAC-SHA-96 Authentication Protocol + + This section describes the HMAC-SHA-96 authentication protocol. This + protocol uses the SHA hash-function which is described in [SHA-NIST], + in HMAC mode described in [RFC2104], truncating the output to 96 + bits. + + This protocol is identified by usmHMACSHAAuthProtocol. + + Over time, other authentication protocols may be defined either as a + replacement of this protocol or in addition to this protocol. + +7.1. Mechanisms + + - In support of data integrity, a message digest algorithm is + required. A digest is calculated over an appropriate portion of an + SNMP message and included as part of the message sent to the + recipient. + + - In support of data origin authentication and data integrity, a + secret value is prepended to the SNMP message prior to computing + the digest; the calculated digest is then partially inserted into + the message prior to transmission. The prepended secret is not + transmitted. The secret value is shared by all SNMP engines + authorized to originate messages on behalf of the appropriate user. + +7.1.1. Digest Authentication Mechanism + + The Digest Authentication Mechanism defined in this memo provides + for: + + - verification of the integrity of a received message, i.e., the + message received is the message sent. + + The integrity of the message is protected by computing a digest + over an appropriate portion of the message. The digest is computed + by the originator of the message, transmitted with the message, and + verified by the recipient of the message. + + + + + +Blumenthal & Wijnen Standards Track [Page 57] + +RFC 3414 USM for SNMPv3 December 2002 + + + - verification of the user on whose behalf the message was generated. + + A secret value known only to SNMP engines authorized to generate + messages on behalf of a user is used in HMAC mode (see [RFC2104]). + It also recommends the hash-function output used as Message + Authentication Code, to be truncated. + + This mechanism uses the SHA [SHA-NIST] message digest algorithm. A + 160-bit SHA digest is calculated in a special (HMAC) way over the + designated portion of an SNMP message and the first 96 bits of this + digest is included as part of the message sent to the recipient. The + size of the digest carried in a message is 12 octets. The size of + the private authentication key (the secret) is 20 octets. For the + details see section 7.3. + +7.2. Elements of the HMAC-SHA-96 Authentication Protocol + + This section contains definitions required to realize the + authentication module defined in this section of this memo. + +7.2.1. Users + + Authentication using this authentication protocol makes use of a + defined set of userNames. For any user on whose behalf a message + must be authenticated at a particular SNMP engine, that SNMP engine + must have knowledge of that user. An SNMP engine that wishes to + communicate with another SNMP engine must also have knowledge of a + user known to that engine, including knowledge of the applicable + attributes of that user. + + A user and its attributes are defined as follows: + + <userName> + A string representing the name of the user. + <authKey> + A user's secret key to be used when calculating a digest. + It MUST be 20 octets long for SHA. + +7.2.2. msgAuthoritativeEngineID + + The msgAuthoritativeEngineID value contained in an authenticated + message specifies the authoritative SNMP engine for that particular + message (see the definition of SnmpEngineID in the SNMP Architecture + document [RFC3411]). + + The user's (private) authentication key is normally different at each + authoritative SNMP engine and so the snmpEngineID is used to select + the proper key for the authentication process. + + + +Blumenthal & Wijnen Standards Track [Page 58] + +RFC 3414 USM for SNMPv3 December 2002 + + +7.2.3. SNMP Messages Using this Authentication Protocol + + Messages using this authentication protocol carry a + msgAuthenticationParameters field as part of the + msgSecurityParameters. For this protocol, the + msgAuthenticationParameters field is the serialized OCTET STRING + representing the first 12 octets of HMAC-SHA-96 output done over the + wholeMsg. + + The digest is calculated over the wholeMsg so if a message is + authenticated, that also means that all the fields in the message are + intact and have not been tampered with. + +7.2.4. Services Provided by the HMAC-SHA-96 Authentication Module + + This section describes the inputs and outputs that the HMAC-SHA-96 + Authentication module expects and produces when the User-based + Security module calls the HMAC-SHA-96 Authentication module for + services. + +7.2.4.1. Services for Generating an Outgoing SNMP Message + + HMAC-SHA-96 authentication protocol assumes that the selection of the + authKey is done by the caller and that the caller passes the secret + key to be used. + + Upon completion the authentication module returns statusInformation + and, if the message digest was correctly calculated, the wholeMsg + with the digest inserted at the proper place. The abstract service + primitive is: + + statusInformation = -- success or failure + authenticateOutgoingMsg( + IN authKey -- secret key for authentication + IN wholeMsg -- unauthenticated complete message + OUT authenticatedWholeMsg -- complete authenticated message + ) + + The abstract data elements are: + + statusInformation + An indication of whether the authentication process was successful. + If not it is an indication of the problem. + + authKey + The secret key to be used by the authentication algorithm. The + length of this key MUST be 20 octets. + + + + +Blumenthal & Wijnen Standards Track [Page 59] + +RFC 3414 USM for SNMPv3 December 2002 + + + wholeMsg + The message to be authenticated. + + authenticatedWholeMsg + The authenticated message (including inserted digest) on output. + + Note, that authParameters field is filled by the authentication + module and this field should be already present in the wholeMsg + before the Message Authentication Code (MAC) is generated. + +7.2.4.2. Services for Processing an Incoming SNMP Message + + HMAC-SHA-96 authentication protocol assumes that the selection of the + authKey is done by the caller and that the caller passes the secret + key to be used. + + Upon completion the authentication module returns statusInformation + and, if the message digest was correctly calculated, the wholeMsg as + it was processed. The abstract service primitive is: + + statusInformation = -- success or failure + authenticateIncomingMsg( + IN authKey -- secret key for authentication + IN authParameters -- as received on the wire + IN wholeMsg -- as received on the wire + OUT authenticatedWholeMsg -- complete authenticated message + ) + + The abstract data elements are: + + statusInformation + An indication of whether the authentication process was successful. + If not it is an indication of the problem. + + authKey + The secret key to be used by the authentication algorithm. The + length of this key MUST be 20 octets. + + authParameters + The authParameters from the incoming message. + + wholeMsg + The message to be authenticated on input and the authenticated + message on output. + + authenticatedWholeMsg + The whole message after the authentication check is complete. + + + + +Blumenthal & Wijnen Standards Track [Page 60] + +RFC 3414 USM for SNMPv3 December 2002 + + +7.3. Elements of Procedure + + This section describes the procedures for the HMAC-SHA-96 + authentication protocol. + +7.3.1. Processing an Outgoing Message + + This section describes the procedure followed by an SNMP engine + whenever it must authenticate an outgoing message using the + usmHMACSHAAuthProtocol. + + 1) The msgAuthenticationParameters field is set to the serialization, + according to the rules in [RFC3417], of an OCTET STRING containing + 12 zero octets. + + 2) From the secret authKey, two keys K1 and K2 are derived: + + a) extend the authKey to 64 octets by appending 44 zero octets; + save it as extendedAuthKey + + b) obtain IPAD by replicating the octet 0x36 64 times; + + c) obtain K1 by XORing extendedAuthKey with IPAD; + + d) obtain OPAD by replicating the octet 0x5C 64 times; + + e) obtain K2 by XORing extendedAuthKey with OPAD. + + 3) Prepend K1 to the wholeMsg and calculate the SHA digest over it + according to [SHA-NIST]. + + 4) Prepend K2 to the result of the step 4 and calculate SHA digest + over it according to [SHA-NIST]. Take the first 12 octets of the + final digest - this is Message Authentication Code (MAC). + + 5) Replace the msgAuthenticationParameters field with MAC obtained in + the step 5. + + 6) The authenticatedWholeMsg is then returned to the caller together + with statusInformation indicating success. + +7.3.2. Processing an Incoming Message + + This section describes the procedure followed by an SNMP engine + whenever it must authenticate an incoming message using the + usmHMACSHAAuthProtocol. + + + + + +Blumenthal & Wijnen Standards Track [Page 61] + +RFC 3414 USM for SNMPv3 December 2002 + + + 1) If the digest received in the msgAuthenticationParameters field is + not 12 octets long, then an failure and an errorIndication + (authenticationError) is returned to the calling module. + + 2) The MAC received in the msgAuthenticationParameters field is + saved. + + 3) The digest in the msgAuthenticationParameters field is replaced by + the 12 zero octets. + + 4) From the secret authKey, two keys K1 and K2 are derived: + + a) extend the authKey to 64 octets by appending 44 zero octets; + save it as extendedAuthKey + + b) obtain IPAD by replicating the octet 0x36 64 times; + + c) obtain K1 by XORing extendedAuthKey with IPAD; + + d) obtain OPAD by replicating the octet 0x5C 64 times; + + e) obtain K2 by XORing extendedAuthKey with OPAD. + + 5) The MAC is calculated over the wholeMsg: + + a) prepend K1 to the wholeMsg and calculate the SHA digest over + it; + + b) prepend K2 to the result of step 5.a and calculate the SHA + digest over it; + + c) first 12 octets of the result of step 5.b is the MAC. + + The msgAuthenticationParameters field is replaced with the MAC + value that was saved in step 2. + + 6) The the newly calculated MAC is compared with the MAC saved in + step 2. If they do not match, then a failure and an + errorIndication (authenticationFailure) are returned to the + calling module. + + 7) The authenticatedWholeMsg and statusInformation indicating success + are then returned to the caller. + + + + + + + + +Blumenthal & Wijnen Standards Track [Page 62] + +RFC 3414 USM for SNMPv3 December 2002 + + +8. CBC-DES Symmetric Encryption Protocol + + This section describes the CBC-DES Symmetric Encryption Protocol. + This protocol is the first privacy protocol defined for the + User-based Security Model. + + This protocol is identified by usmDESPrivProtocol. + + Over time, other privacy protocols may be defined either as a + replacement of this protocol or in addition to this protocol. + +8.1. Mechanisms + + - In support of data confidentiality, an encryption algorithm is + required. An appropriate portion of the message is encrypted prior + to being transmitted. The User-based Security Model specifies that + the scopedPDU is the portion of the message that needs to be + encrypted. + + - A secret value in combination with a timeliness value is used to + create the en/decryption key and the initialization vector. The + secret value is shared by all SNMP engines authorized to originate + messages on behalf of the appropriate user. + +8.1.1. Symmetric Encryption Protocol + + The Symmetric Encryption Protocol defined in this memo provides + support for data confidentiality. The designated portion of an SNMP + message is encrypted and included as part of the message sent to the + recipient. + + Two organizations have published specifications defining the DES: + the National Institute of Standards and Technology (NIST) [DES-NIST] + and the American National Standards Institute [DES-ANSI]. There is a + companion Modes of Operation specification for each definition + ([DESO-NIST] and [DESO-ANSI], respectively). + + The NIST has published three additional documents that implementors + may find useful. + + - There is a document with guidelines for implementing and using the + DES, including functional specifications for the DES and its modes + of operation [DESG-NIST]. + + - There is a specification of a validation test suite for the DES + [DEST-NIST]. The suite is designed to test all aspects of the DES + and is useful for pinpointing specific problems. + + + + +Blumenthal & Wijnen Standards Track [Page 63] + +RFC 3414 USM for SNMPv3 December 2002 + + + - There is a specification of a maintenance test for the DES [DESM- + NIST]. The test utilizes a minimal amount of data and processing + to test all components of the DES. It provides a simple yes-or-no + indication of correct operation and is useful to run as part of an + initialization step, e.g., when a computer re-boots. + +8.1.1.1. DES key and Initialization Vector + + The first 8 octets of the 16-octet secret (private privacy key) are + used as a DES key. Since DES uses only 56 bits, the Least + Significant Bit in each octet is disregarded. + + The Initialization Vector for encryption is obtained using the + following procedure. + + The last 8 octets of the 16-octet secret (private privacy key) are + used as pre-IV. + + In order to ensure that the IV for two different packets encrypted by + the same key, are not the same (i.e., the IV does not repeat) we need + to "salt" the pre-IV with something unique per packet. An 8-octet + string is used as the "salt". The concatenation of the generating + SNMP engine's 32-bit snmpEngineBoots and a local 32-bit integer, that + the encryption engine maintains, is input to the "salt". The 32-bit + integer is initialized to an arbitrary value at boot time. + + The 32-bit snmpEngineBoots is converted to the first 4 octets (Most + Significant Byte first) of our "salt". The 32-bit integer is then + converted to the last 4 octet (Most Significant Byte first) of our + "salt". The resulting "salt" is then XOR-ed with the pre-IV to + obtain the IV. The 8-octet "salt" is then put into the + privParameters field encoded as an OCTET STRING. The "salt" integer + is then modified. We recommend that it be incremented by one and + wrap when it reaches the maximum value. + + How exactly the value of the "salt" (and thus of the IV) varies, is + an implementation issue, as long as the measures are taken to avoid + producing a duplicate IV. + + The "salt" must be placed in the privParameters field to enable the + receiving entity to compute the correct IV and to decrypt the + message. + + + + + + + + + +Blumenthal & Wijnen Standards Track [Page 64] + +RFC 3414 USM for SNMPv3 December 2002 + + +8.1.1.2. Data Encryption + + The data to be encrypted is treated as sequence of octets. Its + length should be an integral multiple of 8 - and if it is not, the + data is padded at the end as necessary. The actual pad value is + irrelevant. + + The data is encrypted in Cipher Block Chaining mode. + + The plaintext is divided into 64-bit blocks. + + The plaintext for each block is XOR-ed with the ciphertext of the + previous block, the result is encrypted and the output of the + encryption is the ciphertext for the block. This procedure is + repeated until there are no more plaintext blocks. + + For the very first block, the Initialization Vector is used instead + of the ciphertext of the previous block. + +8.1.1.3. Data Decryption + + Before decryption, the encrypted data length is verified. If the + length of the OCTET STRING to be decrypted is not an integral + multiple of 8 octets, the decryption process is halted and an + appropriate exception noted. When decrypting, the padding is + ignored. + + The first ciphertext block is decrypted, the decryption output is + XOR-ed with the Initialization Vector, and the result is the first + plaintext block. + + For each subsequent block, the ciphertext block is decrypted, the + decryption output is XOR-ed with the previous ciphertext block and + the result is the plaintext block. + +8.2. Elements of the DES Privacy Protocol + + This section contains definitions required to realize the privacy + module defined by this memo. + +8.2.1. Users + + Data en/decryption using this Symmetric Encryption Protocol makes use + of a defined set of userNames. For any user on whose behalf a + message must be en/decrypted at a particular SNMP engine, that SNMP + engine must have knowledge of that user. An SNMP engine that wishes + + + + + +Blumenthal & Wijnen Standards Track [Page 65] + +RFC 3414 USM for SNMPv3 December 2002 + + + to communicate with another SNMP engine must also have knowledge of a + user known to that SNMP engine, including knowledge of the applicable + attributes of that user. + + A user and its attributes are defined as follows: + + <userName> + An octet string representing the name of the user. + + <privKey> + A user's secret key to be used as input for the DES key and IV. + The length of this key MUST be 16 octets. + +8.2.2. msgAuthoritativeEngineID + + The msgAuthoritativeEngineID value contained in an authenticated + message specifies the authoritative SNMP engine for that particular + message (see the definition of SnmpEngineID in the SNMP Architecture + document [RFC3411]). + + The user's (private) privacy key is normally different at each + authoritative SNMP engine and so the snmpEngineID is used to select + the proper key for the en/decryption process. + +8.2.3. SNMP Messages Using this Privacy Protocol + + Messages using this privacy protocol carry a msgPrivacyParameters + field as part of the msgSecurityParameters. For this protocol, the + msgPrivacyParameters field is the serialized OCTET STRING + representing the "salt" that was used to create the IV. + +8.2.4. Services Provided by the DES Privacy Module + + This section describes the inputs and outputs that the DES Privacy + module expects and produces when the User-based Security module + invokes the DES Privacy module for services. + +8.2.4.1. Services for Encrypting Outgoing Data + + This DES privacy protocol assumes that the selection of the privKey + is done by the caller and that the caller passes the secret key to be + used. + + Upon completion the privacy module returns statusInformation and, if + the encryption process was successful, the encryptedPDU and the + msgPrivacyParameters encoded as an OCTET STRING. The abstract + service primitive is: + + + + +Blumenthal & Wijnen Standards Track [Page 66] + +RFC 3414 USM for SNMPv3 December 2002 + + + statusInformation = -- success of failure + encryptData( + IN encryptKey -- secret key for encryption + IN dataToEncrypt -- data to encrypt (scopedPDU) + OUT encryptedData -- encrypted data (encryptedPDU) + OUT privParameters -- filled in by service provider + ) + + The abstract data elements are: + + statusInformation + An indication of the success or failure of the encryption process. + In case of failure, it is an indication of the error. + + encryptKey + The secret key to be used by the encryption algorithm. The length + of this key MUST be 16 octets. + + dataToEncrypt + The data that must be encrypted. + + encryptedData + The encrypted data upon successful completion. + + privParameters + The privParameters encoded as an OCTET STRING. + +8.2.4.2. Services for Decrypting Incoming Data + + This DES privacy protocol assumes that the selection of the privKey + is done by the caller and that the caller passes the secret key to be + used. + + Upon completion the privacy module returns statusInformation and, if + the decryption process was successful, the scopedPDU in plain text. + The abstract service primitive is: + + statusInformation = + decryptData( + IN decryptKey -- secret key for decryption + IN privParameters -- as received on the wire + IN encryptedData -- encrypted data (encryptedPDU) + OUT decryptedData -- decrypted data (scopedPDU) + ) + + + + + + + +Blumenthal & Wijnen Standards Track [Page 67] + +RFC 3414 USM for SNMPv3 December 2002 + + + The abstract data elements are: + + statusInformation + An indication whether the data was successfully decrypted and if + not an indication of the error. + + decryptKey + The secret key to be used by the decryption algorithm. The length + of this key MUST be 16 octets. + + privParameters + The "salt" to be used to calculate the IV. + + encryptedData + The data to be decrypted. + + decryptedData + The decrypted data. + +8.3. Elements of Procedure. + + This section describes the procedures for the DES privacy protocol. + +8.3.1. Processing an Outgoing Message + + This section describes the procedure followed by an SNMP engine + whenever it must encrypt part of an outgoing message using the + usmDESPrivProtocol. + + 1) The secret cryptKey is used to construct the DES encryption key, + the "salt" and the DES pre-IV (from which the IV is computed as + described in section 8.1.1.1). + + 2) The privParameters field is set to the serialization according to + the rules in [RFC3417] of an OCTET STRING representing the "salt" + string. + + 3) The scopedPDU is encrypted (as described in section 8.1.1.2) + and the encrypted data is serialized according to the rules in + [RFC3417] as an OCTET STRING. + + 4) The serialized OCTET STRING representing the encrypted scopedPDU + together with the privParameters and statusInformation indicating + success is returned to the calling module. + + + + + + + +Blumenthal & Wijnen Standards Track [Page 68] + +RFC 3414 USM for SNMPv3 December 2002 + + +8.3.2. Processing an Incoming Message + + This section describes the procedure followed by an SNMP engine + whenever it must decrypt part of an incoming message using the + usmDESPrivProtocol. + + 1) If the privParameters field is not an 8-octet OCTET STRING, then + an error indication (decryptionError) is returned to the calling + module. + + 2) The "salt" is extracted from the privParameters field. + + 3) The secret cryptKey and the "salt" are then used to construct the + DES decryption key and pre-IV (from which the IV is computed as + described in section 8.1.1.1). + + 4) The encryptedPDU is then decrypted (as described in section + 8.1.1.3). + + 5) If the encryptedPDU cannot be decrypted, then an error indication + (decryptionError) is returned to the calling module. + + 6) The decrypted scopedPDU and statusInformation indicating success + are returned to the calling module. + +9. Intellectual Property + + The IETF takes no position regarding the validity or scope of any + intellectual property or other rights that might be claimed to + pertain to the implementation or use of the technology described in + this document or the extent to which any license under such rights + might or might not be available; neither does it represent that it + has made any effort to identify any such rights. Information on the + IETF's procedures with respect to rights in standards-track and + standards-related documentation can be found in BCP-11. Copies of + claims of rights made available for publication and any assurances of + licenses to be made available, or the result of an attempt made to + obtain a general license or permission for the use of such + proprietary rights by 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 + this standard. Please address the information to the IETF Executive + Director. + + + + + +Blumenthal & Wijnen Standards Track [Page 69] + +RFC 3414 USM for SNMPv3 December 2002 + + +10. Acknowledgements + + This document is the result of the efforts of the SNMPv3 Working + Group. Some special thanks are in order to the following SNMPv3 WG + members: + + Harald Tveit Alvestrand (Maxware) + Dave Battle (SNMP Research, Inc.) + Alan Beard (Disney Worldwide Services) + Paul Berrevoets (SWI Systemware/Halcyon Inc.) + Martin Bjorklund (Ericsson) + Uri Blumenthal (IBM T.J. Watson Research Center) + Jeff Case (SNMP Research, Inc.) + John Curran (BBN) + Mike Daniele (Compaq Computer Corporation)) + T. Max Devlin (Eltrax Systems) + John Flick (Hewlett Packard) + Rob Frye (MCI) + Wes Hardaker (U.C.Davis, Information Technology - D.C.A.S.) + David Harrington (Cabletron Systems Inc.) + Lauren Heintz (BMC Software, Inc.) + N.C. Hien (IBM T.J. Watson Research Center) + Michael Kirkham (InterWorking Labs, Inc.) + Dave Levi (SNMP Research, Inc.) + Louis A Mamakos (UUNET Technologies Inc.) + Joe Marzot (Nortel Networks) + Paul Meyer (Secure Computing Corporation) + Keith McCloghrie (Cisco Systems) + Bob Moore (IBM) + Russ Mundy (TIS Labs at Network Associates) + Bob Natale (ACE*COMM Corporation) + Mike O'Dell (UUNET Technologies Inc.) + Dave Perkins (DeskTalk) + Peter Polkinghorne (Brunel University) + Randy Presuhn (BMC Software, Inc.) + David Reeder (TIS Labs at Network Associates) + David Reid (SNMP Research, Inc.) + Aleksey Romanov (Quality Quorum) + Shawn Routhier (Epilogue) + Juergen Schoenwaelder (TU Braunschweig) + Bob Stewart (Cisco Systems) + Mike Thatcher (Independent Consultant) + Bert Wijnen (IBM T.J. Watson Research Center) + + + + + + + + +Blumenthal & Wijnen Standards Track [Page 70] + +RFC 3414 USM for SNMPv3 December 2002 + + + The document is based on recommendations of the IETF Security and + Administrative Framework Evolution for SNMP Advisory Team. Members + of that Advisory Team were: + + David Harrington (Cabletron Systems Inc.) + Jeff Johnson (Cisco Systems) + David Levi (SNMP Research Inc.) + John Linn (Openvision) + Russ Mundy (Trusted Information Systems) chair + Shawn Routhier (Epilogue) + Glenn Waters (Nortel) + Bert Wijnen (IBM T. J. Watson Research Center) + + As recommended by the Advisory Team and the SNMPv3 Working Group + Charter, the design incorporates as much as practical from previous + RFCs and drafts. As a result, special thanks are due to the authors + of previous designs known as SNMPv2u and SNMPv2*: + + Jeff Case (SNMP Research, Inc.) + David Harrington (Cabletron Systems Inc.) + David Levi (SNMP Research, Inc.) + Keith McCloghrie (Cisco Systems) + Brian O'Keefe (Hewlett Packard) + Marshall T. Rose (Dover Beach Consulting) + Jon Saperia (BGS Systems Inc.) + Steve Waldbusser (International Network Services) + Glenn W. Waters (Bell-Northern Research Ltd.) + +11. Security Considerations + +11.1. Recommended Practices + + This section describes practices that contribute to the secure, + effective operation of the mechanisms defined in this memo. + + - An SNMP engine must discard SNMP Response messages that do not + correspond to any currently outstanding Request message. It is the + responsibility of the Message Processing module to take care of + this. For example it can use a msgID for that. + + An SNMP Command Generator Application must discard any Response + Class PDU for which there is no currently outstanding Confirmed + Class PDU; for example for SNMPv2 [RFC3416] PDUs, the request-id + component in the PDU can be used to correlate Responses to + outstanding Requests. + + + + + + +Blumenthal & Wijnen Standards Track [Page 71] + +RFC 3414 USM for SNMPv3 December 2002 + + + Although it would be typical for an SNMP engine and an SNMP Command + Generator Application to do this as a matter of course, when using + these security protocols it is significant due to the possibility + of message duplication (malicious or otherwise). + + - If an SNMP engine uses a msgID for correlating Response messages to + outstanding Request messages, then it MUST use different msgIDs in + all such Request messages that it sends out during a Time Window + (150 seconds) period. + + A Command Generator or Notification Originator Application MUST use + different request-ids in all Request PDUs that it sends out during + a TimeWindow (150 seconds) period. + + This must be done to protect against the possibility of message + duplication (malicious or otherwise). + + For example, starting operations with a msgID and/or request-id + value of zero is not a good idea. Initializing them with an + unpredictable number (so they do not start out the same after each + reboot) and then incrementing by one would be acceptable. + + - An SNMP engine should perform time synchronization using + authenticated messages in order to protect against the possibility + of message duplication (malicious or otherwise). + + - When sending state altering messages to a managed authoritative + SNMP engine, a Command Generator Application should delay sending + successive messages to that managed SNMP engine until a positive + acknowledgement is received for the previous message or until the + previous message expires. + + No message ordering is imposed by the SNMP. Messages may be + received in any order relative to their time of generation and each + will be processed in the ordered received. Note that when an + authenticated message is sent to a managed SNMP engine, it will be + valid for a period of time of approximately 150 seconds under + normal circumstances, and is subject to replay during this period. + Indeed, an SNMP engine and SNMP Command Generator Applications must + cope with the loss and re-ordering of messages resulting from + anomalies in the network as a matter of course. + + However, a managed object, snmpSetSerialNo [RFC3418], is + specifically defined for use with SNMP Set operations in order to + provide a mechanism to ensure that the processing of SNMP messages + occurs in a specific order. + + + + + +Blumenthal & Wijnen Standards Track [Page 72] + +RFC 3414 USM for SNMPv3 December 2002 + + + - The frequency with which the secrets of a User-based Security Model + user should be changed is indirectly related to the frequency of + their use. + + Protecting the secrets from disclosure is critical to the overall + security of the protocols. Frequent use of a secret provides a + continued source of data that may be useful to a cryptanalyst in + exploiting known or perceived weaknesses in an algorithm. Frequent + changes to the secret avoid this vulnerability. + + Changing a secret after each use is generally regarded as the most + secure practice, but a significant amount of overhead may be + associated with that approach. + + Note, too, in a local environment the threat of disclosure may be + less significant, and as such the changing of secrets may be less + frequent. However, when public data networks are used as the + communication paths, more caution is prudent. + +11.2 Defining Users + + The mechanisms defined in this document employ the notion of users on + whose behalf messages are sent. How "users" are defined is subject + to the security policy of the network administration. For example, + users could be individuals (e.g., "joe" or "jane"), or a particular + role (e.g., "operator" or "administrator"), or a combination (e.g., + "joe-operator", "jane-operator" or "joe-admin"). Furthermore, a user + may be a logical entity, such as an SNMP Application or a set of SNMP + Applications, acting on behalf of an individual or role, or set of + individuals, or set of roles, including combinations. + + Appendix A describes an algorithm for mapping a user "password" to a + 16/20 octet value for use as either a user's authentication key or + privacy key (or both). Note however, that using the same password + (and therefore the same key) for both authentication and privacy is + very poor security practice and should be strongly discouraged. + Passwords are often generated, remembered, and input by a human. + Human-generated passwords may be less than the 16/20 octets required + by the authentication and privacy protocols, and brute force attacks + can be quite easy on a relatively short ASCII character set. + Therefore, the algorithm is Appendix A performs a transformation on + the password. If the Appendix A algorithm is used, SNMP + implementations (and SNMP configuration applications) must ensure + that passwords are at least 8 characters in length. Please note that + longer passwords with repetitive strings may result in exactly the + same key. For example, a password 'bertbert' will result in exactly + the same key as password 'bertbertbert'. + + + + +Blumenthal & Wijnen Standards Track [Page 73] + +RFC 3414 USM for SNMPv3 December 2002 + + + Because the Appendix A algorithm uses such passwords (nearly) + directly, it is very important that they not be easily guessed. It + is suggested that they be composed of mixed-case alphanumeric and + punctuation characters that don't form words or phrases that might be + found in a dictionary. Longer passwords improve the security of the + system. Users may wish to input multiword phrases to make their + password string longer while ensuring that it is memorable. + + Since it is infeasible for human users to maintain different + passwords for every SNMP engine, but security requirements strongly + discourage having the same key for more than one SNMP engine, the + User-based Security Model employs a compromise proposed in + [Localized-key]. It derives the user keys for the SNMP engines from + user's password in such a way that it is practically impossible to + either determine the user's password, or user's key for another SNMP + engine from any combination of user's keys on SNMP engines. + + Note however, that if user's password is disclosed, then key + localization will not help and network security may be compromised in + this case. Therefore a user's password or non-localized key MUST NOT + be stored on a managed device/node. Instead the localized key SHALL + be stored (if at all), so that, in case a device does get + compromised, no other managed or managing devices get compromised. + +11.3. Conformance + + To be termed a "Secure SNMP implementation" based on the User-based + Security Model, an SNMP implementation MUST: + + - implement one or more Authentication Protocol(s). The HMAC-MD5-96 + and HMAC-SHA-96 Authentication Protocols defined in this memo are + examples of such protocols. + + - to the maximum extent possible, prohibit access to the secret(s) of + each user about which it maintains information in a Local + Configuration Datastore (LCD) under all circumstances except as + required to generate and/or validate SNMP messages with respect to + that user. + + - implement the key-localization mechanism. + + - implement the SNMP-USER-BASED-SM-MIB. + + In addition, an authoritative SNMP engine SHOULD provide initial + configuration in accordance with Appendix A.1. + + Implementation of a Privacy Protocol (the DES Symmetric Encryption + Protocol defined in this memo is one such protocol) is optional. + + + +Blumenthal & Wijnen Standards Track [Page 74] + +RFC 3414 USM for SNMPv3 December 2002 + + +11.4. Use of Reports + + The use of unsecure reports (i.e., sending them with a securityLevel + of noAuthNoPriv) potentially exposes a non-authoritative SNMP engine + to some form of attacks. Some people consider these denial of + service attacks, others don't. An installation should evaluate the + risk involved before deploying unsecure Report PDUs. + +11.5 Access to the SNMP-USER-BASED-SM-MIB + + The objects in this MIB may be considered sensitive in many + environments. Specifically the objects in the usmUserTable contain + information about users and their authentication and privacy + protocols. It is important to closely control (both read and write) + access to these MIB objects by using appropriately configured Access + Control models (for example the View-based Access Control Model as + specified in [RFC3415]). + +12. References + +12.1 Normative References + + [RFC1321] Rivest, R., "Message Digest Algorithm MD5", RFC 1321, + April 1992. + + [RFC2104] Krawczyk, H., Bellare, M. and R. Canetti, "HMAC: + Keyed-Hashing for Message Authentication", RFC 2104, + February 1997. + + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", BCP 14, RFC 2119, March 1997. + + [RFC2578] McCloghrie, K., Perkins, D., Schoenwaelder, J., Case, + J., Rose, M. and S. Waldbusser, "Structure of + Management Information Version 2 (SMIv2)", STD 58, + RFC 2578, April 1999. + + [RFC2579] McCloghrie, K., Perkins, D., Schoenwaelder, J., Case, + J., Rose, M. and S. Waldbusser, "Textual Conventions + for SMIv2", STD 58, RFC 2579, April 1999. + + [RFC2580] McCloghrie, K., Perkins, D., Schoenwaelder, J., Case, + J., Rose, M. and S. Waldbusser, "Conformance + Statements for SMIv2", STD 58, RFC 2580, April 1999. + + + + + + + +Blumenthal & Wijnen Standards Track [Page 75] + +RFC 3414 USM for SNMPv3 December 2002 + + + [RFC3411] Harrington, D., Presuhn, R. and B. Wijnen, "An + Architecture for Describing Simple Network Management + Protocol (SNMP) Management Frameworks", STD 62, RFC + 3411, December 2002. + + [RFC3412] Case, J., Harrington, D., Presuhn, R. and B. Wijnen, + "Message Processing and Dispatching for the Simple + Network Management Protocol (SNMP)", STD 62, RFC + 3412, December 2002. + + [RFC3415] Wijnen, B., Presuhn, R. and K. McCloghrie, "View- + based Access Control Model (VACM) for the Simple + Network Management Protocol (SNMP)", STD 62, RFC + 3415, December 2002. + + [RFC3416] Presuhn, R., Case, J., McCloghrie, K., Rose, M. and + S. Waldbusser, "Version 2 of the Protocol Operations + for the Simple Network Management Protocol (SNMP)", + STD 62, RFC 3416, December 2002. + + [RFC3417] Presuhn, R., Case, J., McCloghrie, K., Rose, M. and + S. Waldbusser, "Transport Mappings for the Simple + Network Management Protocol (SNMP)", STD 62, RFC + 3417, December 2002. + + [RFC3418] Presuhn, R., Case, J., McCloghrie, K., Rose, M. and + S. Waldbusser, "Management Information Base (MIB) for + the Simple Network Management Protocol (SNMP)", STD + 62, RFC 3418, December 2002. + + [DES-NIST] Data Encryption Standard, National Institute of + Standards and Technology. Federal Information + Processing Standard (FIPS) Publication 46-1. + Supersedes FIPS Publication 46, (January, 1977; + reaffirmed January, 1988). + + [DESO-NIST] DES Modes of Operation, National Institute of + Standards and Technology. Federal Information + Processing Standard (FIPS) Publication 81, (December, + 1980). + + [SHA-NIST] Secure Hash Algorithm. NIST FIPS 180-1, (April, 1995) + http://csrc.nist.gov/fips/fip180-1.txt (ASCII) + http://csrc.nist.gov/fips/fip180-1.ps (Postscript) + + + + + + + +Blumenthal & Wijnen Standards Track [Page 76] + +RFC 3414 USM for SNMPv3 December 2002 + + +12.1 Informative References + + [Localized-Key] U. Blumenthal, N. C. Hien, B. Wijnen "Key Derivation + for Network Management Applications" IEEE Network + Magazine, April/May issue, 1997. + + [DES-ANSI] Data Encryption Algorithm, American National + Standards Institute. ANSI X3.92-1981, (December, + 1980). + + [DESO-ANSI] Data Encryption Algorithm - Modes of Operation, + American National Standards Institute. ANSI X3.106- + 1983, (May 1983). + + [DESG-NIST] Guidelines for Implementing and Using the NBS Data + Encryption Standard, National Institute of Standards + and Technology. Federal Information Processing + Standard (FIPS) Publication 74, (April, 1981). + + [DEST-NIST] Validating the Correctness of Hardware + Implementations of the NBS Data Encryption Standard, + National Institute of Standards and Technology. + Special Publication 500-20. + + [DESM-NIST] Maintenance Testing for the Data Encryption Standard, + National Institute of Standards and Technology. + Special Publication 500-61, (August, 1980). + + [RFC3174] Eastlake, D. 3rd and P. Jones, "US Secure Hash + Algorithm 1 (SHA1)", RFC 3174, September 2001. + + + + + + + + + + + + + + + + + + + + + +Blumenthal & Wijnen Standards Track [Page 77] + +RFC 3414 USM for SNMPv3 December 2002 + + +APPENDIX A - Installation + +A.1. SNMP engine Installation Parameters + + During installation, an authoritative SNMP engine SHOULD (in the + meaning as defined in [RFC2119]) be configured with several initial + parameters. These include: + + 1) A Security Posture + + The choice of security posture determines if initial configuration + is implemented and if so how. One of three possible choices is + selected: + + minimum-secure, + semi-secure, + very-secure (i.e., no-initial-configuration) + + In the case of a very-secure posture, there is no initial + configuration, and so the following steps are irrelevant. + + 2) One or More Secrets + + These are the authentication/privacy secrets for the first user to + be configured. + + One way to accomplish this is to have the installer enter a + "password" for each required secret. The password is then + algorithmically converted into the required secret by: + + - forming a string of length 1,048,576 octets by repeating the + value of the password as often as necessary, truncating + accordingly, and using the resulting string as the input to the + MD5 algorithm [RFC1321]. The resulting digest, termed + "digest1", is used in the next step. + + - a second string is formed by concatenating digest1, the SNMP + engine's snmpEngineID value, and digest1. This string is used + as input to the MD5 algorithm [RFC1321]. + + The resulting digest is the required secret (see Appendix A.2). + + + + + + + + + + +Blumenthal & Wijnen Standards Track [Page 78] + +RFC 3414 USM for SNMPv3 December 2002 + + + With these configured parameters, the SNMP engine instantiates the + following usmUserEntry in the usmUserTable: + + no privacy support privacy support + ------------------ --------------- + usmUserEngineID localEngineID localEngineID + usmUserName "initial" "initial" + usmUserSecurityName "initial" "initial" + usmUserCloneFrom ZeroDotZero ZeroDotZero + usmUserAuthProtocol usmHMACMD5AuthProtocol usmHMACMD5AuthProtocol + usmUserAuthKeyChange "" "" + usmUserOwnAuthKeyChange "" "" + usmUserPrivProtocol none usmDESPrivProtocol + usmUserPrivKeyChange "" "" + usmUserOwnPrivKeyChange "" "" + usmUserPublic "" "" + usmUserStorageType anyValidStorageType anyValidStorageType + usmUserStatus active active + + It is recommended to also instantiate a set of template + usmUserEntries which can be used as clone-from users for newly + created usmUserEntries. These are the two suggested entries: + + no privacy support privacy support + ------------------ --------------- + usmUserEngineID localEngineID localEngineID + usmUserName "templateMD5" "templateMD5" + usmUserSecurityName "templateMD5" "templateMD5" + usmUserCloneFrom ZeroDotZero ZeroDotZero + usmUserAuthProtocol usmHMACMD5AuthProtocol usmHMACMD5AuthProtocol + usmUserAuthKeyChange "" "" + usmUserOwnAuthKeyChange "" "" + usmUserPrivProtocol none usmDESPrivProtocol + usmUserPrivKeyChange "" "" + usmUserOwnPrivKeyChange "" "" + usmUserPublic "" "" + usmUserStorageType permanent permanent + usmUserStatus active active + + + + + + + + + + + + + +Blumenthal & Wijnen Standards Track [Page 79] + +RFC 3414 USM for SNMPv3 December 2002 + + + no privacy support privacy support + ------------------ --------------- + usmUserEngineID localEngineID localEngineID + usmUserName "templateSHA" "templateSHA" + usmUserSecurityName "templateSHA" "templateSHA" + usmUserCloneFrom ZeroDotZero ZeroDotZero + usmUserAuthProtocol usmHMACSHAAuthProtocol usmHMACSHAAuthProtocol + usmUserAuthKeyChange "" "" + usmUserOwnAuthKeyChange "" "" + usmUserPrivProtocol none usmDESPrivProtocol + usmUserPrivKeyChange "" "" + usmUserOwnPrivKeyChange "" "" + usmUserPublic "" "" + usmUserStorageType permanent permanent + usmUserStatus active active + +A.2. Password to Key Algorithm + + A sample code fragment (section A.2.1) demonstrates the password to + key algorithm which can be used when mapping a password to an + authentication or privacy key using MD5. The reference source code + of MD5 is available in [RFC1321]. + + Another sample code fragment (section A.2.2) demonstrates the + password to key algorithm which can be used when mapping a password + to an authentication or privacy key using SHA (documented in SHA- + NIST). + + An example of the results of a correct implementation is provided + (section A.3) which an implementor can use to check if his + implementation produces the same result. + + + + + + + + + + + + + + + + + + + + +Blumenthal & Wijnen Standards Track [Page 80] + +RFC 3414 USM for SNMPv3 December 2002 + + +A.2.1. Password to Key Sample Code for MD5 + + void password_to_key_md5( + u_char *password, /* IN */ + u_int passwordlen, /* IN */ + u_char *engineID, /* IN - pointer to snmpEngineID */ + u_int engineLength,/* IN - length of snmpEngineID */ + u_char *key) /* OUT - pointer to caller 16-octet buffer */ + { + MD5_CTX MD; + u_char *cp, password_buf[64]; + u_long password_index = 0; + u_long count = 0, i; + + MD5Init (&MD); /* initialize MD5 */ + + /**********************************************/ + /* Use while loop until we've done 1 Megabyte */ + /**********************************************/ + while (count < 1048576) { + cp = password_buf; + for (i = 0; i < 64; i++) { + /*************************************************/ + /* Take the next octet of the password, wrapping */ + /* to the beginning of the password as necessary.*/ + /*************************************************/ + *cp++ = password[password_index++ % passwordlen]; + } + MD5Update (&MD, password_buf, 64); + count += 64; + } + MD5Final (key, &MD); /* tell MD5 we're done */ + + /*****************************************************/ + /* Now localize the key with the engineID and pass */ + /* through MD5 to produce final key */ + /* May want to ensure that engineLength <= 32, */ + /* otherwise need to use a buffer larger than 64 */ + /*****************************************************/ + memcpy(password_buf, key, 16); + memcpy(password_buf+16, engineID, engineLength); + memcpy(password_buf+16+engineLength, key, 16); + + MD5Init(&MD); + MD5Update(&MD, password_buf, 32+engineLength); + MD5Final(key, &MD); + return; + } + + + +Blumenthal & Wijnen Standards Track [Page 81] + +RFC 3414 USM for SNMPv3 December 2002 + + +A.2.2. Password to Key Sample Code for SHA + + void password_to_key_sha( + u_char *password, /* IN */ + u_int passwordlen, /* IN */ + u_char *engineID, /* IN - pointer to snmpEngineID */ + u_int engineLength,/* IN - length of snmpEngineID */ + u_char *key) /* OUT - pointer to caller 20-octet buffer */ + { + SHA_CTX SH; + u_char *cp, password_buf[72]; + u_long password_index = 0; + u_long count = 0, i; + + SHAInit (&SH); /* initialize SHA */ + + /**********************************************/ + /* Use while loop until we've done 1 Megabyte */ + /**********************************************/ + while (count < 1048576) { + cp = password_buf; + for (i = 0; i < 64; i++) { + /*************************************************/ + /* Take the next octet of the password, wrapping */ + /* to the beginning of the password as necessary.*/ + /*************************************************/ + *cp++ = password[password_index++ % passwordlen]; + } + SHAUpdate (&SH, password_buf, 64); + count += 64; + } + SHAFinal (key, &SH); /* tell SHA we're done */ + + /*****************************************************/ + /* Now localize the key with the engineID and pass */ + /* through SHA to produce final key */ + /* May want to ensure that engineLength <= 32, */ + /* otherwise need to use a buffer larger than 72 */ + /*****************************************************/ + memcpy(password_buf, key, 20); + memcpy(password_buf+20, engineID, engineLength); + memcpy(password_buf+20+engineLength, key, 20); + + SHAInit(&SH); + SHAUpdate(&SH, password_buf, 40+engineLength); + SHAFinal(key, &SH); + return; + } + + + +Blumenthal & Wijnen Standards Track [Page 82] + +RFC 3414 USM for SNMPv3 December 2002 + + +A.3. Password to Key Sample Results + +A.3.1. Password to Key Sample Results using MD5 + + The following shows a sample output of the password to key algorithm + for a 16-octet key using MD5. + + With a password of "maplesyrup" the output of the password to key + algorithm before the key is localized with the SNMP engine's + snmpEngineID is: + + '9f af 32 83 88 4e 92 83 4e bc 98 47 d8 ed d9 63'H + + After the intermediate key (shown above) is localized with the + snmpEngineID value of: + + '00 00 00 00 00 00 00 00 00 00 00 02'H + + the final output of the password to key algorithm is: + + '52 6f 5e ed 9f cc e2 6f 89 64 c2 93 07 87 d8 2b'H + +A.3.2. Password to Key Sample Results using SHA + + The following shows a sample output of the password to key algorithm + for a 20-octet key using SHA. + + With a password of "maplesyrup" the output of the password to key + algorithm before the key is localized with the SNMP engine's + snmpEngineID is: + + '9f b5 cc 03 81 49 7b 37 93 52 89 39 ff 78 8d 5d 79 14 52 11'H + + After the intermediate key (shown above) is localized with the + snmpEngineID value of: + + '00 00 00 00 00 00 00 00 00 00 00 02'H + + the final output of the password to key algorithm is: + + '66 95 fe bc 92 88 e3 62 82 23 5f c7 15 1f 12 84 97 b3 8f 3f'H + +A.4. Sample Encoding of msgSecurityParameters + + The msgSecurityParameters in an SNMP message are represented as an + OCTET STRING. This OCTET STRING should be considered opaque outside + a specific Security Model. + + + + +Blumenthal & Wijnen Standards Track [Page 83] + +RFC 3414 USM for SNMPv3 December 2002 + + + The User-based Security Model defines the contents of the OCTET + STRING as a SEQUENCE (see section 2.4). + + Given these two properties, the following is an example of they + msgSecurityParameters for the User-based Security Model, encoded as + an OCTET STRING: + + 04 <length> + 30 <length> + 04 <length> <msgAuthoritativeEngineID> + 02 <length> <msgAuthoritativeEngineBoots> + 02 <length> <msgAuthoritativeEngineTime> + 04 <length> <msgUserName> + 04 0c <HMAC-MD5-96-digest> + 04 08 <salt> + + Here is the example once more, but now with real values (except for + the digest in msgAuthenticationParameters and the salt in + msgPrivacyParameters, which depend on variable data that we have not + defined here): + + Hex Data Description + -------------- ----------------------------------------------- + 04 39 OCTET STRING, length 57 + 30 37 SEQUENCE, length 55 + 04 0c 80000002 msgAuthoritativeEngineID: IBM + 01 IPv4 address + 09840301 9.132.3.1 + 02 01 01 msgAuthoritativeEngineBoots: 1 + 02 02 0101 msgAuthoritativeEngineTime: 257 + 04 04 62657274 msgUserName: bert + 04 0c 01234567 msgAuthenticationParameters: sample value + 89abcdef + fedcba98 + 04 08 01234567 msgPrivacyParameters: sample value + 89abcdef + +A.5. Sample keyChange Results + +A.5.1. Sample keyChange Results using MD5 + + Let us assume that a user has a current password of "maplesyrup" as + in section A.3.1. and let us also assume the snmpEngineID of 12 + octets: + + '00 00 00 00 00 00 00 00 00 00 00 02'H + + + + + +Blumenthal & Wijnen Standards Track [Page 84] + +RFC 3414 USM for SNMPv3 December 2002 + + + If we now want to change the password to "newsyrup", then we first + calculate the key for the new password. It is as follows: + + '01 ad d2 73 10 7c 4e 59 6b 4b 00 f8 2b 1d 42 a7'H + + If we localize it for the above snmpEngineID, then the localized new + key becomes: + + '87 02 1d 7b d9 d1 01 ba 05 ea 6e 3b f9 d9 bd 4a'H + + If we then use a (not so good, but easy to test) random value of: + + '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'H + + Then the value we must send for keyChange is: + + '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 88 05 61 51 41 67 6c c9 19 61 74 e7 42 a3 25 51'H + + If this were for the privacy key, then it would be exactly the same. + +A.5.2. Sample keyChange Results using SHA + + Let us assume that a user has a current password of "maplesyrup" as + in section A.3.2. and let us also assume the snmpEngineID of 12 + octets: + + '00 00 00 00 00 00 00 00 00 00 00 02'H + + If we now want to change the password to "newsyrup", then we first + calculate the key for the new password. It is as follows: + + '3a 51 a6 d7 36 aa 34 7b 83 dc 4a 87 e3 e5 5e e4 d6 98 ac 71'H + + If we localize it for the above snmpEngineID, then the localized new + key becomes: + + '78 e2 dc ce 79 d5 94 03 b5 8c 1b ba a5 bf f4 63 91 f1 cd 25'H + + If we then use a (not so good, but easy to test) random value of: + + '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'H + + Then the value we must send for keyChange is: + + '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 9c 10 17 f4 fd 48 3d 2d e8 d5 fa db f8 43 92 cb 06 45 70 51' + + + + +Blumenthal & Wijnen Standards Track [Page 85] + +RFC 3414 USM for SNMPv3 December 2002 + + + For the key used for privacy, the new nonlocalized key would be: + + '3a 51 a6 d7 36 aa 34 7b 83 dc 4a 87 e3 e5 5e e4 d6 98 ac 71'H + + For the key used for privacy, the new localized key would be (note + that they localized key gets truncated to 16 octets for DES): + + '78 e2 dc ce 79 d5 94 03 b5 8c 1b ba a5 bf f4 63'H + + If we then use a (not so good, but easy to test) random value of: + + '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'H + + Then the value we must send for keyChange for the privacy key is: + + '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + '7e f8 d8 a4 c9 cd b2 6b 47 59 1c d8 52 ff 88 b5'H + +B. Change Log + + Changes made since RFC2574: + + - Updated references + - Updated contact info + - Clarifications + - to first constraint item 1) on page 6. + - to usmUserCloneFrom DESCRIPTION clause + - to securityName in section 2.1 + - Fixed "command responder" into "command generator" in last para of + DESCRIPTION clause of usmUserTable. + + Changes made since RFC2274: + + - Fixed msgUserName to allow size of zero and explain that this can + be used for snmpEngineID discovery. + - Clarified section 3.1 steps 4.b, 5, 6 and 8.b. + - Clarified section 3.2 paragraph 2. + - Clarified section 3.2 step 7.a last paragraph, step 7.b.1 second + bullet and step 7.b.2 third bullet. + - Clarified section 4 to indicate that discovery can use a userName + of zero length in unAuthenticated messages, whereas a valid + userName must be used in authenticated messages. + - Added REVISION clauses to MODULE-IDENTITY + - Clarified KeyChange TC by adding a note that localized keys must be + used when calculating a KeyChange value. + - Added clarifying text to the DESCRIPTION clause of usmUserTable. + Added text describes a recommended procedure for adding a new user. + - Clarified the use of usmUserCloneFrom object. + + + +Blumenthal & Wijnen Standards Track [Page 86] + +RFC 3414 USM for SNMPv3 December 2002 + + + - Clarified how and under which conditions the usmUserAuthProtocol + and usmUserPrivProtocol can be initialized and/or changed. + - Added comment on typical sizes for usmUserAuthKeyChange and + usmUserPrivKeyChange. Also for usmUserOwnAuthKeyChange and + usmUserOwnPrivKeyChange. + - Added clarifications to the DESCRIPTION clauses of + usmUserAuthKeyChange, usmUserOwnAuthKeychange, usmUserPrivKeyChange + and usmUserOwnPrivKeychange. + - Added clarification to DESCRIPTION clause of usmUserStorageType. + - Added clarification to DESCRIPTION clause of usmUserStatus. + - Clarified IV generation procedure in section 8.1.1.1 and in + addition clarified section 8.3.1 step 1 and section 8.3.2. step 3. + - Clarified section 11.2 and added a warning that different size + passwords with repetitive strings may result in same key. + - Added template users to appendix A for cloning process. + - Fixed C-code examples in Appendix A. + - Fixed examples of generated keys in Appendix A. + - Added examples of KeyChange values to Appendix A. + - Used PDU Classes instead of RFC1905 PDU types. + - Added text in the security section about Reports and Access Control + to the MIB. + - Removed a incorrect note at the end of section 3.2 step 7. + - Added a note in section 3.2 step 3. + - Corrected various spelling errors and typos. + - Corrected procedure for 3.2 step 2.a) + - various clarifications. + - Fixed references to new/revised documents + - Change to no longer cache data that is not used + +Editors' Addresses + + Uri Blumenthal + Lucent Technologies + 67 Whippany Rd. + Whippany, NJ 07981 + USA + + Phone: +1-973-386-2163 + EMail: uri@lucent.com + + Bert Wijnen + Lucent Technologies + Schagen 33 + 3461 GL Linschoten + Netherlands + + Phone: +31-348-480-685 + EMail: bwijnen@lucent.com + + + +Blumenthal & Wijnen Standards Track [Page 87] + +RFC 3414 USM for SNMPv3 December 2002 + + +Full Copyright Statement + + Copyright (C) The Internet Society (2002). All Rights Reserved. + + This document and translations of it may be copied and furnished to + others, and derivative works that comment on or otherwise explain it + or assist in its implementation may be prepared, copied, published + and distributed, in whole or in part, without restriction of any + kind, provided that the above copyright notice and this paragraph are + included on all such copies and derivative works. However, this + document itself may not be modified in any way, such as by removing + the copyright notice or references to the Internet Society or other + Internet organizations, except as needed for the purpose of + developing Internet standards in which case the procedures for + copyrights defined in the Internet Standards process must be + followed, or as required to translate it into languages other than + English. + + The limited permissions granted above are perpetual and will not be + revoked by the Internet Society or its successors or assigns. + + This document and the information contained herein is provided on an + "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING + TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION + HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF + MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + +Acknowledgement + + Funding for the RFC Editor function is currently provided by the + Internet Society. + + + + + + + + + + + + + + + + + + + +Blumenthal & Wijnen Standards Track [Page 88] + |