OpenSSL的替代者:LibreSSL本月开发进度

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基金会尚未表示赞助意向。

查看英文原文:LibreSSL, OpenSSL Replacement: The First 30 Days

你可能感兴趣的:(OpenSSL的替代者:LibreSSL本月开发进度)