snmpv3 Diffie-Hellman

在做cable modem測試時,需要用到snmpv3 Diffie-Hellman,為了能夠自動化,希望可以用net-snmp 來達成,可惜一直找不到使用Diffie-Hellman的方法,所以只好切開來做了

1. 用net-snmp取得public key
2 .利用程式(tcl)算出snmpv3的authentication key 和privacy key
3. 利用算出來的key使用snmpv3



先從 Diffie-Hellman 開始
Diffie-Hellman 是一種密鑰交換協定,在cable modem這邊的做法是
1. Manager 產生一個亂數A,然後算出 a=g^A mod p ,把a以及相對應的usm寫在cm config file傳給modem(TLV34.1 34.2)
rfc2786
g = 2
p = FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1
    29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD
    EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245
    E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED
    EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE65381
    FFFFFFFF FFFFFFFF

2. Modem 也有自己的一個亂數B,同樣的方式算出 b=g^B mod p,b的值可以用snmpv3取得(level=noAuthNoPriv  security name=dhKickstart )

3. 雙方再做一次運算會取得相同的值,把這個值當作share key(sk)
    modem   計算 a^B mod p  =  (g^ A)^B  mod p = sk
    manager 計算 b^A mod p  =  (g^ B)^A mod  p = sk

4. 最後再利用 PBKDF2 (Password-Based Key Derivation Function 2) 算出最終要使用的authentication / privacy key

DK = PBKDF2(PRF, Password, Salt, c, dkLen)
PRF=sha1-hmac
Password=sk
c=500
dkLen=16
Salt for authentication key =0x98dfb5ac
Salt for privacy key =0xd1310ba6

5.經過這些運算後就能使用snmpv3存取modem的mib了

net-snmp 參數是
-v3
-u usm (TLV 34.1的值)
-l authPriv
-a MD5
-3k 0x.....(authentication key)
-x DES
-3K 0x....( privacy key)

理論大致如此,程式部分網路上有些相關的code,稍做修改即可
範例程式








沒有留言:

張貼留言