Encryption

按位異或與整數加法/減法密碼的實用完美安全性

  • August 16, 2018

XOR在理論上已經提供了完美的安全性,但由於要求嚴格,很難在實踐中應用。我在考慮整數格式的簡單加法/減法是否更實用,同時還提供完美的保密性。

前任:

  • “9”是明文,“1”是密鑰。在ASCII/UTF-8中,它們都佔用 1 個字節的空間,因此可以進行異或運算,因此是 8 位。
  • 9 = 00111001
  • 1 = 00110001

首先,我們會像通常那樣做 XOR,所以:

密碼: 00111001 ⊕ 00110001 = 00001000

(顯然輸出將是垃圾密文,在這種情況下是 ASCII 中的“Back Space”鍵)

解密: 00001000 ⊕ 00110001 = 00111001

或者我們將使用加法進行加密,使用減法進行整數格式的解密:

密碼: 9 + 1 = 10

解密: 10 - 1 = 9

正如您所看到的,它與 XOR-ing 一樣具有前向安全性,10 並沒有透露任何關於 9 的資訊,因為密鑰和明文可以是一個巨大的正數和負數,其總和恰好是 10,所以它提供了完美的保密性。

它也更容易使用,您不必轉換為二進制。

但它有 1 個特殊屬性,我認為它使其優於 XOR。看二進制值 10,它是0011000100110000,它有 2 個字節長。

所以使用加法/減法而不是 XOR 也會隱藏和混淆明文的長度,不是嗎?因為如果我們使用整數,我們就不再使用按位運算了。

相反,密鑰可以是任意長度,沒有人可以確定我們是否有 9+1=10 或 1000000000+(-999999990)=10 或任何其他無限數量的組合。它完全混淆了數據的大小,明文大小和密文大小之間沒有相關性。

而且由於它不再是按位運算,它沒有 XOR 的“洩漏”問題,密鑰長度可以是任意大小,甚至不必是真正的隨機*(我想,如果我是,請糾正我wrong)*,任何偽隨機且足夠複雜的整數都可以做到。

所以我認為這使它優於 XOR 和其他按位運算符。

為什麼加密算法中不使用整數加法?您如何看待這種加密方法?是不是比 XOR 更好更實用?

我開始寫一個長答案,但問題中存在相當多的誤解,所以我認為一個列表更適合:

  • 編碼不同於加密。如果您對某些內容進行編碼,您將獲得與使用二進制時一樣多的可能值。將10編碼為00001010or並不重要00110001 00110000
  • 垃圾密文:現代密文是二進制的,並且 - 對於對稱密碼 - 由隨機的值組成。當您嘗試以任何格式查看它時,它看起來像“垃圾”,但這只是因為您試圖賦予隨機位以意義。
  • 通常我們希望能夠加密任何數據,無論它是文本、圖像等。因此二進制數據是在電腦上執行的現代密碼的預設輸入格式。加法的問題是您必須轉換為數字;然而,電腦處理二進制值。甚至加法和乘法都在機器字上,因此是模數 $ 2^{32} $ 或者 $ 2^{64} $ . 只需要一些工作來適應這一點。
  • 您必須使用模組化加法(或減法)來確保加法安全。否則密文值將像鐘形曲線一樣傳播,這會洩漏有關明文的資訊,尤其是當您查看外部值(例如零或密文中的最大值)時。這類似於擲兩個骰子,其中 2 和 12 的頻率遠低於 7;如果你擲出 2,那麼兩個骰子的值都必須為 1。
  • 當以二進制形式查看時,使用模加法,密文中出現較小數字的機會與使用 XOR 相同。加上我們人類會自動從左邊刪除零位。您可以在異或之後對零做同樣的事情。唯一的區別是輸入/輸出是否被視為數字 - 但這是您可以針對兩種情況做出的選擇。
  • 同樣,您也可以在異或之前用零或一位填充小值。這樣,您可以使用更大的密鑰和 XOR 進行加密,就像使用大量和模組化添加一樣。
  • 對於真正的一次性填充 - 這是您嘗試通過 XOR 或模加法完成的算法的名稱 - 密鑰流中的任何值都需要完全隨機。如果不是,那麼您正在處理流密碼。流密碼可以在計算上是安全的,但它們通常不是完全安全的。
  • 一般來說,我們盡量保持密文盡可能緊湊。如果您想避免洩漏有關明文大小的資訊,則可以首先將消息填充為恆定大小。在這種情況下,如果您使用一次性填充,您只會洩漏消息小於該大小的資訊。

所以不,加法並不比 XOR 好。您列出的優勢也可以通過 XOR 實現。二進制明文和密文是一種特性,而不是缺點。

首先,如果您想要混淆純文字的長度,請在加密純文字之前應用填充。

其次,雖然在 OTP 方案中確實可以使用除 XOR 之外的其他二元運算,但在自然數上使用加法(與餘數組中的模加法相反)也會洩漏資訊。正確 OTP的完全保密意味著任何給定的密文都不會透露有關純文字的資訊,除了長度。這是因為,對於任何給定的密文和(可選填充的)相同長度的純文字對,總是有一個密鑰可以將純文字加密成密文。使用您的方案,密文 0 只會與純文字 0 和密鑰 0 的對匹配。密文 1 只會與純文字 0 和密鑰 1 或純文字 1 和密鑰 0 等匹配. 在僅密文攻擊中,攻擊者總是知道明文必須小於或等於密文,這揭示了不平凡的資訊量。

引用自:https://crypto.stackexchange.com/questions/61524