OpenSSL的替代者:LibreSSL本月開發進度
英文原文:LibreSSL, OpenSSL Replacement: The First 30 Days
OpenSSL 在數周前爆發 Heartbleed 漏洞之后,OpenBSD 小組發起了 LibreSSL 項目。LibreSSL 的目標是對 OpenSSL 進行全面的清理和重構、提供更安全更穩定的代碼基、把長期遺留的 bug 去除、引入先進的編程實踐并對可移植性進行重新設計。OpenBSD 開發者 Bob Beck 和 OpenBSD 基金會主席(OpenBSD 基金會是非營利組織,總部位于加拿大的艾伯塔)在最近于渥太華召開的 BSDCan 2014 大會上介紹了該項目最近一個月的研發進度。
LibreSSL 的目標是引入“更加明智的”開發模型,即僅針對 OpenBSD 這樣成熟的操作系統進行開發,而不像 OpenSSL 那樣需要支持 Visual C 1.52 這種最原始的C語言編譯器或者其他古老的 OS。LibreSSL 希望避開那堆“由#ifdef 和#ifndef 纏繞在一起的亂麻”,為此,該項目將所有涉及平臺依賴的代碼都封裝到一個“平臺兼容層”,強制所有平臺跟這個兼容層對話。這是學習了 OpenSSH 實現平臺兼容性的思路。
LibreSSL 在開發一個月以來移除了原項目中沒用的代碼和對現在基本沒人用的老操作系統的支持,這包括 Ebcdic、DOS、MacOS Classic(OS X 的前身)、Win16 及其他老舊的 Windows 版本、VMS 等。當然,Heartbleed 相關的代碼也已經被移除。
對于 OpenSSL 中最需要解決的安全問題,Bob Beck 列舉了 LibreSSL 目前已經完成的一些工作:
- 所有 OpenSSL 專有的內存請求方式(malloc、calloc、realloc、snprintf、strlcat 等)都替換為標準庫的請求方式
- 之前的隨機數生成器的種子獲取方式有缺陷,現在改用內核自帶的功能來實現熵生成
- 添加了基于 Brainpool、ChaCha、poly1305 和 ANSSI FRP256v1 算法的幾個新的加密套件
- 移除了對 FIPS 標準的支持——該標準被認為是有害的,并且不利于庫的開發,而且該標準所默認使用的 Dual_EC_DRBG 算法被懷疑為有后門
- 修復了很多報告給 OpenSSL Request Tracker 的 bug,而這些 bug 目前在 OpenSSL 里尚未修復
新項目啟動后的一周內,LibreSSL 研發團隊移除了 OpenSSL 項目中超過 90000 行的C代碼。所有這些密集的重構都在 OpenBSD ports 分支下經過了嚴格的 API 兼容性測試,測試覆蓋的應用數量超過 8000 個。
OpenSSL Heartbleed 漏洞在互聯網上激起了熱烈的討論。很多批判指向了 OpenSSL 項目運轉的方式、API 和源代碼的質量、難以測試、以及糟糕的文檔。
這就是為什么 OpenBSD 小組要啟動 LibreSSL 項目。根據 Bob Beck 的描述,Heartbleed 并非是 OpenSSL 面臨的唯一問題。 上述提到的 malloc 方法一直存在很多問題,如不會釋放內存——當年在 OpenSSL 引入重用空閑內存的 LIFO 回收機制造成了運行時可以從 malloc 獲取之前在內存當中的信息。更糟糕的一點是,OpenSSL 的項目團隊總是將實現新特性的優先級放在修復 bug 之前,很多 bug 在 bug tracker 里面無人理睬,多年都沒有修復。而且,OpenSSL 的代碼自成體系,連 Valgrind 這樣的工具都抓不到 allocator 出現的問題。
LibreSSL 基于 OpenSSL 1.0.1g 的代碼庫做分支, 后續開發將遵循 OpenBSD 項目的安全準則。LibreSSL 的目標是跟 OpenSSL 的 API 完全兼容,目標操作系統為 OpenBSD 5.6 以及其他基于 POSIX 的系統。在 OpenBSD 上運行穩定之后,研發團隊會著手其他平臺的移植工作。
LibreSSL 項目正在募捐,希望在未來數年實現如下目標:
- 有足夠的資金支持幾名開發者完成代碼基主要部分重寫的工作
- 有足夠的資金支持兼容性/移植工作,即跟蹤 ports tree 的相關變更并將變更推送至上游
- 在不影響 OpenBSD、OpenSSH 和其他相關項目研發進度的情況下保持 LibreSSL 項目的開發速度
OpenBSD 基金會已經向 Linux 基金會發送贊助請求,不過 Linux 基金會尚未表示贊助意向。
<span id="shareA4" class="fl">
</span> </div>