2017年3月10日 星期五

開放源始碼和安全性有什麼關係?

誠如密碼學專家 Bruce Schneier(布魯斯・施奈爾)所著《秘密與謊言:如何建構網路安全防衛系統》一書第二十二章【產品測試及驗證】中的描述,他認為公眾開放的密碼學加密方法其安全上的好處優於私人專有的方法,因為唯一可以確認密碼方法之安全性的作法,即是由許多專家投注一段很長的時間評估,而將該方法公諸於世是經濟效益最佳的方法;所以基於相同理由,他認為任何與安全防衛相關的事務都應有公眾的解決方案,這包括採用開放源碼方式發佈軟體,就讓世上所有專家評估、讓時間考驗。

他認為一個優良的安全防衛設計,其設計細節不會有什麼必須隱瞞之處;換句話說,這套安全防衛設計之所以安全,純粹來自於產品本身,以及產品自身可以改變的祕密:如密鑰、密碼、信符…等等。但如果是透過隱匿的方式獲得安全性(security by obscurity):即系統的細節是安全防衛的一環,那麼一旦設計細節公諸於世,它們可能會在極短的時間內被破解。若一個軟體的安全設計相當拙劣,就只能期待設計細節不曝光來得到安全;若系統設計相當優良,即便將相關細節公諸於世,也仍舊安全。

而軟體也是一樣,要在源始程式碼中找到安全防衛上的漏洞,唯一的方法是評估檢驗,但你不可以隨便找人評估,你需要的是安全防衛軟體專家來評估,你需要它們從各種不同角度、經年累月的一再檢驗。雖然聘請這類專家是可行的,但是讓大眾一同動手會更省錢、也更有效率,所以最簡單的方式就是公佈軟體的源始碼

說到這,最常見的反對論點是:公布軟體的源始程式碼只會給怪客們找尋弱點所需之資訊,並且利用這些資訊來作惡。這些人認為,保護源始碼秘而不宣,能夠阻斷攻擊者得到相關資訊。Bruce Schneier 講到這裡說:「除了驚嘆他們的天真之外,我還真不知道該說些什麼」。

畢竟將軟體源始碼公諸於世,並沒有因此增加該軟體的臭蟲與缺陷數目,唯一增加的是一般大眾對它們認識的可能性而已。他提到:「那些把程式碼隱匿不為人知的廠商多半很懶散;而願意將產品源始碼公諸於世的廠商,往往可以因此找到漏洞,所以,他們也就能修補它們。」「秘密的軟體是脆弱的:它就像密碼學一樣。若將源始碼公諸於世,會比隱匿源始碼的措施提供更紮實的安全防衛」。

然而,開放源始碼軟體並不能保證安全,他認為大眾應該把兩件警告銘記在心

首先,僅僅將源始碼公開並不自動等於人們會檢驗它的安全漏洞,並且,當然這也不代表專家們會檢驗它的安全漏洞。他舉例說:「研究員在 MIT 麻省理工開發的 Kerberos 程式碼發表後十年,才在其中找到緩衝器超限的問題」、「另一個開放源始碼的軟體 Mailman,用來管理郵遞清單,有顯著的安全問題存在長達三年之久⋯⋯直至原作者檢查源始碼,才找到問題所在」。畢竟安全防衛專家是一群常為雜事分神、極其忙碌的一群人。他們沒有什麼時間,也沒有意向想檢閱世上所有公布的源始碼。所以,雖然公布源始碼是件好事,但是它無法帶給你安全的保證。

其次,僅僅將源始碼公諸於世,並不自動等於安全問題只要一發現就可以被迅速解決。我們沒有任何理由推論:一個兩年的開放源始碼軟體之安全性,會比一個兩年的專有源碼軟體的漏洞少。如果開放源始碼的軟體已經被專家詳細檢驗過,那麼以上的論調有可能是真的。但若只是因為一段程式碼已經公諸於世多年,並不具任何特別的意義。

Bruce Schneier 總結道:「我相信軟體開放源始碼有潛力可以增進安全防衛能力。但是,軟體並不會因為源始碼公開而自動變得很安全,就像不能因為程式碼不公開,就下斷語認為它不安全一樣」。

最後,Bruce Scheier 提及軟體開發模式也是影響軟體安全性的因素之一,而上述探討只針對源始碼開放與否作分析,沒有涉及到「哪一種開發程序可能在設計上產生安全的軟體」。他認為若採用傳統的專有軟體方式(教堂式開發)或許較能產出高品質、大規模的軟體;所以對於安全防衛而言,最好的作法也許是先以教堂式開發製作出專有授權的軟體;然後,再將它轉為開放源始碼公開讓所有人檢驗、讓時間考驗。

參考資料

書名:《秘密與謊言:如何建構網路安全防衛系統》
作者:Bruce Schneier
譯者:吳蔓玲
出版社:商周出版

關於 Bruce Schneier

Bruce Schneier 個人網頁
Wikipedia 上的 Bruce Shneier 介紹
Bruce Schneier 於 TED 上的分享內容《安全的錯覺》

進階閱讀

開放原始碼比較不安全?看看微軟的中標率吧(冷笑)》,作者洪朝貴

沒有留言:

張貼留言