乙太網鏈路上 AEAD 的可行方法?
設置很快就是這樣:有兩個自定義交換機(例如,考慮一個 FPGA),兩者都從其面向外部的介面處理 10-100 Gb/s 的流量訂單。這是正常的交通。然後,它們之間就有了聯繫。我想應用 AEAD 來保護此連結,以便竊聽者無法分析流量。限制是這樣的:流量快速流動,顯然沒有太多時間來加密或驗證。
我擁有這兩個交換機,所以預配置證書、對稱密鑰等都是允許的。引導後,我可以在帶內非同步交換密鑰,但不允許帶外交換。
我不是在尋找一個牢不可破的系統,我只是想盡可能地保護流量。
在這種情況下,最好的方法是什麼?到目前為止,我的方法是:我可以在雙方都安裝證書(用於身份驗證),我不知道是否或如何隨著時間的推移更新它們。對於加密,我將用兩邊的對稱密鑰對明文進行異或(我想這是最快的方法)。但是,我消耗密鑰的速度比我生產的快得多。不知何故,我應該拉伸鍵或找到一種非常快速地產生鍵流的方法。在這一點之後,我迷路了。
不要推出自己的加密貨幣
到目前為止,我的方法是:我可以在雙方都安裝證書(用於身份驗證),我不知道是否或如何隨著時間的推移更新它們。
這不提供加密意義上的身份驗證。如果底層加密未經過身份驗證,MITM 攻擊者仍然可以隨意修改網路上的數據。單獨而言,證書只能用於簽署非常小的值,即對稱密鑰的大小。確保數據不會在網路上被篡改需要的不僅僅是證書的存在。例如,您需要簽署一個 HMAC 密鑰以確保消息的完整性。如果這對您來說不是很明顯,那麼您不應該嘗試設計自己的密碼系統!
我將用兩邊的對稱密鑰對明文進行異或(我想這是最快的方法)。
這稱為 XOR 密碼,非常不安全,只需要少量已知明文即可破解(與密鑰大小相同)。當您知道與密鑰大小相同的明文時,您可以簡單地將已知明文與觀察到的密文進行異或,以恢復密鑰本身。更不用說,它具有高度的可塑性並且不提供任何身份驗證,即使它是安全的。
但是,我消耗密鑰的速度比我生產的快得多。不知何故,我應該拉伸鍵或找到一種非常快速地產生鍵流的方法。
您剛剛發明了流密碼。這是一種密碼,它採用單個密鑰並將其擴展為幾乎無限的偽隨機數據流,稱為密鑰流,然後通常通過 XOR 操作將其添加到明文或密文中。原始流密碼(例如 CTR 模式下的 ChaCha20 或 AES)具有延展性且未經身份驗證,因此對於您的目的而言是不安全的。事實上,它的延展性如此之強,以至於切換單個密文位將切換相應的明文位。如果沒有正確實施的身份驗證算法(如 HMAC、GCM 或 Poly1305),就無法檢測或阻止此類篡改。
只需使用 MACsec!
一切都沒有失去!已經有一種解決方案,稱為MACsec (IEEE 802.1ae)。這是乙太網協議的擴展,它允許以低計算成本進行端到端的認證加密。它使用 AES 作為密碼,在 GCM 模式下執行以進行身份驗證。它受到許多交換機、路由器和作業系統的支持,被認為非常安全。
如果您正在為 FPGA 編寫 HDL,您可以為 MACsec 使用預先設計的 IP 核心,例如這個 FPGA 核心。如果您對自己的 FPGA 設計技能有信心或者可以聘請有信心的人,您也可以根據已發布的標準自行實施 MACsec 。
MACsec 的另一個好處是,因為這是一個標準,它可以與其他兼容的交換機一起使用,例如 Cisco 的Catalyst 4500。您將不僅限於將內部定制開關與您自己的 FPGA 一起使用,並且不需要對您自己的協議進行廣泛而昂貴的密碼分析。
任何提及或連結到商業產品不應被解釋為對公司產品的認可。