Algorithm-Design
我可以在流密碼中用 ADD 安全地替換 XOR 嗎?
在流密碼中,明文的字節通常與密鑰流進行異或以產生密文。如果添加恰好比特定係統上的 XORing 快,那麼添加字節(有溢出)會有什麼問題嗎?
在軟體平台上,按字節加法不會比按位異或快。但是,它可能會慢一點,對於生成流的程序來說,這也可以忽略不計(而且,就此而言,就記憶體頻寬而言,這也可能可以忽略不計)。
在硬體平台(FPGA、專用 ASIC)上,加法比 XOR 慢,因為需要傳播進位。XOR 是一個簡單的 XOR 門層,因此它具有最小的深度和最小的面積;加法需要更多的門(因此需要更多的面積)並進行傳播 $ n $ 位字至少需要一個深度電路 $ \log n $ ,因此添加也會導致更多延遲。成本可能僅限於字節,但它永遠不會像 XOR 那樣有效。
加法比 XORing 更快的唯一一種架構是提供加法/減法原語但不提供 XOR 或效率不高的架構。這可能是某些 DSP 的情況,或者可能是某些 Javascript 解釋器的情況(在 Javascript 中,數字是偽裝得很薄的 IEEE 754 浮點值,並且按位運算需要與整數類型進行轉換)。我仍然認為對於大多數平台(包括最近的支持 JIT 的 Javascript 解釋器),XOR 不會比字節加法慢。
至於安全性,按字節加法與 XOR 一樣好。實際上,XOR 是按位加法(XOR 是 $ \mathbb{Z}_2 $ ).