Encryption

面向字的密碼和麵向字節的密碼有什麼區別?

  • April 19, 2017

我目前正在學習 RC4 密碼及其改進版本Spritz

Spritz的論文說

我們在這裡不考慮其他流密碼提議,並期望對於許多應用程序而言,其他面向字的架構可能是比面向字節的 RC4/Spritz 風格更好的選擇

現在,我不太明白:

  • 面向字的和麵向字節的密碼/算法有什麼區別?
  • 何時應使用面向字或面向字節的密碼,以及
  • 每個的優點/缺點是什麼?

我發現一些論文介紹了面向字節或面向字的密碼,但沒有詳細說明其背後的想法是什麼。令我驚訝的是,Google搜尋“面向字節的字節”並檢查有關電腦體系結構/CPU 的幾個維基百科頁面並沒有真正對我產生有用的結果。

據我了解,面向字和麵向字節之間的唯一區別是字長取決於所使用的處理器,例如,可能是 32 位或 64 位長。

面向字的密碼的想法是它對硬體使用本地操作,處理字而不是位,從而提高速度,但顯然這使得設計依賴於技術,這可能並不總是最好的方法。混合加法模組 $ 2^{16} $ 和 $ GF(2)^{16} $ 和乘法模式 $ 2^{16}+1 $ 分析起來可能很複雜。因此,面向字的操作具有復雜的代數表示,這對設計者來說可能是一個優點,但是對此類操作的可靠分析也會阻礙設計者。

既然您問的是基礎知識,那麼讓我們從基礎知識開始:

  • 字節 = 8 位
  • 字 = 16 位
  • 雙字 = 32 位

這來自程式語言,這更多是關於實現而不是設計本身。

也許比面向字節更好的術語可能是字節優化的。這意味著該算法是為在一個週期內可以處理指定數量的數據的處理器上實現而設計的。

讓我們從兩個對立面來看:8 位微處理器和現代 64 位桌面處理器。一個甚至可能沒有乘法指令,第二個可以在一個週期內將兩個 64 位數字相乘。現在,如果您的算法只使用 8 位加法,您將使用 8 位處理器來完成它,但是 64 位處理器會浪費它在那個循環中可以做的大部分事情!然而,這並不意味著 8 位處理器不能執行 16 位加法。這可以做到,但需要一個以上的周期才能完成。

因此,面向字節的算法是一種嘗試使用 8 位大小並對其進行洗牌的算法。然而,面向 Qword 的算法將主要對 64 位大小的數據進行操作。這為更強大的處理器提供了加速,但可能某些操作在 8 位處理器上可能會非常慢(例如,乘法需要 4 倍的乘法才能實現 2 倍小的數據操作)。

現代智慧是使用更大的塊而不是更小的塊,但使用可以在具有較小數據的硬體上輕鬆執行的簡單指令。我建議在這件事上研究 Chacha20 的設計。它經過優化以使用 128 位大的塊(現代處理器甚至可以使用 256 位值進行某些計算,使用 SSE 和 AVX,Chacha 在設計時考慮了 SSE),但僅使用 3 條指令:加法、異或和迴轉。所有這些都可以在較小的處理器上很好地模擬,因此這些處理器的性能並沒有太大的損失,但是快速處理器會發光。這使得 Chacha20 在強大的處理器上取得了非常好的成績,但在弱微處理器上保留了它的大部分潛力。

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