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)