Random-Number-Generator
CTR 模式下的任何分組密碼都可以用作 CSPRNG 嗎?
幾天來,我一直在自己學習分組密碼、操作模式和 csprngs,有些事情我不確定。
- 假設我們只討論加密安全的分組密碼;CTR 模式下的任何分組密碼都可以用作 CSPRNG 嗎?還是應該使用分組密碼的特定特徵?
- 這樣的 CSPRNG 可以用於生成密鑰材料,還是我必須為此專門使用密鑰生成/派生算法?
CTR 模式下的任何分組密碼都可以用作 CSPRNG 嗎?
正式地說,CTR 模式將PRF(或PRP)轉換為PRG,並且由於 PRP 概念是對分組密碼建模的標準概念,因此在 CTR 模式下使用時,幾乎所有安全分組密碼都應該產生安全 PRG。
不太正式地說 CTR 模式將安全塊密碼轉換為安全流密碼。這意味著您“加密了一個零流”,這應該作為CSPRNG適當安全,因為否則您可能會破壞流密碼。
最後,您還將在實踐中經常看到 CTR 模式作為複雜 CSPRNG 的建構塊,例如CTR_DRBG (PDF)(在其他應用程序中,英特爾的 RdRand使用該模式)。
還是應該使用分組密碼的特定特徵?
如上所述,它的行為應該像 PRP,僅此而已,但是(幾乎?)所有安全分組密碼都這樣做。
這樣的 CSPRNG 可以用於生成密鑰材料,還是我必須為此專門使用密鑰生成/派生算法?
從技術上講,您可以直接使用 CTR 模式來派生密鑰材料。然而,專門的 CSPRNG 結構和KBKDF存在是有原因的。因此,如果您有一個正確播種的 CSPRNG,您可以直接從中派生密鑰,或者如果您基於一些共享密鑰材料(如DH 共享密鑰),您想使用 KBKDF。
這些專門的算法通常允許定制並考慮到高級使用場景。例如,您有一個靜態機密和一個計數器?你可以使用 CTR_DRBG 把它變成一個 CSPRNG!或者你有一個密鑰和一些上下文?您可以使用HKDF導出帶有上下文標籤和上下文資訊的密鑰材料!