Hi,

I try to setup an snmp agent that supports AES192 and AES256

 

- First, I want to talk about snmpd.

In usr\etc\snmp\snmpd.conf, I create 11 users:

 

createUser dkduy0

createUser dkduy MD5 123456789

createUser dkduy1 SHA 123456789

createUser dkduy2 MD5 123456789 DES 123456789

createUser dkduy3 MD5 123456789 AES128 123456789

createUser dkduy4 SHA 123456789 DES 123456789

createUser dkduy5 SHA 123456789 AES192 123456789

createUser dkduy6 SHA 123456789 AES256 123456789

createUser dkduy7 SHA 123456789 AES128 123456789

createUser dkduy8 MD5 123456789 AES192 123456789

createUser dkduy9 MD5 123456789 AES256 123456789

 

snmpd.exe will read usr\etc\snmp\snmpd.conf and creates \usr\snmp\persist\snmpd.conf with the following lines:

 

usmUser 1 3 <engine> <…> <…> NULL .1.3.6.1.6.3.10.1.1.2 0xf7d8214f6298df87d3b2eedc737c31c1 .1.3.6.1.6.3.10.1.2.1 "" ""

usmUser 1 3 <engine> <…> <…> NULL .1.3.6.1.6.3.10.1.1.1 "" .1.3.6.1.6.3.10.1.2.1 "" ""

usmUser 1 3 <engine> <…> <…> NULL .1.3.6.1.6.3.10.1.1.3 0xdb5bcb03fc456a5f5ab6472b0fdb0e405b5f49f2 .1.3.6.1.6.3.10.1.2.1 "" ""

usmUser 1 3 <engine> <…> <…> NULL .1.3.6.1.6.3.10.1.1.2 0xf7d8214f6298df87d3b2eedc737c31c1 .1.3.6.1.6.3.10.1.2.2 0xf7d8214f6298df87d3b2eedc737c31c1 ""

usmUser 1 3 <engine> <…> <…> NULL .1.3.6.1.6.3.10.1.1.2 0xf7d8214f6298df87d3b2eedc737c31c1 .1.3.6.1.6.3.10.1.2.4 0xf7d8214f6298df87d3b2eedc737c31c1 ""

usmUser 1 3 <engine> <…> <…> NULL .1.3.6.1.6.3.10.1.1.3 0xdb5bcb03fc456a5f5ab6472b0fdb0e405b5f49f2 .1.3.6.1.6.3.10.1.2.2 0xdb5bcb03fc456a5f5ab6472b0fdb0e405b5f49f2 ""

 

usmUser 1 3 <engine> <…> <…> NULL <SHAOID> 0xdb5bcb03fc456a5f5ab6472b0fdb0e405b5f49f2 .1.3.6.1.4.1.8072.876.876.192 0xdb5bcb03fc456a5f5ab6472b0fdb0e405b5f49f2 ""

usmUser 1 3 <engine> <…> <…> NULL <SHAOID> 0xdb5bcb03fc456a5f5ab6472b0fdb0e405b5f49f2 .1.3.6.1.4.1.8072.876.876.256 0xdb5bcb03fc456a5f5ab6472b0fdb0e405b5f49f2 ""

usmUser 1 3 <engine> <…> <…> NULL <SHAOID> 0xdb5bcb03fc456a5f5ab6472b0fdb0e405b5f49f2 .1.3.6.1.6.3.10.1.2.4 0xdb5bcb03fc456a5f5ab6472b0fdb0e405b5f49f2 ""

 

usmUser 1 3 <engine> <…> <…> NULL .1.3.6.1.6.3.10.1.1.2 0xf7d8214f6298df87d3b2eedc737c31c1 .1.3.6.1.4.1.8072.876.876.192 0xf7d8214f6298df87d3b2eedc737c31c1 ""

usmUser 1 3 <engine> <…> <…> NULL .1.3.6.1.6.3.10.1.1.2 0xf7d8214f6298df87d3b2eedc737c31c1 .1.3.6.1.4.1.8072.876.876.256 0xf7d8214f6298df87d3b2eedc737c31c1 ""

 

I want to focus on the color lines, as you can see, with the same password for authenticate and privacy, it create the same encrypted password, no matter what the privacy protocol is. These encrypted password depends only authenticate protocol.

 

