Public-Key
如何防止塊或對稱密碼失敗?
我可以通過將不同的技術連結在一起來防止塊或對稱密碼的失敗嗎?如果是這樣,我應該注意哪些實施細節?
某些密碼組合比其他密碼組合更好還是更差?
如果您不信任您的原語,您可以將多種技術組合在一起(儘管這實際上取決於協議):
- 隔離,以盡量減少每個給定實現對環境的副作用,除了那些由您的輸入/輸出介面嚴格定義的副作用。除了容易發現偏差(例如來自加密庫的可疑套接字呼叫)之外,您還有幾類難以檢測的副作用,無論是在協議級別(例如隱蔽通道)還是在實現級別(例如側通道) ,想想 DPA)。每個類都必須通過程式碼審查、輻射分析等具體解決。
- 容錯性,以最大程度地降低被對手植入後門或簡單草率的風險。最直接的安排包括組裝來自多個供應商或來源的多個希望獨立的實現,並對結果進行多數投票。請注意,這種方法在防止外部故障攻擊方面也很常見。
- 秘密拆分,最大程度降低後門風險。您再次安排來自不同供應商的並行原語實現,但每個都處理由秘密共享方案(例如Shamir’s)生成的不同片段數據。所有輸出都被傳輸,而不是像容錯方案中那樣立即組合。當然,秘密分裂和重組成為關鍵點。
最後,在涉及隨機性的地方,您必須清楚地將隨機生成邏輯與確定性邏輯分開。您顯然不能對 RNG 或隨機協議進行多數投票。相反,您應該在隔離的 RNG 上應用容錯技術,通過以熵保留的方式組合各種實現的輸出(通常,一個簡單的 XOR 就可以了)。