在前幾期的電子報中介紹過 NSEC 後,大家對於 DNSSEC 的負面回應應該有一些認識了,在NSEC中是透過上下筆的網域來驗證此網域不存在,這樣會造成一個安全性問題,假設我是駭客,就只要透過一直不斷地查詢不存的在網域,就可以將整個網域資料都收集到,是不是很危險呢?
所以在IETF中有人提出了NSEC3的方法來避免此問題,NSEC 與 NSEC3 的差別只是在於多一層hash 演算法,以下面例子來說:
Hash(a.tw)= S4FIQ35I96BC3JM6EDLGIJANQI4UJT1K.tw
Hash(b.tw)= GILI5SMBMU2IH4L4150SAUTCPLG3SIVF.tw
Hash(c.tw)= HT811HULUBD01F1F1T5DAVM91IS7SJI9.tw
NSEC 回應:
A.tw. NSEC b.tw.
B.tw. NSEC c.tw
NSEC3 回應:
GILI5SMBMU2IH4L4150SAUTCPLG3SIVF.tw. NSEC3 HT811HULUBD01F1F1T5DAVM91IS7SJI9.tw.
HT811HULUBD01F1F1T5DAVM91IS7SJI9.tw. NSEC3 S4FIQ35I96BC3JM6EDLGIJANQI4UJT1K.tw. |
原本在 Zone File中的網域都會排序(NSEC), 而現在是先 Hash 後在將雜湊值進行排序(NSEC3), 而在回應的部份也是將不存在的網域透過 hash 後,看夾在哪一個縫中間,再回傳上下筆的雜湊值,來驗證網域是否不存在,而整體的運作流程都與 NSEC 一樣,只是差在一個 hash 的演算法。
在驗證的部份,NSEC3 是透過 Match 與 Cover 的觀念來驗證資料,所謂的Match 就是存在的部份,Cover 就是不存在,以下面的例子來說:
- Match
*twnic3.net.tw = twnic3.net.tw
*g.twnic3.net.tw “match” twnic3.net.tw
- Cover
*H(A) = RRMHB956GDFPJQ46FCHA1OVNCSIQBTPE
*H(C) = T1DHLMPAFQ7TIF1DV1IO21UADPC9KE8G
*H(g.twnic3.net.tw) = T0E3G1MOR9P2LGBLV253DHN4HD1KEK23
*H(A) < H(g.twnic3.net.tw) < H(C)
- 假設查詢 twnic3.net.tw 中不存在網域 g.twnic3.net.tw
*第一筆表示該網域存在 twnic3.net.tw (match)
5ULNROCAATPPCK4OUMVPQ6NOJDP9PP13.twnic3.net.tw.
300 IN NSEC3 1 0 10 17597502
6RK5TEL9AP1AFQ4UUBTAVR7GSQRFQ4UD NS SOA RRSIG
DNSKEY NSEC3PARAM
*第二筆表示查詢的網域g.twnic3.net.tw不存在 (cover)
RRMHB956GDFPJQ46FCHA1OVNCSIQBTPE.twnic3.net.tw. 300
IN NSEC3 1 0 10 17597502
T1DHLMPAFQ7TIF1DV1IO21UADPC9KE8G A RRSIG
*第三筆表示 *.twnic3.net.tw 不存在 (cover)
0O225CEN5G82HKH6K7ETIF1C6TMA9QDG.twnic3.net.tw. 300 IN NSEC3 1 0 10
17597502
36032I7MDDBH3A3KK0T2JI7RVQQJ9CKD NS
|
如果你對 twnic.net.tw 的權威伺服器查詢 g.twnic.net.tw(假設不存在), 則twnic.net.tw 的這個部份會 ”Match”,因為存在,而 g.twnic.net.tw 會被 Cover,證明不存在,如此Client 就可以知道他所查詢的網域有哪些部份是存在的,而哪些是不存在(上下筆表示Cover ) |