以區塊鏈為例,看看開源加密與閉源加密哪個更安全
根據一般的經驗,開源加密的安全性要低於閉源加密,但事實上確實如此嗎?
根據Linus's Law,開源軟體(OSS)比閉源軟體(CSS)具有更少的漏洞。由於更多的人可以訪問OSS及其程式碼,因此,更多的人會使用該軟體,閱讀其原始碼,發現其中的漏洞,並報告此類漏洞。這篇文章是在加密漏洞的背景下討論的,加密漏洞是加密元件中的軟體或邏輯漏洞。
注:Linus's Law,是1999年 Eric Steven Raymond在他出版的討論軟體工程方法的著名文集《大教堂和市集》中描述的一個觀點:given enough eyeballs, all bugs are shallow。只要有足夠多的眼睛,就可讓所有問題浮現。更正式的說是:只要有足夠的單元測試員及共同開發者,所有問題都會在很短時間內被發現,而且能夠很容易被解決。
我想用我最近ofollow,noindex">講過 的區塊鏈中的漏洞(通常是加密漏洞)的例子,根據它們是如何被發現的,將加密漏洞分為四類。這些想法主要基於我十年前開始審查加密軟體的經驗,適用於各種專案,包括科技初創企業、大型企業、政府組織和區塊鏈公司。
·使用漏洞:這些漏洞是你可以在不閱讀程式碼的情況下,使用應用程式找到的漏洞。例如,良性SHA-512越界讀取 。對於這種型別的漏洞,OSS的安全性可能要差一些。在CSS中,我沒有注意到那些已經廣泛使用的應用程式和下載量很少的應用程式之間的安全性有什麼重大差異,這表明存在大量的使用漏洞。
· 原語漏洞:這些漏洞是由加密原語或協議的漏洞而引發的。通常情況下,閱讀文件就足夠了,甚至不需要深入研究程式碼。原語漏洞在十年前並不罕見,但今天每個人都能上網,瞭解要避免的原語。最近的一個例子是有人公開宣稱 用IOTA的雜湊演算法可以產生衝突交易,可以識別雜湊值相同的2個金鑰,攻擊者有機會進行衝突交易的攻擊。但根據我的經驗,近年來OSS往往具有較少的原語漏洞,原因是CSS有時依賴於其他或遺留元件,因此無法完全選擇所有原語。
· 濫用漏洞:這種情況是使用原語是正確的,但使用方式不安全。例如,Lisk使用Ed25519簽名和安全雜湊函式來生成過短的地址 。其他常見的漏洞包括具有易碰撞的隨機數流加密(Stream cipher),或者PBKDF2迭代次數不足。這些漏洞最常見於程式碼審查中,並且相對容易找到。就濫用漏洞來說,我不認為我在CSS中看到的每行程式碼漏洞比OSS中的程式碼更多。
Hard bug:為了找到這樣的漏洞,你通常需要了解複雜的協議或邏輯,並且在數學或程式語言內部等領域具有特定的高階技能。例如,這篇文章 中討論的libzerocoin漏洞對於單純的程式碼審閱者來說並不是很容易發現的。不過這些漏洞更多會被有經驗的人找到。
也許開源加密與閉源加密的不同之處就在於,閉源加密漏洞往往比開源加密漏洞更難找到,同時這兩種加密情況下的漏洞利用都不那麼複雜,例如,你很少需要編寫複雜的shellcode和chain漏洞以便利用加密漏洞。但是,某些加密漏洞則需要利用強大的計算能力(例如ROCA或SHA-1碰撞)。