近日,國際互聯網工程任務組(也被稱為IETF)發布了一套新標準:RFC 8064,《有關穩定IPv6接口標識符的建議》。這個新標準正式更新了14個IETF標準,包括IPv6尋址架構。本質上來看,RFC 8064建議部署和使用RFC 7217以生成穩定IPv6地址。該RFC的發布是先前IPv6尋址安全和隱私方面工作的成果,特別是RFC 7217本身,還有RFC 7707和RFC 7721。
IPv6背景知識
傳統算法通過無狀態地址自動配置(SLAAC)生成穩定IPv6地址,這種算法被設計為使用底層鏈路層地址作為地址的接口標識符來生成地址。
隨著時間的推移,人們已經意識到通過IPv6地址執行主機跟蹤的風險。由于MAC地址通常為獨一無二,并且它們被嵌入在IPv6地址中,所以主機標識符容易由IPv6地址泄漏。為了應對這個問題,IETF發布了針對臨時地址的標準,這些臨時地址通常與傳統(穩定)IPv6地址一起使用。然而,盡管臨時地址可幫助緩解主機跟蹤的特定向量,但IPv6主機跟蹤的其他向量以及傳統地址掃描機制的漏洞等問題仍然未被解決。
IETF在IPv6地址安全和隱私方面不斷努力,最終發布了一個提案,以替代傳統算法來生成IPv6地址。不過,這個IPv6更新提案在相關IETF工作組(被稱為6man)被推遲。6man工作組決定將所提出的算法作為RFC7217發布,但不會正式取代傳統SLAAC算法。這意味著沒有正式更新IETF標準。
雖然RFC7217的發布是IPv6更新,但沒有任何標準推薦或者強制執行其部署和使用,因此,當時傳統SLAAC算法仍然是生成穩定IPv6地址的推薦方法。
隨后,有關IPv6地址安全和隱私的兩個RFC的發布(即RFC 7707和RFC 7721)為IETF采取最后一步奠定了基礎,即讓RFC 7217中提到的算法取代傳統SLAAC算法。
這最終在2017年2月發布RFC 8064得以實現,該RFC建議部署和使用RFC 7217生成穩定地址,并建議不要使用在IPv6地址嵌入鏈路層地址的任何地址生成機制。
語義模糊的接口標識符
RFC 7217 IPv6更新指定了算法來生成IPv6接口標識符(以及IPv6地址),在相同網絡內穩定,但隨著節點從一個網絡移動到另一個網絡而發生變化。該算法可用以下表達式來總結和體現:
IPv6_IID = Hash(Net_Prefix, Net_ID, Net_Iface_ID, Secret_Key)
其中:
Hash():加密安全哈希函數
Net_Prefix:本地路由器發布的IPv6前綴
Net_ID:可選網絡標識符,例如WiFi網絡的服務集標識符
Net_Iface_ID:底層網絡接口的標識符(例如網絡接口名稱)
Secret_Key:秘密值,通常在系統安裝期間作為隨機值初始化,并在重新啟動時保持不變
基本上來說,IPv6接口標識符是通過對多個參數連接計算安全散列來獲得,最常見的是本地路由器(Net_Prefix)和秘密密鑰(Secret_Key)公布的網絡前綴。
只要節點保持在相同網絡,它將維護和配置相同的IPv6地址,這是因為散列函數的所有參數保持不變。另一方面,由于網絡前綴會改變,所以一旦節點連接到不同的網絡,IPv6接口標識符將會改變。同時,如果節點返回到之前連接的網絡,它將配置與之前相同的IPv6地址,因為用于計算該IPv6接口標識符的所有參數都將與原來情況相同。
部署IPv6更新
截至本文發稿時,至少存在以下RFC 7217部署:
Linux kernel v4.0;
NetworkManager v1.2.0-0.3.20151112gitec4d653.fc24;
dhcpcd 6.4.0; 以及
macOS Sierra.
Linux內核部署是第一個RFC 7217部署,因此,也可作為參考部署。然而,Ubuntu以及Fedora等最受歡迎的Linux版本使用NetworkManager應用程序包進行網絡配置而部署依靠內核。自1.2.0-0.3.20151112gitec4d653.fc2版本起,NetworkManager已經部署RFC 7217。隨著主流Linux版本的新版本發布,所以主流版本都應該會支持RFC 7217規定的新算法。Fedora等受歡迎的Linux發行版已經提供默認啟用的新算法。
在很多Linux發行版(例如Raspbian)中,dhcpcd安裝包被用于網絡配置。Dhcpcd自6.4.0版本就已經支持RFC 7217,當前版本的Raspbian已經在默認情況下啟用RFC 7217規定的算法。
最后,主流操作系統macOS Sierra也增加對RFC 7217 IPv6更關心支持,并在默認情況下啟用該新算法。
還有一些最流行的操作系統最新版本也已經支持RFC 7217,Android也將支持RFC 7217。
在筆者撰寫本文時,Microsoft Windows并不支持RFC 7217,但根據Windows中增加的很多其他安全和隱私改進(例如MAC地址隨機化),再加上RFC 8064的共同作者隸屬于微軟的事實,微軟應該會在未來某個時間增加對RFC 7217的支持。