QUIC-LB: Generating Routable QUIC Connection IDs摘要
https://quicwg.org/load-balancers/draft-ietf-quic-load-balancers.html
這是一個(gè)互聯(lián)網(wǎng)草案,描述了一種用于生成可路由 QUIC 連接 ID 的協(xié)議,以便負(fù)載均衡器可以正確地路由具有遷移地址的數(shù)據(jù)包。
QUIC 地址遷移允許客戶端在保持連接狀態(tài)的同時(shí)更改其 IP 地址。為了減少觀察者鏈接兩個(gè) IP 地址的能力,客戶端和服務(wù)器在通過不同的客戶端地址進(jìn)行通信時(shí)使用新的連接 ID。這給通過 IP 地址和端口 4 元組路由數(shù)據(jù)包的傳統(tǒng)“第 4 層”負(fù)載平衡器帶來了問題。
該規(guī)范提供了一種在服務(wù)器連接 ID 中安全編碼路由信息的標(biāo)準(zhǔn)化方法,以便正確配置的負(fù)載平衡器可以正確路由具有遷移地址的數(shù)據(jù)包。由于它提出了一種結(jié)構(gòu)化的連接 ID 格式,它還提供了一種連接 ID 自編碼其長度的方法,以幫助一些硬件卸載。
該規(guī)范定義了幾種算法,用于在給定一些共享參數(shù)的連接 ID 中對(duì)服務(wù)器映射進(jìn)行編碼。映射通常只能被具有參數(shù)的觀察者發(fā)現(xiàn),盡可能地保持不可鏈接性。
該規(guī)范還描述了一些可選的功能,例如配置輪換、無狀態(tài)重試、加密卸載等,這些功能需要負(fù)載平衡器、服務(wù)器和其他可信中介之間的合作。
該文檔是一個(gè)互聯(lián)網(wǎng)草案,描述了一種用于生成可路由 QUIC 連接 ID 的協(xié)議,以便負(fù)載均衡器可以正確地路由具有遷移地址的數(shù)據(jù)包。
QUIC 地址遷移允許客戶端在保持連接狀態(tài)的同時(shí)更改其 IP 地址。為了減少觀察者鏈接兩個(gè) IP 地址的能力,客戶端和服務(wù)器在通過不同的客戶端地址進(jìn)行通信時(shí)使用新的連接 ID。這給通過 IP 地址和端口 4 元組路由數(shù)據(jù)包的傳統(tǒng)“第 4 層”負(fù)載平衡器帶來了問題。
該文檔提供了一種在服務(wù)器連接 ID 中安全編碼路由信息的標(biāo)準(zhǔn)化方法,以便正確配置的負(fù)載平衡器可以正確路由具有遷移地址的數(shù)據(jù)包。由于它提出了一種結(jié)構(gòu)化的連接 ID 格式,它還提供了一種連接 ID 自編碼其長度的方法,以幫助一些硬件卸載。
該文檔定義了幾種算法,用于在給定一些共享參數(shù)的連接 ID 中對(duì)服務(wù)器映射進(jìn)行編碼。映射通常只能被具有參數(shù)的觀察者發(fā)現(xiàn),盡可能地保持不可鏈接性。
該文檔還描述了一些可選的功能,例如配置輪換、無狀態(tài)重試、加密卸載等,這些功能需要負(fù)載平衡器、服務(wù)器和其他可信中介之間的合作。
配置輪換是一種機(jī)制,用于在負(fù)載平衡器和服務(wù)器之間分發(fā)不同的配置參數(shù),以便在不同的階段使用不同的算法或參數(shù)。配置輪換使用連接 ID 的前兩位進(jìn)行編碼。
無狀態(tài)重試是一種機(jī)制,用于將 QUIC 的無狀態(tài)重試功能卸載給負(fù)載平衡器,以應(yīng)對(duì)拒絕服務(wù)攻擊。無狀態(tài)重試使用特殊的連接 ID 格式和令牌來實(shí)現(xiàn)。
加密卸載是一種機(jī)制,用于將 QUIC 的加密功能卸載給硬件輔助或其他中介。加密卸載使用自我描述長度字段來確定連接 ID 的長度,并使用特殊的連接 ID 格式來實(shí)現(xiàn)。
簡單哈希算法是一種算法,用于在連接 ID 中對(duì)服務(wù)器池中的服務(wù)器進(jìn)行編碼。簡單哈希算法使用一個(gè)哈希函數(shù)和一個(gè)配置密鑰來生成一個(gè)哈希值,并將其截?cái)酁樗璧拈L度。
平面哈希算法是一種算法,用于在連接 ID 中對(duì)服務(wù)器池中的服務(wù)器進(jìn)行編碼。平面哈希算法使用一個(gè)哈希函數(shù)和一個(gè)配置密鑰來生成一個(gè)哈希值,并將其與一個(gè)隨機(jī)數(shù)進(jìn)行異或操作,以生成一個(gè)偽隨機(jī)數(shù)。
塊哈希算法是一種算法,用于在連接 ID 中對(duì)服務(wù)器池中的服務(wù)器進(jìn)行編碼。塊哈希算法使用一個(gè)哈希函數(shù)和一個(gè)配置密鑰來生成一個(gè)哈希值,并將其分成多個(gè)塊,并根據(jù)每個(gè)塊的值選擇一個(gè)隨機(jī)數(shù)表中的一個(gè)隨機(jī)數(shù)。
塊密碼算法是一種算法,用于在連接 ID 中對(duì)服務(wù)器池中的服務(wù)器進(jìn)行編碼。
該文檔是一個(gè)互聯(lián)網(wǎng)草案,描述了一種用于生成可路由 QUIC 連接 ID 的協(xié)議,以便負(fù)載均衡器可以正確地路由具有遷移地址的數(shù)據(jù)包。該文檔的目標(biāo)是提供一種標(biāo)準(zhǔn)化的方法,使得負(fù)載均衡器可以在不影響 QUIC 的安全性和隱私性的前提下,實(shí)現(xiàn)對(duì) QUIC 流量的有效分發(fā)。
QUIC 地址遷移允許客戶端在保持連接狀態(tài)的同時(shí)更改其 IP 地址。為了減少觀察者鏈接兩個(gè) IP 地址的能力,客戶端和服務(wù)器在通過不同的客戶端地址進(jìn)行通信時(shí)使用新的連接 ID。這給通過 IP 地址和端口 4 元組路由數(shù)據(jù)包的傳統(tǒng)“第 4 層”負(fù)載平衡器帶來了問題,因?yàn)樗鼈儫o法識(shí)別新的連接 ID,并且可能將數(shù)據(jù)包發(fā)送到錯(cuò)誤的服務(wù)器。
該文檔提供了一種在服務(wù)器連接 ID 中安全編碼路由信息的標(biāo)準(zhǔn)化方法,以便正確配置的負(fù)載平衡器可以正確路由具有遷移地址的數(shù)據(jù)包。該方法基于以下假設(shè):負(fù)載均衡器可以訪問連接 ID 的一部分或全部;負(fù)載均衡器可以與服務(wù)器之間共享一些配置參數(shù);負(fù)載均衡器可以使用一些算法來從連接 ID 中解析出服務(wù)器映射。
該文檔提出了一種結(jié)構(gòu)化的連接 ID 格式,它由三個(gè)部分組成:配置 ID、服務(wù)器 ID 和隨機(jī)位。配置 ID 是一個(gè)固定長度的字段,用于標(biāo)識(shí)負(fù)載均衡器和服務(wù)器之間協(xié)商的配置參數(shù);服務(wù)器 ID 是一個(gè)可變長度的字段,用于編碼服務(wù)器池中的服務(wù)器;隨機(jī)位是一個(gè)可變長度的字段,用于增加連接 ID 的熵,并防止鏈接性分析。
該文檔還提供了一種連接 ID 自編碼其長度的方法,以幫助一些硬件卸載。該方法使用自我描述長度字段(Self-Delimiting Length Field, SDF)來表示連接 ID 的長度。SDF 是一個(gè)可變長度的字段,其第一個(gè)字節(jié)的高兩位表示 SDF 的長度(1、2、3 或 4 字節(jié)),其余位表示連接 ID 的長度(1 到 255 字節(jié))。
該文檔定義了幾種算法,用于在給定一些共享參數(shù)的連接 ID 中對(duì)服務(wù)器池中的服務(wù)器進(jìn)行編碼。這些算法分為兩類:哈希算法和密碼算法。哈希算法使用一個(gè)哈希函數(shù)和一個(gè)配置密鑰來生成一個(gè)哈希值,并根據(jù)不同的方法將其映射到服務(wù)器 ID 上;密碼算法使用一個(gè)密碼函數(shù)和一個(gè)配置密鑰來加密或解密服務(wù)器 ID。
哈希算法有四種:簡單哈希算法、平面哈希算法、塊哈希算法和鍵控哈希算法。
塊哈希算法使用一個(gè)哈希函數(shù)和一個(gè)配置密鑰來生成一個(gè)哈希值,并將其分成多個(gè)塊,并根據(jù)每個(gè)塊的值選擇一個(gè)隨機(jī)數(shù)表中的一個(gè)隨機(jī)數(shù)。隨機(jī)數(shù)表由負(fù)載均衡器和服務(wù)器之間共享,每個(gè)表有一個(gè)唯一的 ID。
鍵控哈希算法使用一個(gè)哈希函數(shù)和一個(gè)配置密鑰來生成一個(gè)哈希值,并將其與一個(gè)隨機(jī)數(shù)進(jìn)行異或操作,以生成一個(gè)偽隨機(jī)數(shù)。隨機(jī)數(shù)由負(fù)載均衡器和服務(wù)器之間共享,每個(gè)隨機(jī)數(shù)有一個(gè)唯一的 ID。
密碼算法有兩種:塊密碼算法和流密碼算法。塊密碼算法使用一個(gè)塊密碼函數(shù)和一個(gè)配置密鑰來加密或解密服務(wù)器 ID;流密碼算法使用一個(gè)流密碼函數(shù)和一個(gè)配置密鑰來加密或解密服務(wù)器 ID。
塊密碼算法使用 AES-ECB 模式作為塊密碼函數(shù),它將服務(wù)器 ID 分成 16 字節(jié)的塊,并對(duì)每個(gè)塊進(jìn)行加密或解密。如果服務(wù)器 ID 的長度不是 16 的倍數(shù),它會(huì)在末尾填充隨機(jī)位。
流密碼算法使用 AES-CTR 模式作為流密碼函數(shù),它將服務(wù)器 ID 作為整體進(jìn)行加密或解密。它使用連接 ID 的前 8 字節(jié)作為計(jì)數(shù)器的初始值,并在每次加密或解密時(shí)遞增計(jì)數(shù)器。
配置輪換是一種機(jī)制,用于在負(fù)載均衡器和服務(wù)器之間分發(fā)不同的配置參數(shù),以便在不同的階段使用不同的算法或參數(shù)。配置輪換使用連接 ID 的前兩位進(jìn)行編碼,表示當(dāng)前使用的配置參數(shù)的索引。
配置輪換有兩種模式:快速模式和慢速模式??焖倌J绞且环N簡單的方式,它在負(fù)載均衡器和服務(wù)器之間廣播新的配置參數(shù),并立即生效;慢速模式是一種更安全的方式,它在負(fù)載均衡器和服務(wù)器之間交換新的配置參數(shù),并在一定時(shí)間后生效。
配置輪換需要負(fù)載均衡器和服務(wù)器之間有一種可靠的通信方式,以傳輸新的配置參數(shù)。該文檔定義了一種基于 QUIC 的通信方式,稱為 QUIC-LB 控制協(xié)議。該協(xié)議使用特殊的連接 ID 格式和數(shù)據(jù)幀格式來實(shí)現(xiàn)。
QUIC-LB 控制協(xié)議使用連接 ID 的第三位作為標(biāo)志位,表示該連接是否用于控制協(xié)議。如果該位為 1,則表示該連接用于控制協(xié)議;如果該位為 0,則表示該連接用于普通 QUIC 流量。
QUIC-LB 控制協(xié)議定義了兩種數(shù)據(jù)幀:QUIC_LB_CONFIG 和 QUIC_LB_RETRY_TOKENS。QUIC_LB_CONFIG 幀用于傳輸新的配置參數(shù);QUIC_LB_RETRY_TOKENS 幀用于傳輸無狀態(tài)重試所需的令牌。
無狀態(tài)重試是一種機(jī)制,用于將 QUIC 的無狀態(tài)重試功能卸載給負(fù)載平衡器,以應(yīng)對(duì)拒絕服務(wù)攻擊。