LibreSSL 替代OPENSSL

LibreSSL

开发者 OpenBSD计划 稳定版本 2.0.3 / 2014年7月21日;3天前 开发状态 进行中 编程语言 C,汇编语言 操作系统 OpenBSD、FreeBSD、Linux、Mac OS X、Solaris 类型 安全库 许可协议 Apache许可证1.0、4句BSD许可证、ISC许可证,部份为公有领域 网站 http://www.libressl.org LibreSSL是OpenSSL加密软件库的一个分支,为一个安全套接层(SSL)和传输层安全(TLS)协议的开源实现。在OpenSSL爆出心脏出血安全漏洞之后,一些OpenBSD开发者于2014年4月创立了LibreSSL,[1][2][3]目标是重构OpenSSL的代码,以提供一个更安全的替代品。[4]LibreSSL复刻自OpenSSL库的1.0.1g分支,它将遵循其他OpenBSD项目所使用的安全指导原则。[5]

历史编辑

在裁剪代码的第一周,分支中删除了超过90,000行的C代码。[6][7]旧的或无用的代码已被删除,对较老或目前罕见操作系统的支持也一并被卸载。LibreSSL的最初开发目的是作为OpenBSD 5.6中的OpenSSL预期替代品,一旦库的精简版稳定下来,它还有望移植至其他平台。[8]截至2014年4月,该项目仍在寻求“稳定的”外部资金承诺。[7]

变化编辑

更详细地说,迄今为止,一些较显着和重要的变化包括更换自定义的内存调用为标准函数(例如strlcpy、calloc、asprintf、reallocarray等)。[9][10]这有助于将来用更先进的内存分析工具,或仅通过观察程序的崩溃来发现缓存溢出错误。CVS提交日志中也记录了潜在双重释放内存的修复(包括空指针值的显式分配)。[11]不安全的种子生成方法(借助于内核自己原生提供的功能)被替换掉,以确保基于随机数生成器的方法使用了正确的随机数种子。额外的完整性检查也被加入进来,以检查长度参数、无符号到有符号变量的赋值、指针值/方法返回值等数据的有效性。一些使之更加安全的编译器选项和标志也有助于发现潜在问题,以使其能被及早修复(-Wuninitialized,-Werror等)。

为符合良好的编程风格,项目也增强了代码可读性及清理空白字符(KNF)。卸载对不需要平台的支持(MacOS、Netware、OS/2、VMS、Microsoft Windows等),以消除潜在的安全隐患。卸载不必要或不安全的#define语句和变量。卸载未使用的或旧的程序集、应用程序、演示及文档文件/代码(Perl脚本、C语言文件等)。卸载对FIPS支持、不安全的算法(Dual_EC_DRBG)及旧的协议/加密器(SSLv2)。对不必要的方法包装和宏的修改也有助于增强可读性(Error & BIO(I/O抽象)库)。

最后并同样重要的,复刻的一个主要原因是OpenSSL团队的不合作态度,之前几年提交的漏洞补丁不是没注意到就是被忽略了。提交日志显示LibreSSL修复了这些较旧的漏洞。[12]

开发者 OpenBSD计划 稳定版本 2.0.3 / 2014年7月21日;3天前 开发状态 进行中 编程语言 C,汇编语言 操作系统 OpenBSD、FreeBSD、Linux、Mac OS X、Solaris 类型 安全库 许可协议 Apache许可证1.0、4句BSD许可证、ISC许可证,部份为公有领域 网站 http://www.libressl.org LibreSSL是OpenSSL加密软件库的一个分支,为一个安全套接层(SSL)和传输层安全(TLS)协议的开源实现。在OpenSSL爆出心脏出血安全漏洞之后,一些OpenBSD开发者于2014年4月创立了LibreSSL,[1][2][3]目标是重构OpenSSL的代码,以提供一个更安全的替代品。[4]LibreSSL复刻自OpenSSL库的1.0.1g分支,它将遵循其他OpenBSD项目所使用的安全指导原则。[5]

历史编辑

在裁剪代码的第一周,分支中删除了超过90,000行的C代码。[6][7]旧的或无用的代码已被删除,对较老或目前罕见操作系统的支持也一并被卸载。LibreSSL的最初开发目的是作为OpenBSD 5.6中的OpenSSL预期替代品,一旦库的精简版稳定下来,它还有望移植至其他平台。[8]截至2014年4月,该项目仍在寻求“稳定的”外部资金承诺。[7]

变化编辑

