Free mib browser

Tcl-MIBBrowser is a free and open-source MIB Browser for Linux and Windows platforms.

Tcl-MIBBrowser is a front end for Net-SNMP, the UI is based on TCL / TK 8.6. It should be ported to other platforms. Currently I only build, and test on Linux and Windows.

The software use the following tcl's packages
net-snmp-tcl
sha1 (one of tcllib project)
inifile (one of tcllib project)
bigint (Split from bignum library)
treectrl

Features

  • SNMP v1, v2c ,v3
  • SNMPv3 Diffie-Hellman
  • Load MIB files
  • snmp dump/load OCTET data
  • Bookmark OID

Download






Tcl-MIBBrowser screenshots

source code: https://github.com/jianiau/Tcl-MIBBrowser


Screenshots

TCL MIB Browser

Tcl-MIBBrowser 是免費 (free) 開源 (opensource) 的軟體, source code 放在 GitHub
核心的 model 使用Net-SNMP, 將SNMP apps (snmpget, snmpset, snmpwalk...)編譯成TCL的模組
net-snmp-tcl 再搭配 TCL/TK 就可以拼湊出想要的功能與界面,也能快速的跨平台開發
目前主要是在Ubuntu x86_64 上開發與測試,以下附上一些目前進度與功能介紹

這隻程式有用到 8.6 版的指令,Ubuntu 14.04 預設就裝好了
使用 Windows 的可以用 Tclkit 執行,或是直接下載打包好的執行檔玩玩看
執行檔下載 : 壓縮檔包含主程式和 netsnmp mib

初次開啟時要先設定MIB資料夾,點選"MIB Setting"按鈕

Certificate 格式與雜記

在稍微了解 RSA 演算法原理以及 ASN.1 DER 編碼方法
對 certificate 這個東西又多了解了一些,這邊記錄一下目前的理解以及一些連結,方便查詢

ASN.1 DER 格式編碼與解碼


