建構自己的低效但安全的密碼很難嗎?
每個人都說你永遠不應該建立自己的密碼系統。這樣做很難,你知道它安全的唯一方法是它是否經得起嚴格的審查。然而,如果您願意在密鑰大小、循環 cpu 時間、記憶體等方面做得太過火,那麼即使是密碼新手也很難建構安全的東西。特別是如果使用一個很好理解的基本結構(例如 feistal 網路)。
如果您正在基於現有研究建構一些東西,那麼是的,建構這樣一個系統不會具有挑戰性。作為一個非常基本的範例,如果您具有良好的程式背景並假設您正確遵循算法的規定(例如,避免新消息的重複鍵,好RNG 等),您的系統將被證明是安全的。
但是,如果您尋求設計和開發新的加密方案,您可能會遇到困難。從理論開發和安全證明一直到方案的實際實施,您可能會遇到多層問題。也就是說,您必須首先設計一種可以以數學方式證明是安全的加密算法。其次,根據您設計的算法的複雜性,您必須格外小心避免程式碼中的錯誤,這些錯誤可能會讓有動機的攻擊者破壞您的加密系統。
由於這些原因,非常鼓勵此類算法是開放的:它允許更多的眼睛去尋找理論和實踐中的缺陷。
一些資源來擴展你的研究:
像 AES 這樣被廣泛接受的密碼代表了多種因素的最佳平衡。它們提供所需的安全級別,同時提供良好的性能。有一些高質量的實現可以避免側通道洩漏。他們被足夠信任,協議設計者將包括他們。
如果你正在建立自己的,你必須首先接受你不會佔據同樣的最佳位置。由於密碼最基本的屬性是提供安全性,因此您將在其他方面做出犧牲:您將擁有更大的密鑰,並且您將擁有更多輪次,並希望這可以彌補每輪潛在的較低安全性。Feistal 結構有 2 個您需要設計的主要組件:輪函式和關鍵時間表。如果你知道輪次函式的要求,我想你應該能想出一些不可怕的東西,大量的輪次將在很大程度上平衡任何缺陷。但是,關鍵時間表很關鍵,因為您將進行大量回合。這更難做對。
熟悉現代設計哲學的業餘愛好者有很好的機會。新手可能做不到,也有高估自己的能力,沒有彌補潛在弱點的問題。