如果輸入的位變化導致每個輸出位有 50% 的機會變化,那麼分組密碼可以被認為是安全的嗎?-> 整數?
分組密碼使用自逆( $ f(f(x)) = x $ ) 操作,然後將應用於明文,並且很可能包含一些可以基於鍵的常量。為了獲得安全性,這些以不同方式解釋輸入的操作相互對齊。此過程使用不同的密鑰重複多輪。在最佳情況下,隨機輸入位於具有隨機循環大小(統一,給定隨機密鑰)的封閉循環內(如果一遍又一遍地應用分組密碼)。
通過四處測試,我注意到這可以通過一些非常簡單的異或、位旋轉和加法操作來實現。(稱為 ARX)
例如:一輪有輸入 $ m $ :
$$ m = XOR(m, R_i) \ m = RotateBit(m,5) \ m = m + K_i $$
$ R_i, K_i $ 是輪的輪鍵 $ i $ .
- 單獨的 XOR 並不安全,因為該操作只是單個位,不會相互影響。
- 添加了位旋轉以增加單個位對每隔一個位的影響。其本身也不安全,因為它僅對單個位產生影響
- 添加作為第二種輸入解釋(作為數字而不是位)添加。在這裡,這些位可以相互影響。
有了這個,我得到了不同周期長度(給定隨機密鑰和輸入)的一些良好(但不完美)的均勻分佈。
問題是安全需要申請多少輪?它需要至少是總位大小,以便每個位都可以由於位旋轉而到達每個其他位置。
這是AES的一些相關執行緒。
但是作為一個更通用的度量(對於自定義分組密碼),是否可以通過輸入中的位變化對輸出的每一位的影響來衡量安全性?
在最佳情況下,每個可能的輸入的每個可能的位變化都應該導致輸出端有 50% 的不同位(每個位不同到相同的數量)。
可以增加輪數,直到達到合適的安全級別。
但是作為一個更通用的度量(對於自定義分組密碼),是否可以通過輸入中的位變化對輸出的每一位的影響來衡量安全性?
微不足道。如果分組密碼的輪函式是線性的,那麼沒有任何輪數會使反轉它變得更加困難。
您也沒有描述您是在談論混淆,擴散還是兩者兼而有之。
混淆定義了密鑰和密文之間的關係:密文的每一位都依賴於密鑰的許多位,因此如果密鑰的任何一位發生變化,密文中大約有 50% 的位會發生變化。
擴散定義了明文和密文之間的關係:密文中的每個比特都依賴於明文的許多比特,因此如果明文的任何比特發生變化,大約 50% 的密文比特都會發生變化。
對於安全來說,兩者都是必要的,但還不夠。當與非線性輪函式結合使用時,您可能會得到一個不錯的分組密碼,但即便如此,資訊也有可能洩漏導致不安全。
此外,如果使用任何給定密鑰對一個塊進行加密,則塊密碼本身最多只能是 IND-CPA 安全(最弱的安全形式)。更多塊被加密意味著任何兩個相同的明文塊將具有相同的密文,這是不可區分性的突破。要獲得 IND-CPA 安全,需要使用 CTR 模式(將其轉換為流密碼)或 CBC 模式(連結密文塊)等操作模式。但即使這樣也不是“安全的”,因為攻擊者可以更改密文並導致受害者解密得到不正確的明文,因此需要經過身份驗證的加密模式才能獲得適當的 IND-CCA3 安全性。這類似於 GCM、SIV、GCM-SIV 或 OCB 模式。即使這樣也有一些警告,因為這種模式需要一個“nonce”(使用一次的數字)來消除(GCM,