OpenSSL公開項目路線圖
幾個月前,OpenSSL 的“Heartbleed”安全漏洞波及整個互聯網,令人怵目驚心。事后,公眾開始關注 OpenSSL 項目并給予資金援助。目前 OpenSSL 項目發展遲緩,并且存在很多急需解決的問題。近日,OpenSSL 官方網站公布了 OpenSSL 項目的路線圖,旨在通過詳細的項目計劃來解決目前 OpenSSL 存在的問題。
OpenSSL 是目前移動互聯網上應用最廣泛的安全傳輸方法(基于 SSL 即安全套接層協議)。它為網絡通信提供安全及數據完整性的一種安全協議,囊括了主要的密碼算法、常用的密鑰和證書封裝管理功能以及 SSL 協議,并提供了豐富的應用程序供測試或其它目的使用。
官方首先總結了 OpenSSL 項目目前存在的一些問題:
-
未解決的 Bug
在 RT(Bug 追蹤系統)中有很多的 Bug 未得到解決,并且其中一部分已經存在了很多年。另外有小部分 Bug 雖然已經解決,但未更新到系統中。 -
不完善/錯誤的文檔
OpenSSL 的文檔比較亂,有的部分文檔不完整或者有錯誤,有的部分甚至都沒有文檔。 -
復雜的庫
不管是從維護的角度還是從用戶的角度,OpenSSL 庫和程序都很復雜。公開的 API 中包含了很多內部功能。之前代碼被移植到了很多平臺,但是現在很多平臺已經不在支持范圍之內,所以有些代碼是可以簡化的。另外對 FIPS 的支持更復雜。復雜的代碼不利于維護,并且也不易于定位漏洞代碼。目前的內存管理部分代碼已經是問題和漏洞的多發地了。 -
不一致的編碼風格
過去的幾年里有不少的開發者參與了 OpenSSL 項目的開發,這使得 OpenSSL 有多種代碼風格,混亂的代碼讓維護變得更加困難。 -
缺少代碼審查
沒有也不重視代碼審查。 -
沒有清晰的發布計劃
OpenSSL 的新特性發布毫無規律,并且沒有相關計劃。用戶根本不知道新版本的規劃以及什么時候可以使用新的特性、什么時候會結束對某個版本的支持。OpenSSL 團隊目前仍維護著很多的發布版本,這也耗費了較多的開發精力。 -
沒有清晰的平臺支持計劃
OpenSSL 支持很多平臺,對每一個平臺的支持都會對應一個“ifdef”條件語句,這種方式有很多問題: - 代碼混亂且很難維護
- 代碼依然對一些不被大規模使用的遺留平臺提供支持
- 實際上開發團隊并沒有處理如此多的平臺,代碼庫的支持和測試僅僅只有幾個平臺,通常是 Linux, FreeBSD 和 Windows。
-
沒有安全的發布策略
發布時沒有通知對此感興趣的組織和安全專家。
OpenSSL 團隊已經意識到目前項目存在的問題,接下來將重點解決這些問題。下面是博客中提到的解決方案以及目標:
-
處理積壓的 Bug
- 管理所有新提交的 Bug 并及時響應。(現在開始)
- 減少 RT 中積壓的 Bug。(正在進行)
-
文檔完善
一年之內為所有公開且未過時的 API 提供完整的文檔。可能需要引入一個文檔系統,另外需要處理一些公開但未被使用的 API。 -
復雜的庫
- 審查并修訂公共 API,以降低其復雜度。 (一年之內)
- 提供一份平臺支持計劃文檔:見下文。(三個月之內)
- 審查并重構 FIPS 代碼,增加其準確性,避免外界因素的影響。(一年之內)
- 審查和重構內存管理代碼。(六個月之內)
-
不一致的代碼風格
- 為項目制定一套清晰的編碼規范。規范將覆蓋代碼布局、平臺依賴、單元測試和可選代碼。(三個月之內)
- 根據規范重構代碼(規范定義后的三個月之內)
-
代碼審查
- 所有新提交的代碼必須被熟悉相關代碼的團隊成員審查通過并將審查者提出的問題都解決才能提交(三個月之內)
- 引入代碼審查系統。(六個月之內)
-
審計
外部人員審計當前代碼庫。(依據外部人員數量) -
靜態/動態分析
使用合適的分析工具定期對代碼進行審查。(六個月之內) -
發布策略
制定一個發布策略,以確定版本的迭代周期,確定某個版本的支持時間以及生命周期。
在版本發布方面有以下幾個目標: - 在不引入其他問題的情況下發布安全補丁
- 如果某個發布版本中出現了 Bug,應該盡快發布修正版本
- 在 OpenSSL 中加入二進制兼容特性
- 不希望維護太多分支,這可能意味著 0.9.8 版本的生命期的結束。
-
平臺戰略
- 確定優先支持的平臺:Linux 和 FreeBSD。
- 列出將會被開發團隊支持的二級平臺。
- 平臺相關的代碼將從主代碼庫中移除
- 沒有被大規模使用的平臺支持代碼將被移除
-
安全策略
撰寫安全策略文檔,包括以下問題: - 如何修復安全問題
- 新版本發布之前向誰以及提供什么樣的通知(兩個月之內)
最后,OpenSSL 團隊也列出了規劃中的一些新特性:
- IPv6 支持
- AEAD 更新 (API 審查、Poly/ChaCha 支持、/dev/crypto 操作聚合)
- 新的加密算法的支持,如 CCM
- 擴展 SSL_CONF 支持
- DANE 支持
- 安全級別
- OCB
- FIPS 代碼審查和重構
- 對新興平臺的支持,如 ARMv8、POWER
- 為兩個主要的線程內建 MT 支持,POSIX 線程和 Win32
<span id="shareA4" class="fl">
</span>