写点什么

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

  • 2014-05-26
  • 本文字数:1497 字

    阅读完需:约 5 分钟

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

2014-05-26 00:362887

评论

发布
暂无评论
发现更多内容

学习总结 - 第 4 周

饶军

央行数字货币:第三方支付产业新变量

CECBC

数字货币 DCEP 区块链技术

大型互联网公司技术方案与手段浅析

俊俊哥

分布式 高可用 大型软件 高并发 解决方案

SQL运行内幕:从执行原理看调优的本质

arthinking

MySQL 数据库

关于编码的一点“思考”

damnever

思考 抽象 分层架构 编码 Go 语言

一文带你学会 Blob(含 7 个使用场景)

pingan8787

Java 大前端 Web Blob

架构师训练营 -- 第四周作业

stardust20

架构师训练营第四周学习总结

CATTY

区块链冷链食品追溯系统

CECBC

区块链技术 上链 溯源 浙冷链

消息队列(三)如何保证消息不被重复消费?

奈何花开

Java MQ 消息队列

系统架构感想

朱月俊

使用数据卷管理数据 | Docker 系列

AlwaysBeta

Docker 容器 数据

每周学习总结 - 架构师培训 4 期

Damon

ARTS打卡 第5周

引花眠

ARTS 打卡计划

CECBC带你一图看懂区块链

CECBC

CECBC 区块链技术 去中心化

架构师训练营作业 -Week4

wyzwlj

极客大学架构师训练营

架构师训练营 - 第四周 - 学习总结

stardust20

原来使用Postman如此简单,API测试之Postman使用全指南

软测小生

接口 Postman 接口测试 API API测试

架构师训练营 - 第四课作业 -20200701- 架构演化

👑👑merlan

极客大学架构师训练营

通过Python来获取北京市乡镇、街道行政区划数据

Puran

Python GIS geopandas QGIS 天地图

极客时间 - 架构师培训 - 4 期作业

Damon

【源码系列】Spring Cloud Eureka

Alex🐒

源码 Spring Cloud Eureka

信息的表示与存储-浮点数的运算

引花眠

计算机基础

ARTS-WEEK5

一周思进

ARTS 打卡计划

一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?

朱月俊

ARTS|Week 5 有效的括号、API和地图

Puran

LeetCode ARTS 打卡计划

消息队列(二)如何保证消息队列的高可用?

奈何花开

Java MQ 消息队列

《架构师训练营》第四周总结

OpenSSL的替代者:LibreSSL本月开发进度_开源_Sergio De Simone_InfoQ精选文章