home *** CD-ROM | disk | FTP | other *** search
/ Thomson (Residential) / TGSTPv7203.iso / mac / SNMP_MIBs / snmpv3 / SNMP-USER-BASED-SM-MIB.mib < prev    next >
Text File  |  2008-02-08  |  40KB  |  913 lines

  1. -- file: SNMP-USER-BASED-SM-MIB.my
  2. -- Extracted from RFC3414 by MG-SOFT Corp.
  3. -- Changes:
  4. --      No changes needed.
  5. -- http://www.mg-soft.com/
  6.  
  7. SNMP-USER-BASED-SM-MIB DEFINITIONS ::= BEGIN
  8.  
  9. IMPORTS
  10.     MODULE-IDENTITY, OBJECT-TYPE,
  11.     OBJECT-IDENTITY,
  12.     snmpModules, Counter32                FROM SNMPv2-SMI
  13.     TEXTUAL-CONVENTION, TestAndIncr,
  14.     RowStatus, RowPointer,
  15.     StorageType, AutonomousType           FROM SNMPv2-TC
  16.     MODULE-COMPLIANCE, OBJECT-GROUP       FROM SNMPv2-CONF
  17.     SnmpAdminString, SnmpEngineID,
  18.     snmpAuthProtocols, snmpPrivProtocols  FROM SNMP-FRAMEWORK-MIB;
  19.  
  20. snmpUsmMIB MODULE-IDENTITY
  21.     LAST-UPDATED "200210160000Z"            -- 16 Oct 2002, midnight
  22.     ORGANIZATION "SNMPv3 Working Group"
  23.     CONTACT-INFO "WG-email:   snmpv3@lists.tislabs.com
  24.                   Subscribe:  majordomo@lists.tislabs.com
  25.                               In msg body:  subscribe snmpv3
  26.  
  27.                   Chair:      Russ Mundy
  28.                               Network Associates Laboratories
  29.                   postal:     15204 Omega Drive, Suite 300
  30.                               Rockville, MD 20850-4601
  31.                               USA
  32.                   email:      mundy@tislabs.com
  33.  
  34.                   phone:      +1 301-947-7107
  35.  
  36.                   Co-Chair:   David Harrington
  37.                               Enterasys Networks
  38.                   Postal:     35 Industrial Way
  39.                               P. O. Box 5004
  40.                               Rochester, New Hampshire 03866-5005
  41.                               USA
  42.                   EMail:      dbh@enterasys.com
  43.                   Phone:      +1 603-337-2614
  44.  
  45.                   Co-editor   Uri Blumenthal
  46.                               Lucent Technologies
  47.                   postal:     67 Whippany Rd.
  48.                               Whippany, NJ 07981
  49.                               USA
  50.                   email:      uri@lucent.com
  51.                   phone:      +1-973-386-2163
  52.  
  53.                   Co-editor:  Bert Wijnen
  54.                               Lucent Technologies
  55.                   postal:     Schagen 33
  56.                               3461 GL Linschoten
  57.                               Netherlands
  58.                   email:      bwijnen@lucent.com
  59.                   phone:      +31-348-480-685
  60.                  "
  61.     DESCRIPTION  "The management information definitions for the
  62.                   SNMP User-based Security Model.
  63.  
  64.                   Copyright (C) The Internet Society (2002). This
  65.                   version of this MIB module is part of RFC 3414;
  66.                   see the RFC itself for full legal notices.
  67.                  "
  68. --  Revision history
  69.  
  70.     REVISION     "200210160000Z"          -- 16 Oct 2002, midnight
  71.     DESCRIPTION  "Changes in this revision:
  72.                   - Updated references and contact info.
  73.                   - Clarification to usmUserCloneFrom DESCRIPTION
  74.                     clause
  75.                   - Fixed 'command responder' into 'command generator'
  76.                     in last para of DESCRIPTION clause of
  77.                     usmUserTable.
  78.                   This revision published as RFC3414.
  79.                  "
  80.     REVISION     "199901200000Z"          -- 20 Jan 1999, midnight
  81.     DESCRIPTION  "Clarifications, published as RFC2574"
  82.  
  83.     REVISION     "199711200000Z"          -- 20 Nov 1997, midnight
  84.     DESCRIPTION  "Initial version, published as RFC2274"
  85.  
  86.     ::= { snmpModules 15 }
  87.  
  88. -- Administrative assignments ****************************************
  89.  
  90. usmMIBObjects     OBJECT IDENTIFIER ::= { snmpUsmMIB 1 }
  91. usmMIBConformance OBJECT IDENTIFIER ::= { snmpUsmMIB 2 }
  92.  
  93. -- Identification of Authentication and Privacy Protocols ************
  94.  
  95. usmNoAuthProtocol OBJECT-IDENTITY
  96.     STATUS        current
  97.     DESCRIPTION  "No Authentication Protocol."
  98.     ::= { snmpAuthProtocols 1 }
  99.  
  100. usmHMACMD5AuthProtocol OBJECT-IDENTITY
  101.     STATUS        current
  102.     DESCRIPTION  "The HMAC-MD5-96 Digest Authentication Protocol."
  103.     REFERENCE    "- H. Krawczyk, M. Bellare, R. Canetti HMAC:
  104.                     Keyed-Hashing for Message Authentication,
  105.                     RFC2104, Feb 1997.
  106.                   - Rivest, R., Message Digest Algorithm MD5, RFC1321.
  107.                  "
  108.     ::= { snmpAuthProtocols 2 }
  109.  
  110. usmHMACSHAAuthProtocol OBJECT-IDENTITY
  111.     STATUS        current
  112.     DESCRIPTION  "The HMAC-SHA-96 Digest Authentication Protocol."
  113.     REFERENCE    "- H. Krawczyk, M. Bellare, R. Canetti, HMAC:
  114.                     Keyed-Hashing for Message Authentication,
  115.                     RFC2104, Feb 1997.
  116.                   - Secure Hash Algorithm. NIST FIPS 180-1.
  117.                  "
  118.     ::= { snmpAuthProtocols 3 }
  119.  
  120. usmNoPrivProtocol OBJECT-IDENTITY
  121.     STATUS        current
  122.     DESCRIPTION  "No Privacy Protocol."
  123.     ::= { snmpPrivProtocols 1 }
  124.  
  125. usmDESPrivProtocol OBJECT-IDENTITY
  126.     STATUS        current
  127.     DESCRIPTION  "The CBC-DES Symmetric Encryption Protocol."
  128.     REFERENCE    "- Data Encryption Standard, National Institute of
  129.                     Standards and Technology.  Federal Information
  130.                     Processing Standard (FIPS) Publication 46-1.
  131.                     Supersedes FIPS Publication 46,
  132.                     (January, 1977; reaffirmed January, 1988).
  133.  
  134.                   - Data Encryption Algorithm, American National
  135.                     Standards Institute.  ANSI X3.92-1981,
  136.                     (December, 1980).
  137.  
  138.                   - DES Modes of Operation, National Institute of
  139.                     Standards and Technology.  Federal Information
  140.                     Processing Standard (FIPS) Publication 81,
  141.                     (December, 1980).
  142.  
  143.                   - Data Encryption Algorithm - Modes of Operation,
  144.                     American National Standards Institute.
  145.                     ANSI X3.106-1983, (May 1983).
  146.                  "
  147.     ::= { snmpPrivProtocols 2 }
  148.  
  149. -- Textual Conventions ***********************************************
  150.  
  151. KeyChange ::=     TEXTUAL-CONVENTION
  152.    STATUS         current
  153.    DESCRIPTION
  154.          "Every definition of an object with this syntax must identify
  155.           a protocol P, a secret key K, and a hash algorithm H
  156.           that produces output of L octets.
  157.  
  158.           The object's value is a manager-generated, partially-random
  159.           value which, when modified, causes the value of the secret
  160.           key K, to be modified via a one-way function.
  161.  
  162.           The value of an instance of this object is the concatenation
  163.           of two components: first a 'random' component and then a
  164.           'delta' component.
  165.  
  166.           The lengths of the random and delta components
  167.           are given by the corresponding value of the protocol P;
  168.           if P requires K to be a fixed length, the length of both the
  169.           random and delta components is that fixed length; if P
  170.           allows the length of K to be variable up to a particular
  171.           maximum length, the length of the random component is that
  172.           maximum length and the length of the delta component is any
  173.           length less than or equal to that maximum length.
  174.           For example, usmHMACMD5AuthProtocol requires K to be a fixed
  175.           length of 16 octets and L - of 16 octets.
  176.           usmHMACSHAAuthProtocol requires K to be a fixed length of
  177.           20 octets and L - of 20 octets. Other protocols may define
  178.           other sizes, as deemed appropriate.
  179.  
  180.           When a requester wants to change the old key K to a new
  181.           key keyNew on a remote entity, the 'random' component is
  182.           obtained from either a true random generator, or from a
  183.           pseudorandom generator, and the 'delta' component is
  184.           computed as follows:
  185.  
  186.            - a temporary variable is initialized to the existing value
  187.              of K;
  188.            - if the length of the keyNew is greater than L octets,
  189.              then:
  190.               - the random component is appended to the value of the
  191.                 temporary variable, and the result is input to the
  192.                 the hash algorithm H to produce a digest value, and
  193.                 the temporary variable is set to this digest value;
  194.               - the value of the temporary variable is XOR-ed with
  195.                 the first (next) L-octets (16 octets in case of MD5)
  196.                 of the keyNew to produce the first (next) L-octets
  197.                 (16 octets in case of MD5) of the 'delta' component.
  198.               - the above two steps are repeated until the unused
  199.                 portion of the keyNew component is L octets or less,
  200.            - the random component is appended to the value of the
  201.              temporary variable, and the result is input to the
  202.              hash algorithm H to produce a digest value;
  203.            - this digest value, truncated if necessary to be the same
  204.              length as the unused portion of the keyNew, is XOR-ed
  205.              with the unused portion of the keyNew to produce the
  206.              (final portion of the) 'delta' component.
  207.  
  208.            For example, using MD5 as the hash algorithm H:
  209.  
  210.               iterations = (lenOfDelta - 1)/16; /* integer division */
  211.               temp = keyOld;
  212.               for (i = 0; i < iterations; i++) {
  213.                   temp = MD5 (temp || random);
  214.                   delta[i*16 .. (i*16)+15] =
  215.                          temp XOR keyNew[i*16 .. (i*16)+15];
  216.               }
  217.               temp = MD5 (temp || random);
  218.               delta[i*16 .. lenOfDelta-1] =
  219.                      temp XOR keyNew[i*16 .. lenOfDelta-1];
  220.  
  221.           The 'random' and 'delta' components are then concatenated as
  222.           described above, and the resulting octet string is sent to
  223.           the recipient as the new value of an instance of this object.
  224.  
  225.           At the receiver side, when an instance of this object is set
  226.           to a new value, then a new value of K is computed as follows:
  227.  
  228.            - a temporary variable is initialized to the existing value
  229.              of K;
  230.            - if the length of the delta component is greater than L
  231.              octets, then:
  232.               - the random component is appended to the value of the
  233.                 temporary variable, and the result is input to the
  234.                 hash algorithm H to produce a digest value, and the
  235.                 temporary variable is set to this digest value;
  236.               - the value of the temporary variable is XOR-ed with
  237.                 the first (next) L-octets (16 octets in case of MD5)
  238.                 of the delta component to produce the first (next)
  239.                 L-octets (16 octets in case of MD5) of the new value
  240.                 of K.
  241.               - the above two steps are repeated until the unused
  242.                 portion of the delta component is L octets or less,
  243.            - the random component is appended to the value of the
  244.              temporary variable, and the result is input to the
  245.              hash algorithm H to produce a digest value;
  246.            - this digest value, truncated if necessary to be the same
  247.              length as the unused portion of the delta component, is
  248.              XOR-ed with the unused portion of the delta component to
  249.              produce the (final portion of the) new value of K.
  250.  
  251.            For example, using MD5 as the hash algorithm H:
  252.  
  253.               iterations = (lenOfDelta - 1)/16; /* integer division */
  254.               temp = keyOld;
  255.               for (i = 0; i < iterations; i++) {
  256.                   temp = MD5 (temp || random);
  257.                   keyNew[i*16 .. (i*16)+15] =
  258.                          temp XOR delta[i*16 .. (i*16)+15];
  259.               }
  260.               temp = MD5 (temp || random);
  261.               keyNew[i*16 .. lenOfDelta-1] =
  262.                      temp XOR delta[i*16 .. lenOfDelta-1];
  263.  
  264.           The value of an object with this syntax, whenever it is
  265.           retrieved by the management protocol, is always the zero
  266.           length string.
  267.  
  268.           Note that the keyOld and keyNew are the localized keys.
  269.  
  270.           Note that it is probably wise that when an SNMP entity sends
  271.           a SetRequest to change a key, that it keeps a copy of the old
  272.           key until it has confirmed that the key change actually
  273.           succeeded.
  274.          "
  275.     SYNTAX       OCTET STRING
  276.  
  277. -- Statistics for the User-based Security Model **********************
  278.  
  279.  
  280. usmStats         OBJECT IDENTIFIER ::= { usmMIBObjects 1 }
  281.  
  282.  
  283. usmStatsUnsupportedSecLevels OBJECT-TYPE
  284.     SYNTAX       Counter32
  285.     MAX-ACCESS   read-only
  286.     STATUS       current
  287.     DESCRIPTION "The total number of packets received by the SNMP
  288.                  engine which were dropped because they requested a
  289.                  securityLevel that was unknown to the SNMP engine
  290.                  or otherwise unavailable.
  291.                 "
  292.     ::= { usmStats 1 }
  293.  
  294. usmStatsNotInTimeWindows OBJECT-TYPE
  295.     SYNTAX       Counter32
  296.     MAX-ACCESS   read-only
  297.     STATUS       current
  298.     DESCRIPTION "The total number of packets received by the SNMP
  299.                  engine which were dropped because they appeared
  300.                  outside of the authoritative SNMP engine's window.
  301.                 "
  302.     ::= { usmStats 2 }
  303.  
  304. usmStatsUnknownUserNames OBJECT-TYPE
  305.     SYNTAX       Counter32
  306.     MAX-ACCESS   read-only
  307.     STATUS       current
  308.     DESCRIPTION "The total number of packets received by the SNMP
  309.                  engine which were dropped because they referenced a
  310.                  user that was not known to the SNMP engine.
  311.                 "
  312.     ::= { usmStats 3 }
  313.  
  314. usmStatsUnknownEngineIDs OBJECT-TYPE
  315.     SYNTAX       Counter32
  316.     MAX-ACCESS   read-only
  317.     STATUS       current
  318.     DESCRIPTION "The total number of packets received by the SNMP
  319.                  engine which were dropped because they referenced an
  320.                  snmpEngineID that was not known to the SNMP engine.
  321.                 "
  322.     ::= { usmStats 4 }
  323.  
  324. usmStatsWrongDigests OBJECT-TYPE
  325.     SYNTAX       Counter32
  326.     MAX-ACCESS   read-only
  327.     STATUS       current
  328.     DESCRIPTION "The total number of packets received by the SNMP
  329.                  engine which were dropped because they didn't
  330.                  contain the expected digest value.
  331.                 "
  332.     ::= { usmStats 5 }
  333.  
  334. usmStatsDecryptionErrors OBJECT-TYPE
  335.     SYNTAX       Counter32
  336.     MAX-ACCESS   read-only
  337.     STATUS       current
  338.     DESCRIPTION "The total number of packets received by the SNMP
  339.                  engine which were dropped because they could not be
  340.                  decrypted.
  341.                 "
  342.     ::= { usmStats 6 }
  343.  
  344. -- The usmUser Group ************************************************
  345.  
  346. usmUser          OBJECT IDENTIFIER ::= { usmMIBObjects 2 }
  347.  
  348. usmUserSpinLock  OBJECT-TYPE
  349.     SYNTAX       TestAndIncr
  350.     MAX-ACCESS   read-write
  351.     STATUS       current
  352.     DESCRIPTION "An advisory lock used to allow several cooperating
  353.                  Command Generator Applications to coordinate their
  354.                  use of facilities to alter secrets in the
  355.                  usmUserTable.
  356.                 "
  357.     ::= { usmUser 1 }
  358.  
  359. -- The table of valid users for the User-based Security Model ********
  360.  
  361. usmUserTable     OBJECT-TYPE
  362.     SYNTAX       SEQUENCE OF UsmUserEntry
  363.     MAX-ACCESS   not-accessible
  364.     STATUS       current
  365.     DESCRIPTION "The table of users configured in the SNMP engine's
  366.                  Local Configuration Datastore (LCD).
  367.  
  368.                  To create a new user (i.e., to instantiate a new
  369.                  conceptual row in this table), it is recommended to
  370.                  follow this procedure:
  371.  
  372.                    1)  GET(usmUserSpinLock.0) and save in sValue.
  373.                    2)  SET(usmUserSpinLock.0=sValue,
  374.                            usmUserCloneFrom=templateUser,
  375.                            usmUserStatus=createAndWait)
  376.                        You should use a template user to clone from
  377.                        which has the proper auth/priv protocol defined.
  378.  
  379.                  If the new user is to use privacy:
  380.  
  381.                    3)  generate the keyChange value based on the secret
  382.                        privKey of the clone-from user and the secret key
  383.                        to be used for the new user. Let us call this
  384.                        pkcValue.
  385.                    4)  GET(usmUserSpinLock.0) and save in sValue.
  386.                    5)  SET(usmUserSpinLock.0=sValue,
  387.                            usmUserPrivKeyChange=pkcValue
  388.                            usmUserPublic=randomValue1)
  389.                    6)  GET(usmUserPulic) and check it has randomValue1.
  390.                        If not, repeat steps 4-6.
  391.  
  392.                  If the new user will never use privacy:
  393.  
  394.                    7)  SET(usmUserPrivProtocol=usmNoPrivProtocol)
  395.  
  396.                  If the new user is to use authentication:
  397.  
  398.                    8)  generate the keyChange value based on the secret
  399.                        authKey of the clone-from user and the secret key
  400.                        to be used for the new user. Let us call this
  401.                        akcValue.
  402.                    9)  GET(usmUserSpinLock.0) and save in sValue.
  403.                    10) SET(usmUserSpinLock.0=sValue,
  404.                            usmUserAuthKeyChange=akcValue
  405.                            usmUserPublic=randomValue2)
  406.                    11) GET(usmUserPulic) and check it has randomValue2.
  407.                        If not, repeat steps 9-11.
  408.  
  409.                  If the new user will never use authentication:
  410.  
  411.                    12) SET(usmUserAuthProtocol=usmNoAuthProtocol)
  412.  
  413.                  Finally, activate the new user:
  414.  
  415.                    13) SET(usmUserStatus=active)
  416.  
  417.                  The new user should now be available and ready to be
  418.                  used for SNMPv3 communication. Note however that access
  419.                  to MIB data must be provided via configuration of the
  420.                  SNMP-VIEW-BASED-ACM-MIB.
  421.                  The use of usmUserSpinlock is to avoid conflicts with
  422.                  another SNMP command generator application which may
  423.                  also be acting on the usmUserTable.
  424.                 "
  425.     ::= { usmUser 2 }
  426.  
  427. usmUserEntry     OBJECT-TYPE
  428.     SYNTAX       UsmUserEntry
  429.     MAX-ACCESS   not-accessible
  430.     STATUS       current
  431.     DESCRIPTION "A user configured in the SNMP engine's Local
  432.                  Configuration Datastore (LCD) for the User-based
  433.                  Security Model.
  434.                 "
  435.     INDEX       { usmUserEngineID,
  436.                   usmUserName
  437.                 }
  438.     ::= { usmUserTable 1 }
  439.  
  440. UsmUserEntry ::= SEQUENCE
  441.     {
  442.         usmUserEngineID         SnmpEngineID,
  443.         usmUserName             SnmpAdminString,
  444.         usmUserSecurityName     SnmpAdminString,
  445.         usmUserCloneFrom        RowPointer,
  446.         usmUserAuthProtocol     AutonomousType,
  447.         usmUserAuthKeyChange    KeyChange,
  448.         usmUserOwnAuthKeyChange KeyChange,
  449.         usmUserPrivProtocol     AutonomousType,
  450.         usmUserPrivKeyChange    KeyChange,
  451.         usmUserOwnPrivKeyChange KeyChange,
  452.         usmUserPublic           OCTET STRING,
  453.         usmUserStorageType      StorageType,
  454.         usmUserStatus           RowStatus
  455.     }
  456.  
  457. usmUserEngineID  OBJECT-TYPE
  458.     SYNTAX       SnmpEngineID
  459.     MAX-ACCESS   not-accessible
  460.     STATUS       current
  461.     DESCRIPTION "An SNMP engine's administratively-unique identifier.
  462.  
  463.                  In a simple agent, this value is always that agent's
  464.                  own snmpEngineID value.
  465.  
  466.                  The value can also take the value of the snmpEngineID
  467.                  of a remote SNMP engine with which this user can
  468.                  communicate.
  469.                 "
  470.     ::= { usmUserEntry 1 }
  471.  
  472. usmUserName      OBJECT-TYPE
  473.     SYNTAX       SnmpAdminString (SIZE(1..32))
  474.     MAX-ACCESS   not-accessible
  475.     STATUS       current
  476.     DESCRIPTION "A human readable string representing the name of
  477.                  the user.
  478.  
  479.                  This is the (User-based Security) Model dependent
  480.                  security ID.
  481.                 "
  482.     ::= { usmUserEntry 2 }
  483.  
  484. usmUserSecurityName OBJECT-TYPE
  485.     SYNTAX       SnmpAdminString
  486.     MAX-ACCESS   read-only
  487.     STATUS       current
  488.     DESCRIPTION "A human readable string representing the user in
  489.                  Security Model independent format.
  490.  
  491.                  The default transformation of the User-based Security
  492.                  Model dependent security ID to the securityName and
  493.                  vice versa is the identity function so that the
  494.                  securityName is the same as the userName.
  495.                 "
  496.     ::= { usmUserEntry 3 }
  497.  
  498. usmUserCloneFrom OBJECT-TYPE
  499.     SYNTAX       RowPointer
  500.     MAX-ACCESS   read-create
  501.     STATUS       current
  502.     DESCRIPTION "A pointer to another conceptual row in this
  503.                  usmUserTable.  The user in this other conceptual
  504.                  row is called the clone-from user.
  505.  
  506.                  When a new user is created (i.e., a new conceptual
  507.                  row is instantiated in this table), the privacy and
  508.                  authentication parameters of the new user must be
  509.                  cloned from its clone-from user. These parameters are:
  510.                    - authentication protocol (usmUserAuthProtocol)
  511.                    - privacy protocol (usmUserPrivProtocol)
  512.                  They will be copied regardless of what the current
  513.                  value is.
  514.  
  515.                  Cloning also causes the initial values of the secret
  516.                  authentication key (authKey) and the secret encryption
  517.                  key (privKey) of the new user to be set to the same
  518.                  values as the corresponding secrets of the clone-from
  519.                  user to allow the KeyChange process to occur as
  520.                  required during user creation.
  521.  
  522.                  The first time an instance of this object is set by
  523.                  a management operation (either at or after its
  524.                  instantiation), the cloning process is invoked.
  525.                  Subsequent writes are successful but invoke no
  526.                  action to be taken by the receiver.
  527.                  The cloning process fails with an 'inconsistentName'
  528.                  error if the conceptual row representing the
  529.                  clone-from user does not exist or is not in an active
  530.                  state when the cloning process is invoked.
  531.  
  532.                  When this object is read, the ZeroDotZero OID
  533.                  is returned.
  534.                 "
  535.     ::= { usmUserEntry 4 }
  536.  
  537. usmUserAuthProtocol OBJECT-TYPE
  538.     SYNTAX       AutonomousType
  539.     MAX-ACCESS   read-create
  540.     STATUS       current
  541.     DESCRIPTION "An indication of whether messages sent on behalf of
  542.                  this user to/from the SNMP engine identified by
  543.                  usmUserEngineID, can be authenticated, and if so,
  544.                  the type of authentication protocol which is used.
  545.  
  546.                  An instance of this object is created concurrently
  547.                  with the creation of any other object instance for
  548.                  the same user (i.e., as part of the processing of
  549.                  the set operation which creates the first object
  550.                  instance in the same conceptual row).
  551.  
  552.                  If an initial set operation (i.e. at row creation time)
  553.                  tries to set a value for an unknown or unsupported
  554.                  protocol, then a 'wrongValue' error must be returned.
  555.  
  556.                  The value will be overwritten/set when a set operation
  557.                  is performed on the corresponding instance of
  558.                  usmUserCloneFrom.
  559.  
  560.                  Once instantiated, the value of such an instance of
  561.                  this object can only be changed via a set operation to
  562.                  the value of the usmNoAuthProtocol.
  563.  
  564.                  If a set operation tries to change the value of an
  565.                  existing instance of this object to any value other
  566.                  than usmNoAuthProtocol, then an 'inconsistentValue'
  567.                  error must be returned.
  568.  
  569.                  If a set operation tries to set the value to the
  570.                  usmNoAuthProtocol while the usmUserPrivProtocol value
  571.                  in the same row is not equal to usmNoPrivProtocol,
  572.                  then an 'inconsistentValue' error must be returned.
  573.                  That means that an SNMP command generator application
  574.                  must first ensure that the usmUserPrivProtocol is set
  575.                  to the usmNoPrivProtocol value before it can set
  576.                  the usmUserAuthProtocol value to usmNoAuthProtocol.
  577.                 "
  578.     DEFVAL      { usmNoAuthProtocol }
  579.     ::= { usmUserEntry 5 }
  580.  
  581. usmUserAuthKeyChange OBJECT-TYPE
  582.     SYNTAX       KeyChange   -- typically (SIZE (0 | 32)) for HMACMD5
  583.                              -- typically (SIZE (0 | 40)) for HMACSHA
  584.     MAX-ACCESS   read-create
  585.     STATUS       current
  586.     DESCRIPTION "An object, which when modified, causes the secret
  587.                  authentication key used for messages sent on behalf
  588.                  of this user to/from the SNMP engine identified by
  589.                  usmUserEngineID, to be modified via a one-way
  590.                  function.
  591.  
  592.                  The associated protocol is the usmUserAuthProtocol.
  593.                  The associated secret key is the user's secret
  594.                  authentication key (authKey). The associated hash
  595.                  algorithm is the algorithm used by the user's
  596.                  usmUserAuthProtocol.
  597.  
  598.                  When creating a new user, it is an 'inconsistentName'
  599.                  error for a set operation to refer to this object
  600.                  unless it is previously or concurrently initialized
  601.                  through a set operation on the corresponding instance
  602.                  of usmUserCloneFrom.
  603.  
  604.                  When the value of the corresponding usmUserAuthProtocol
  605.                  is usmNoAuthProtocol, then a set is successful, but
  606.                  effectively is a no-op.
  607.  
  608.                  When this object is read, the zero-length (empty)
  609.                  string is returned.
  610.  
  611.                  The recommended way to do a key change is as follows:
  612.  
  613.                    1) GET(usmUserSpinLock.0) and save in sValue.
  614.                    2) generate the keyChange value based on the old
  615.                       (existing) secret key and the new secret key,
  616.                       let us call this kcValue.
  617.  
  618.                  If you do the key change on behalf of another user:
  619.  
  620.                    3) SET(usmUserSpinLock.0=sValue,
  621.                           usmUserAuthKeyChange=kcValue
  622.                           usmUserPublic=randomValue)
  623.  
  624.                  If you do the key change for yourself:
  625.  
  626.                    4) SET(usmUserSpinLock.0=sValue,
  627.                           usmUserOwnAuthKeyChange=kcValue
  628.                           usmUserPublic=randomValue)
  629.  
  630.                  If you get a response with error-status of noError,
  631.                  then the SET succeeded and the new key is active.
  632.                  If you do not get a response, then you can issue a
  633.                  GET(usmUserPublic) and check if the value is equal
  634.                  to the randomValue you did send in the SET. If so, then
  635.                  the key change succeeded and the new key is active
  636.                  (probably the response got lost). If not, then the SET
  637.                  request probably never reached the target and so you
  638.                  can start over with the procedure above.
  639.                 "
  640.     DEFVAL      { ''H }    -- the empty string
  641.     ::= { usmUserEntry 6 }
  642.  
  643. usmUserOwnAuthKeyChange OBJECT-TYPE
  644.     SYNTAX       KeyChange   -- typically (SIZE (0 | 32)) for HMACMD5
  645.                              -- typically (SIZE (0 | 40)) for HMACSHA
  646.     MAX-ACCESS   read-create
  647.     STATUS       current
  648.     DESCRIPTION "Behaves exactly as usmUserAuthKeyChange, with one
  649.                  notable difference: in order for the set operation
  650.                  to succeed, the usmUserName of the operation
  651.                  requester must match the usmUserName that
  652.                  indexes the row which is targeted by this
  653.                  operation.
  654.                  In addition, the USM security model must be
  655.                  used for this operation.
  656.  
  657.                  The idea here is that access to this column can be
  658.                  public, since it will only allow a user to change
  659.                  his own secret authentication key (authKey).
  660.                  Note that this can only be done once the row is active.
  661.                  When a set is received and the usmUserName of the
  662.                  requester is not the same as the umsUserName that
  663.                  indexes the row which is targeted by this operation,
  664.                  then a 'noAccess' error must be returned.
  665.  
  666.                  When a set is received and the security model in use
  667.                  is not USM, then a 'noAccess' error must be returned.
  668.                 "
  669.     DEFVAL      { ''H }    -- the empty string
  670.     ::= { usmUserEntry 7 }
  671.  
  672. usmUserPrivProtocol OBJECT-TYPE
  673.     SYNTAX       AutonomousType
  674.     MAX-ACCESS   read-create
  675.     STATUS       current
  676.     DESCRIPTION "An indication of whether messages sent on behalf of
  677.                  this user to/from the SNMP engine identified by
  678.                  usmUserEngineID, can be protected from disclosure,
  679.                  and if so, the type of privacy protocol which is used.
  680.  
  681.                  An instance of this object is created concurrently
  682.                  with the creation of any other object instance for
  683.                  the same user (i.e., as part of the processing of
  684.                  the set operation which creates the first object
  685.                  instance in the same conceptual row).
  686.  
  687.                  If an initial set operation (i.e. at row creation time)
  688.                  tries to set a value for an unknown or unsupported
  689.                  protocol, then a 'wrongValue' error must be returned.
  690.  
  691.                  The value will be overwritten/set when a set operation
  692.                  is performed on the corresponding instance of
  693.                  usmUserCloneFrom.
  694.  
  695.                  Once instantiated, the value of such an instance of
  696.                  this object can only be changed via a set operation to
  697.                  the value of the usmNoPrivProtocol.
  698.  
  699.                  If a set operation tries to change the value of an
  700.                  existing instance of this object to any value other
  701.                  than usmNoPrivProtocol, then an 'inconsistentValue'
  702.                  error must be returned.
  703.  
  704.                  Note that if any privacy protocol is used, then you
  705.                  must also use an authentication protocol. In other
  706.                  words, if usmUserPrivProtocol is set to anything else
  707.                  than usmNoPrivProtocol, then the corresponding instance
  708.                  of usmUserAuthProtocol cannot have a value of
  709.                  usmNoAuthProtocol. If it does, then an
  710.                  'inconsistentValue' error must be returned.
  711.                 "
  712.     DEFVAL      { usmNoPrivProtocol }
  713.     ::= { usmUserEntry 8 }
  714.  
  715. usmUserPrivKeyChange OBJECT-TYPE
  716.     SYNTAX       KeyChange  -- typically (SIZE (0 | 32)) for DES
  717.     MAX-ACCESS   read-create
  718.     STATUS       current
  719.     DESCRIPTION "An object, which when modified, causes the secret
  720.                  encryption key used for messages sent on behalf
  721.                  of this user to/from the SNMP engine identified by
  722.                  usmUserEngineID, to be modified via a one-way
  723.                  function.
  724.  
  725.                  The associated protocol is the usmUserPrivProtocol.
  726.                  The associated secret key is the user's secret
  727.                  privacy key (privKey). The associated hash
  728.                  algorithm is the algorithm used by the user's
  729.                  usmUserAuthProtocol.
  730.  
  731.                  When creating a new user, it is an 'inconsistentName'
  732.                  error for a set operation to refer to this object
  733.                  unless it is previously or concurrently initialized
  734.                  through a set operation on the corresponding instance
  735.                  of usmUserCloneFrom.
  736.  
  737.                  When the value of the corresponding usmUserPrivProtocol
  738.                  is usmNoPrivProtocol, then a set is successful, but
  739.                  effectively is a no-op.
  740.  
  741.                  When this object is read, the zero-length (empty)
  742.                  string is returned.
  743.                  See the description clause of usmUserAuthKeyChange for
  744.                  a recommended procedure to do a key change.
  745.                 "
  746.     DEFVAL      { ''H }    -- the empty string
  747.     ::= { usmUserEntry 9 }
  748.  
  749. usmUserOwnPrivKeyChange OBJECT-TYPE
  750.     SYNTAX       KeyChange  -- typically (SIZE (0 | 32)) for DES
  751.     MAX-ACCESS   read-create
  752.     STATUS       current
  753.     DESCRIPTION "Behaves exactly as usmUserPrivKeyChange, with one
  754.                  notable difference: in order for the Set operation
  755.                  to succeed, the usmUserName of the operation
  756.                  requester must match the usmUserName that indexes
  757.                  the row which is targeted by this operation.
  758.                  In addition, the USM security model must be
  759.                  used for this operation.
  760.  
  761.                  The idea here is that access to this column can be
  762.                  public, since it will only allow a user to change
  763.                  his own secret privacy key (privKey).
  764.                  Note that this can only be done once the row is active.
  765.  
  766.                  When a set is received and the usmUserName of the
  767.                  requester is not the same as the umsUserName that
  768.                  indexes the row which is targeted by this operation,
  769.                  then a 'noAccess' error must be returned.
  770.  
  771.                  When a set is received and the security model in use
  772.                  is not USM, then a 'noAccess' error must be returned.
  773.                 "
  774.     DEFVAL      { ''H }    -- the empty string
  775.     ::= { usmUserEntry 10 }
  776.  
  777. usmUserPublic    OBJECT-TYPE
  778.     SYNTAX       OCTET STRING (SIZE(0..32))
  779.     MAX-ACCESS   read-create
  780.     STATUS       current
  781.     DESCRIPTION "A publicly-readable value which can be written as part
  782.                  of the procedure for changing a user's secret
  783.                  authentication and/or privacy key, and later read to
  784.                  determine whether the change of the secret was
  785.                  effected.
  786.                 "
  787.     DEFVAL      { ''H }  -- the empty string
  788.     ::= { usmUserEntry 11 }
  789.  
  790. usmUserStorageType OBJECT-TYPE
  791.     SYNTAX       StorageType
  792.     MAX-ACCESS   read-create
  793.     STATUS       current
  794.     DESCRIPTION "The storage type for this conceptual row.
  795.  
  796.                  Conceptual rows having the value 'permanent' must
  797.                  allow write-access at a minimum to:
  798.  
  799.                  - usmUserAuthKeyChange, usmUserOwnAuthKeyChange
  800.                    and usmUserPublic for a user who employs
  801.                    authentication, and
  802.                  - usmUserPrivKeyChange, usmUserOwnPrivKeyChange
  803.                    and usmUserPublic for a user who employs
  804.                    privacy.
  805.  
  806.                  Note that any user who employs authentication or
  807.                  privacy must allow its secret(s) to be updated and
  808.                  thus cannot be 'readOnly'.
  809.  
  810.                  If an initial set operation tries to set the value to
  811.                  'readOnly' for a user who employs authentication or
  812.                  privacy, then an 'inconsistentValue' error must be
  813.                  returned.  Note that if the value has been previously
  814.                  set (implicit or explicit) to any value, then the rules
  815.                  as defined in the StorageType Textual Convention apply.
  816.  
  817.                  It is an implementation issue to decide if a SET for
  818.                  a readOnly or permanent row is accepted at all. In some
  819.                  contexts this may make sense, in others it may not. If
  820.                  a SET for a readOnly or permanent row is not accepted
  821.                  at all, then a 'wrongValue' error must be returned.
  822.                 "
  823.     DEFVAL      { nonVolatile }
  824.     ::= { usmUserEntry 12 }
  825.  
  826. usmUserStatus    OBJECT-TYPE
  827.     SYNTAX       RowStatus
  828.     MAX-ACCESS   read-create
  829.     STATUS       current
  830.     DESCRIPTION "The status of this conceptual row.
  831.  
  832.                  Until instances of all corresponding columns are
  833.                  appropriately configured, the value of the
  834.                  corresponding instance of the usmUserStatus column
  835.                  is 'notReady'.
  836.  
  837.                  In particular, a newly created row for a user who
  838.                  employs authentication, cannot be made active until the
  839.                  corresponding usmUserCloneFrom and usmUserAuthKeyChange
  840.                  have been set.
  841.  
  842.                  Further, a newly created row for a user who also
  843.                  employs privacy, cannot be made active until the
  844.                  usmUserPrivKeyChange has been set.
  845.  
  846.                  The RowStatus TC [RFC2579] requires that this
  847.                  DESCRIPTION clause states under which circumstances
  848.                  other objects in this row can be modified:
  849.  
  850.                  The value of this object has no effect on whether
  851.                  other objects in this conceptual row can be modified,
  852.                  except for usmUserOwnAuthKeyChange and
  853.                  usmUserOwnPrivKeyChange. For these 2 objects, the
  854.                  value of usmUserStatus MUST be active.
  855.                 "
  856.     ::= { usmUserEntry 13 }
  857.  
  858. -- Conformance Information *******************************************
  859.  
  860. usmMIBCompliances OBJECT IDENTIFIER ::= { usmMIBConformance 1 }
  861. usmMIBGroups      OBJECT IDENTIFIER ::= { usmMIBConformance 2 }
  862.  
  863. -- Compliance statements
  864.  
  865. usmMIBCompliance MODULE-COMPLIANCE
  866.     STATUS       current
  867.     DESCRIPTION "The compliance statement for SNMP engines which
  868.                  implement the SNMP-USER-BASED-SM-MIB.
  869.                 "
  870.  
  871.     MODULE       -- this module
  872.         MANDATORY-GROUPS { usmMIBBasicGroup }
  873.  
  874.         OBJECT           usmUserAuthProtocol
  875.         MIN-ACCESS       read-only
  876.         DESCRIPTION     "Write access is not required."
  877.  
  878.         OBJECT           usmUserPrivProtocol
  879.         MIN-ACCESS       read-only
  880.         DESCRIPTION     "Write access is not required."
  881.  
  882.     ::= { usmMIBCompliances 1 }
  883.  
  884. -- Units of compliance
  885. usmMIBBasicGroup OBJECT-GROUP
  886.     OBJECTS     {
  887.                   usmStatsUnsupportedSecLevels,
  888.                   usmStatsNotInTimeWindows,
  889.                   usmStatsUnknownUserNames,
  890.                   usmStatsUnknownEngineIDs,
  891.                   usmStatsWrongDigests,
  892.                   usmStatsDecryptionErrors,
  893.                   usmUserSpinLock,
  894.                   usmUserSecurityName,
  895.                   usmUserCloneFrom,
  896.                   usmUserAuthProtocol,
  897.                   usmUserAuthKeyChange,
  898.                   usmUserOwnAuthKeyChange,
  899.                   usmUserPrivProtocol,
  900.                   usmUserPrivKeyChange,
  901.                   usmUserOwnPrivKeyChange,
  902.                   usmUserPublic,
  903.                   usmUserStorageType,
  904.                   usmUserStatus
  905.                 }
  906.     STATUS       current
  907.     DESCRIPTION "A collection of objects providing for configuration
  908.                  of an SNMP engine which implements the SNMP
  909.                  User-based Security Model.
  910.                 "
  911.     ::= { usmMIBGroups 1 }
  912.  
  913. END