Encryption
為什麼要使用複雜的加密算法?
我最近對密碼學感興趣,所以我查了一些東西。
我想,當有更簡單的方法時,為什麼還要使用 AES 或 DES 或任何其他復雜的方法來加密數據,例如生成隨機(偽隨機)比特流,並將其與數據或秘密消息進行異或?關鍵是,如果你有一個足夠隨機的比特流,你可以對數據進行異或。
當然,你是唯一會知道流的人。
那麼,如果你有這些更簡單、更簡單的做事方式,為什麼還要使用各種加密呢?我是密碼學的新手,所以這個問題可能聽起來有點幼稚。
由於多種原因,我們使用比 XOR 更複雜的加密算法和隨機或偽隨機密鑰流:
- 為了在對稱加密中得到一個簡短的密鑰。與真正的隨機流(一次性密碼)進行異或需要儲存或/和傳輸與數據大小相同的密鑰流以進行加密,這是完全不切實際的。用偽隨機流(如問題中所述)替換 keystram 可以解決密鑰大小問題,但請參見下文。
- 為了建構加密安全的偽隨機數生成器,然後按照問題中的建議使用。PRNG 中的一個弱點可能會成為使用其密鑰流的加密方案的一個弱點,特別是如果這是通過 XOR 實現的。我們知道幾種將安全分組密碼轉換為 CSPRNG 的安全方法,這些方法相當有效,並且(因此)很受歡迎。
- 為了直接訪問加密數據。想像一下問題中提出的加密儲存的大型電影。為了在中間開始查看它,我們必須從文件的開頭執行偽隨機生成器。這可以通過在大多數常見模式下使用分組密碼(例如 AES)進行加密來解決,包括 CTR/CBC/OFB/CFB。例如,AES-CTR 與問題一樣,通過加密計數器獲得偽隨機流(從通常儲存在文件開頭的初始值開始),因此我們可以通過添加IV 和(適當縮放的)文件索引,並使用 AES 從那裡開始加密計數器值,產生密鑰流,允許從所需點開始解密。
- 為了還獲得數據完整性和來源的保證,這通常至少與數據機密性一樣需要。即使我們假設一個大的秘密密鑰流,我們也需要比密鑰流的 XOR 稍微複雜的東西(例如通用散列),以確保對手不會弄亂數據(例如,將“支付100美元”更改為“支付900美元”)。
- 為了獲得**非對稱加密**,這就是在加密一側不需要任何秘密(除了要加密的數據)的情況下進行加密的能力。
其他答案很好,但我想指出現代密碼學的一個有趣特徵。你問的問題:
我想,當有更簡單的方法時,為什麼還要使用 AES 或 DES 或任何其他復雜的方法來加密數據,例如生成隨機(偽隨機)比特流,並將其與數據或秘密消息進行異或?
事實上,許多現代加密方案正是這樣做的。任何計數器模式下的ChaCha20 和AES(CTR 和 GCM 都會想到)實際上生成一個偽隨機比特流(通常稱為密鑰流)並將其與輸入數據進行異或以對其進行加密。
如您所見,正如保羅的回答正確指出的那樣,這種觀察實際上並沒有使任何事情變得特別簡單。我們剛剛改變了問題:問題不是“如何加密數據”,而是“如何生成好的偽隨機位”。事實證明,從相對少量的關鍵材料中做到這一點從根本上來說是困難的。