在工作時常會遇到的幾個資料,certificate(X.509 DER),signed image(PKCS#7 DER), snmp packet
這些資料都用了 ASN.1 的 DER 格式。雖然有很多工具能把這些值解出來,但還是希望能靠著hexdump和小算盤就解出資料,有時也想要對資料做一些處理
那就只好硬吞spec,看它到底是如何編碼的。不過因為英文不好,spec看不太懂,有時候反而覺得程式碼看起來還比較輕切,於是一邊看spec,搭配tcl的ASN package來了解編碼方式
這邊紀錄一些常看到的資料類型,了解怎麼編碼解碼之後,就可以編輯certificate,SNMP 封包,當然直接使用現成的程式碼移植擴展到TCL是最方便的,但我不是每次都能順利地把
程式碼轉成TCL用的格式,在還沒編譯出TCL的dll時,就是純用TCL硬上

參考資料
ITU-T X.680
ITU-T X.690
http://www.obj-sys.com/asn1tutorial/asn1only.html


PacketCable 2.0 IPv6 Provisioning CNR 7.2 FQDN 設定

以前老闆說過 "按圖施工,保證成功" ,為了玩一下PacketCable 2.0 的 IPv6 模式,找了一下大大們成功的案例來施工一下,但是代誌不是憨人所想的那麼簡單
每次抄別人答案,總會有幾個小地方沒注意到,這時只好乖乖得拿出spec來翻了。

這次遇到的問題是DHCP server,我用的是 CNR 7.2 沒有給出 FQDN

在使用IPv4的時候是透過option12(Host Name),option15(Domain Name)來組成
PKT-SP-PROV1.5-I04-090624

8.3 DHCP Options 12 and 15
MTA FQDN MUST be sent to the E-MTA in Option-12 and Option-15. Option-12 MUST contain "Host Name"
part of the FQDN, and the Option-15 MUST contain "Domain Name" part of the FQDN.
For example, if MTA FQDN is "mta1.pclab.com", then Option-12 must contain "mta1" and Option-15 must contain
"pclab.com".

換到 IPv6 時,想依樣畫葫蘆,在 client 裡加入這兩個設定,但是 MTA 一直抱怨它無法解出 FQDN,那就打開 wireshark 來 debug 吧

Diffie Hellman 參數檢查

在玩openssl的dh相關指令時,順手把之前玩過的snmpv3用的dh key拿來跑跑看
那把key的參數是
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"

g=2

先把它轉成der格式

package require asn
package require math::bignum

set 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"

set p  [::math::bignum::fromstr 0x[string tolower [join [split $p " \n"] ""]]]

set key ""
append key [::asn::asnBigInteger $p]
append key [asn::asnInteger 2]
set key [::asn::asnSequence $key]

set fd [open dh_der w]
fconfigure $fd -translation binary
puts -nonewline $fd $key

RSA非對稱加密演算法 (五) PKCS#1 v1.5 padding

之前所記錄的RSA演算法的運作都只是在做數學運算,在用於資料的加解密時可以把資料切割,內容看成是一個大的整數,資料要切多細則是看key是多少bits
之前的key為例,這是1024 bits的key,所指的是n有1024 bits。當我們要加密資料時可以切成多個小於1024 bits的區塊去計算。而在實際的應用上,因為RSA
演算法的速度比較慢,不設合用來傳資料,我目前看到的實際應用是用在certificate上,用private key簽名,public key驗證,時寄傳送的資料不長。

資料長度不夠的話會容易被破解,再加上這個演算法沒有加入亂數,當出現重重複性的資料時也會降低安全性,因此導入padding的機制來加強安全性
RSA有多種padding的方式,這邊只記錄最常用的PKCS#1 v1.5

RSA非對稱加密演算法 (四) 利用中國剩餘定理加速



使用RSA演算法在解密的計算時會需要較多時間,這時可以利用中國剩餘定理來加速
假設現在有一組金鑰,是由質數\(p,q\)生成,其中公鑰\((e,n)\),私鑰\((d,n)\),\(n=pq\)
在生成RSA金鑰的步驟中,最後一步是把\(p,q\)銷毀,但是在擁有私鑰的這一方若保留這兩個數則可以加快運算時間

假設收到一筆加密資料\(C\)

原本要計算的是
\(m= C^d \mod n =C^d \mod (pq)\)

把它轉換成中國剩餘定理的題型
\(\left\{ \begin{matrix} x \equiv m_1 \pmod{p} \\ x \equiv m_2 \pmod{q} \end{matrix} \right.\)
\(m_1=C^d \mod p \\ m_2=C^d \mod q\)
\(x\)的最小正整數解就是\(C^d\)

中國剩餘定理 Chinese remainder theorem

RSA演算法的解碼方法是\(C^d \mod N\),\(d\) 是一個很大的數,要算這個值比較辛苦,可以利用中國剩餘定理來簡化。
中國剩餘定理處理的問題就是韓信點兵這種題目
兵不知其數,三三數之剩二,五五數之剩三,七七數之剩二
寫成數學式就是
\(\left\{ \begin{matrix} x \equiv 2 \pmod{3} \\ x \equiv 3 \pmod{5} \\x \equiv 2 \pmod{7} \end{matrix} \right.\)

將程式的輸出傳給TCL

在打包一些現有的程式時(例如 net-snmp, openssl),裡面包含各式各樣的apps。
輸出結果的code散佈在很多地方,而且通常是直接出到stdout,想在tcl得到一樣格式
的結果就要慢慢改,有些複雜一點的輸出格式呼叫一堆function,還有static function,
改起來很麻煩。
以下紀錄一下目前用到的幾種導出結果的方法

RSA非對稱加密演算法 (三) 演算法證明


根據上一篇的數學理論,可以證明RSA演算法的解密是正確的

先把RSA產生key的過程再寫一次

1.`選擇兩相異質數p,q,求得N=pq`
2.`\phi(N)=(p-1)(q-1)`
3.`選一數e當公鑰1 <= e < \phi(N),求出模反原數,ed -= 1 ( mod \phi(N))` 接下來就能加解密了 訊息為`m` 加密後為`C`,`C=m^e mod N` 解密方法 `C^d mod N` 也就是要證明 `m^(ed) -= m (mod N)`

RSA非對稱加密演算法 (二) 數學理論

這篇紀錄一些RSA運算時要用到的數學定理和我比較能夠理解的證明

同餘理論


定義
對於整數 a,b,若正整數 m 能整除 a-b ,以符號表示就是 m | (a-b) ,則稱為 a,b 對於模 m 同餘,可以寫成
`a-=b(mod m)`

由此定義可以推導出
`a-=b (mod m) <=> a mod m = b mod m`

RSA非對稱加密演算法 (一) 運作方式


這是一種非對稱加密的演算法,非對稱加密就是指加密和解密使用不同的key
利用這種方式,再加上公正第三者就形成數位簽章的架構

以cable modem 的secure firmware upgrade為例
1.最頂層的人DOCSIS,大家都信任他,並保存它散佈出來的public key
2.今天有個叫MCA的公司要出一版image,他就產生一對key,private key留著,public key丟出來,
再加上一些屬性描述丟給DOCSIS簽名(*1),取得CVC,之後再把CVC,image,以及MCA對這個image的簽
名包成CM可以吃的格式丟出來
3.CM收到這一堆東西後就可以開始驗證簽名(*2),確認簽名是對的才會進行下一步,開始更新image(*3)