FEAL-8 中的微分軌跡
在本文中,作者描述了針對 FEAL-8 的差分攻擊。他們找到了幾條短微分軌跡,然後通過代數方法將攻擊擴展到密碼的完整 8 輪。
在下圖中,差分軌跡包括零差。這怎麼可能?如果輸入導緻密碼中間某個回合的差異為零,那麼中間密文是否不會在所有未來回合中繼續保持不變?
這些不同的特徵是如何發現的?迭代(小)輪函式並找到輸入的差異機率似乎很容易,但是作者如何才能看到在密碼的中間輪某處導致所需差異的輸入是什麼?
圖中的差值表示進出輪函式的差異,該函式僅對一半狀態起作用。每一輪後都不會顯示兩半狀態的差異——你必須從頂部的“歐米茄”差異和輪函式的輸出差異中推斷出它們。
請注意,進入第一輪的差異是 00 00 02 02x。在 Feistel 密碼中,輪函式的輸入是一半狀態的副本——未被輪函式修改的那一半。所以這意味著在第一輪之後,狀態的一半仍然具有相同的差異(儘管在一輪結束時,一半的狀態與另一半交換)。
現在註意第二輪函式的輸出也是00 00 02 02x。輸出與狀態的一半進行異或運算,這與被複製並用作第一輪輸入的一半相同。由於差異是相同的,並且 xor 是它自己的逆,所以這兩個差異抵消了。所以現在一半的州差為零。另一半仍然有差異 00 80 02 82x。
再次交換兩半,現在差為零的那一半用作輪函式的輸入。但是由於零差的輸入總是產生零差的輸出,因此該圖顯示了機率為 1 的輪函式的輸入和輸出中的零。但是請注意,在整個狀態中仍然存在活動差異,只是在被複製並用作第三輪輸入的一半。
關於你的第二個問題,這些差異是通過仔細檢查輪函式來發現的 - 將其分解為較小的函式(例如 s-box),檢查這些較小函式的差異分佈表,並觀察較小函式的差異如何相互作用整輪函式。為了將其擴展到多輪,攻擊者通常會編制一份最高機率單輪差異的列表,然後嘗試將這些高機率多輪特徵拼接在一起。
對於像 FEAL 這樣的密碼,攻擊者通常會尋找高機率的迭代特徵,這些特徵是跨越幾輪但具有相同初始狀態和最終狀態的差異軌跡(如圖所示)。這種迭代特徵使攻擊者能夠打破許多輪,只需根據需要多次重複該特徵。