Encryption

滾動你自己的加密貨幣

  • May 2, 2018

我知道這通常是不受歡迎的,但是假設您要推出自己的加密密碼(完全由您自己或與一小群朋友一起,沒有同行評審的可能),您可以做些什麼來使您的自定義算法像可能(或者更確切地說,將使用它的危險降到最低)?同樣,對於像散列函式這樣的東西,你會怎麼做才能使其發生一些微不足道的碰撞或原像攻擊的機率盡可能低?

我知道沒有辦法處理像 AES 這樣的算法的安全性,而且我沒有計劃將自定義算法用於任何重要的事情,但我認為考慮一些最佳實踐對於滾動你自己的算法將是有益的密碼系統,如果你這樣做的話。

你能做些什麼來讓你的自定義算法盡可能安全

盡量重用現有的算法和研究。

例如,假設您正在設計一個分組密碼(出於某種原因),並且您需要一些非線性源。一些研究人員已經費盡心思尋找具有最佳密碼分析統計和最低實施成本的 s-box。線性層也有類似的結果。如果您將這些作品的結果納入您的設計,您可以放心,它們可能不會成為您設計中最薄弱的環節。

在更高的層次上,您還可以簡單地重新利用現有的原語,例如ChaCha,並從中創建一個散列函式(例如BLAKE)。或者,您可以將現有雜湊函式重新用於(低效)流密碼,就像許多其他人已經做過/嘗試做的那樣

您(或有相同問題的人)可能會說:

“但是等等,如果我做那些事情,那我就不是真的想出我自己的東西了!”

我認為可以肯定地說:對稱密碼學在這一點上幾乎是一個已解決的問題。*

如果你願意,你可以玩弄它,但不要指望想出任何尚未完成的(好)。

關於“安全”的說明

您需要先定義您的威脅模型,然後才能得出關於安全性的結論是/不夠好。

如果您的唯一目標是對您的祖父母保密您的消息,那麼您可能會採用質量相當低的設計(除非您的祖父恰好是 Adi Shamir 或類似的人)。

如果您的目標是保護您的消息免受國家級行為者的影響,他們的預算為數十億美元,數百(或數千)名密碼學家和數學家任由他們支配,以及優秀的老式暴徒,那麼您可能應該三思而後行關於您對設計的期望。

  • 如果這是您的威脅模型,那麼您需要真正堅持現有的和久經考驗的結構。設計中的“糟糕”可能會讓您或您的一位朋友/使用者付出高昂的代價。

筆記

安全設計和安全實現不是一回事。提出一個沒有被破壞的設計只是成功的一半——你還需要一種無法利用的方式來實現設計,這是一個不平凡的主題。僅僅知道如何程式並不意味著您可以創建算法的安全實現。

最後

如果您閱讀了所有這些並且仍然有興趣這樣做,請記住一件事:

  • 不要宣傳您的建築供其他人使用(除了您的朋友之外,您當然已經告知這是您自己的家庭軋製建築,並且可能會在沒有警告的情況下立即損壞……對嗎?)。

如果您建立一個網站來宣傳您的算法的優點,那麼唯一會使用您的結構的人就是那些不了解更多的人。這將無緣無故地利用人們的無知而犧牲他們的安全。如果你在現實生活中而不是網路空間中做了類似的事情,你可能會進監獄。

*相信我的話,我只是一個喜歡密碼學的人。

如果不參考為什麼不鼓勵編寫自己的加密?. 但是您似乎知道這些限制。這裡有幾位資深貢獻者自己推出,但相應地,他們在適當性和威脅模型評估方面具有經驗。不過,我可以想到三個可以實現非常強大的安全性的範例。

  1. 您自己的寬分組密碼。有一個通用 Feistel 網路的概念,它可以是任意數量的辮子。如果您使用標準 AES,則可以按照公認的加密原則廣泛使用它。您需要確定可接受的回合數。3 - 4 適用於典型的兩辮 Feistel 網路。我還沒有設法從我看過的論文中確定所需的數量,但你可以更徹底地研究這個並採取保守的方法。如果你有時間的話,就賺幾百吧。您還必須開發某種形式的密鑰調度,但使用安全原語會使這變得更簡單。8 AES’ 將創建一個 1024 位寬的密碼,表面上是安全的。所有的分析都已經存在。
  2. 時空難的密鑰導出函式。再次建立在一個安全的散列函式之上,找到一個不可並行的構造只是一個程式挑戰。10 周和/或 10 GB 應該是合理的。只需使用足夠的數組、列表和輪次。
  3. 基於雜湊的隨機性提取器。不是一個嚴格的加密結構,但在這個論壇的主題上。由於反轉 TRNG 的提取器功能沒有任何好處,因此您需要開發的只是雪崩效應。無論如何,鴿子洞原理都有幫助。這樣的構造可以使用隨機測試工具自動測試,不需要密碼分析。

如果您希望直接與 SHA 或 AES 之類的東西並行,那麼您將有很長的路要走。可以肯定地說,由於第一個連結中的原因,幾乎所有陸地人都不可能取代它們。

引用自:https://crypto.stackexchange.com/questions/58876