- Next, about snmpget.

Build snmpget from net-snmp-5.1.4, I debug snmpget with the following parameters:

      -v 3 -l authpriv -u dkduy5 -a SHA -A 123456789 -x AES192 -X 123456789 192.168.98.31 sysName.0

 

I see the following:

\snmplib\snmp_parse_args.cgenerate_Ku function, password of authenticate and privacy protocol will be encrypted by one protocol, that is authenticate protocol.

 

securityAuthKey encrypting:

generate_Ku(session->securityAuthProto,

                        session->securityAuthProtoLen,

                        (u_char *) Apsz, strlen(Apsz),

                        session->securityAuthKey,

                        &session->securityAuthKeyLen) != SNMPERR_SUCCESS);

 

     securityPrivKey encrypting:

   generate_Ku(session->securityAuthProto,

                        session->securityAuthProtoLen,

                        (u_char *) Xpsz, strlen(Xpsz),

                        session->securityPrivKey,

                        &session->securityPrivKeyLen) != SNMPERR_SUCCESS);

 

So, securityAuthKey and securityPrivKey will be the same, securityAuthKeyLen and securityPrivKeyLen will be the same.

If we used MD5 protocol, securityAuthKeyLen and securityPrivKeyLen will be 16 bytes length, and 20 bytes length for SHA protocol.

 

Next, in function create_user_from_session() (snmplib\snmp_api.c),

v3 user will be create with

generate_kul(user->authProtocol, user->authProtocolLen,

                  session->securityEngineID,

                  session->securityEngineIDLen,

                  session->securityAuthKey,

                  session->securityAuthKeyLen, user->authKey,

                  &user->authKeyLen) != SNMPERR_SUCCESS)

for securityAuthKey and

generate_kul(user->authProtocol, user->authProtocolLen,

                         session->securityEngineID,

                         session->securityEngineIDLen,

                         session->securityPrivKey,

                         session->securityPrivKeyLen, user->privKey,

                         &user->privKeyLen) != SNMPERR_SUCCESS)

for securityPrivKey.

They also use the same protocol for two cases, securityAuthKeyLen and securityPrivKeyLen will be the same, user->authKey and user->privKey will be the same.

 

Next, in \snmplib\scapi.c, sc_encrypt() function,

 

    if (ISTRANSFORM(privtype, DESPriv)) {

        properlength = BYTESIZE(SNMP_TRANS_PRIVLEN_1DES);

        properlength_iv = BYTESIZE(SNMP_TRANS_PRIVLEN_1DES_IV);

        pad_size = properlength;

#ifdef HAVE_AES

    } else if (ISTRANSFORM(privtype, AES128Priv)) {

        properlength = BYTESIZE(SNMP_TRANS_PRIVLEN_AES128);

        properlength_iv = BYTESIZE(SNMP_TRANS_PRIVLEN_AES128_IV);

    } else if (ISTRANSFORM(privtype, AES192Priv)) {

        properlength = BYTESIZE(SNMP_TRANS_PRIVLEN_AES192);

        properlength_iv = BYTESIZE(SNMP_TRANS_PRIVLEN_AES192_IV);

    } else if (ISTRANSFORM(privtype, AES256Priv)) {

        properlength = BYTESIZE(SNMP_TRANS_PRIVLEN_AES256);

        properlength_iv = BYTESIZE(SNMP_TRANS_PRIVLEN_AES256_IV);

#endif

     

                if privtype = AES192, properlength = 24 bytes, properlength_iv = 24 bytes.

 

    if ((keylen < properlength) || (ivlen < properlength_iv)) {

         QUITFUN(SNMPERR_GENERR, sc_encrypt_quit);

    }

 

      keylen = thePrivKeyLength = user->privKeyLen

      ivlen = BYTESIZE(USM_AES_SALT_LENGTH) = 16 bytes

 

so, QUITFUN(SNMPERR_GENERR, sc_encrypt_quit) function will be called if we use AES192 or AES256 privacy prototols.

 

 

I don’t think net-snmp-5.1.4 supports AES192 and AES256 protocols. Can you help me ?

 

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Net-snmp-coders mailing list
Net-snmp-coders@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/net-snmp-coders

Reply via email to