更详细地说,迄今为止,一些较显着和重要的变化包括更换自定义的内存调用为标准函数(例如strlcpy、calloc、asprintf、reallocarray等)。[9][10]这有助于将来用更先进的内存分析工具,或仅通过观察程序的崩溃来发现缓存溢出错误。CVS提交日志中也记录了潜在双重释放内存的修复(包括空指针值的显式分配)。[11]不安全的种子生成方法(借助于内核自己原生提供的功能)被替换掉,以确保基于随机数生成器的方法使用了正确的随机数种子。额外的完整性检查也被加入进来,以检查长度参数、无符号到有符号变量的赋值、指针值/方法返回值等数据的有效性。一些使之更加安全的编译器选项和标志也有助于发现潜在问题,以使其能被及早修复(-Wuninitialized,-Werror等)。

为符合良好的编程风格,项目也增强了代码可读性及清理空白字符(KNF)。卸载对不需要平台的支持(MacOS、Netware、OS/2、VMS、Microsoft Windows等),以消除潜在的安全隐患。卸载不必要或不安全的#define语句和变量。卸载未使用的或旧的程序集、应用程序、演示及文档文件/代码(Perl脚本、C语言文件等)。卸载对FIPS支持、不安全的算法(Dual_EC_DRBG)及旧的协议/加密器(SSLv2)。对不必要的方法包装和宏的修改也有助于增强可读性(Error & BIO(I/O抽象)库)。

最后并同样重要的,复刻的一个主要原因是OpenSSL团队的不合作态度,之前几年提交的漏洞补丁不是没注意到就是被忽略了。提交日志显示LibreSSL修复了这些较旧的漏洞。[12]

原创文章转载请注明:转载自:LibreSSL 替代OPENSSL

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Pythonista

第一篇:初始Golang

编程语言已经非常多,偏性能敏感的编译型语言有 C、C++、Java、C#、Delphi和Objective-C 等,偏快速业务开发的动态解析型语言有PHP、Py...

812
来自专栏数据库新发现

终极恢复孰弱孰强-DUL vs AUL

作者:eygle  原文链接: http://www.eygle.com/archives/2007/02/dul_vs_au...

602
来自专栏微信终端开发团队的专栏

Hello Bonjour!

Hello Bonjour! 一开始用Bonjour,我是拒绝的。 让我们以一个问题开头:如何能在本地网络找到自己想要的硬件设备及相应服务,并连接? 在这个以I...

22210
来自专栏FreeBuf

WanaCrypt0r“想哭”勒索蠕虫数据恢复可行性分析报告

目录 第一章 前言… 第二章 加密文件核心流程分析… 第三章 数据恢复可行性分析… 第四章 总结… 第一章 前言 近日,360互联网安全中心发现全球多个国家和地...

1896
来自专栏安全领域

如何通过7个简单步骤构建智能物联网网关

现在我们将着手构建智能物联网网关。我们将使用 Ansible 来自动化网关配置,因为它也可用于配置管理和应用程序部署。

5586
来自专栏SDNLAB

数据中心工具———虚拟网络方案Calico初探

特点与对比 Calico是一个基于BGP协议的虚拟网络工具,在数据中心中的虚拟机、容器或者裸金属机器(在这里都称为workloads)只需要一个IP地址就可以使...

36015
来自专栏Kurt Niu 的博客

使用Mifare卡加密数据 笔记

Mifare 是最常用的射频卡,具体介绍网上太多,我就不说了.,很多城市的最早的地铁公交卡都是用这种卡,后来被破解后都换成智能卡了. 但是由于技术成熟,使用方...

1171
来自专栏QQ空间开发团队的专栏

Android M 特性 Doze and App Standby模式详解

从Android6.0开始,Android提供了两种省电延长电池寿命的功能:Doze和App Standby;表现形式:当设备没有连接到电源,设备进入Doze模...

4.3K0
来自专栏北京马哥教育

Linux运维跳槽必备的40道面试精华题

过一次年,结婚、存款、父母养老,一系列向钱看的事都在碾压我们本来还挺简单的神经,但难过没有出路,唯有找到好的方法和事业方向,才能实现一步一个脚印的逆袭。

2013
来自专栏P2P传输

.torrent文件该如何理解?BT种子的技术原理是什么?

1、torrent文件的原理:如果这个问题是指torrent文件本身,那么,当你对一个文件(或者文件夹)制作成.torrent文件,实际上生成的.torre...

490

扫码关注云+社区