泰晓科技 -- 聚焦嵌入式 Linux - 追本溯源,见微知著!
网站地址:http://tinylab.org
微信公众号关注我们新浪微博


扫一扫

关注 @泰晓科技
原创服务 | 实验云台 | 共享书籍 | 分享桌面 | 直播回放
请稍侯

s2n:亚马逊的 TLS 之道

Chen Jie 创作于 2015/07/16

by Chen Jie of TinyLab.org 2015/7/12

使用最广泛的 TLS 解决方案 OpenSSL,近日再次爆出高危漏洞

巧的是,在更早的几天前,亚马逊开源了一个新的 TLS 实现 – s2n。s2n 是一个轻量级的 TLS 实现,大约仅有 6,000 行代码,实现了亚马逊用到的 TLS 特性。

与之相对的,OpenSSL 是一个 TLS 事实上的参考实现,包含超过 500,000 行代码。

s2n 现已经发布在 github:awslabs/s2n

笔者按:对于一个严格的开发计划而言,作为其基石的软件组件,对进度有着重要影响。软件组件的未预料异常行为,以及突发漏洞,往往让计划延迟,甚至要重大更改。

软件都有其舒适区,当软件应用于一个名义上支持,但实际上少有实践的领域时,需谨慎对待 —— 哪怕一小步,也不能轻视。

另一方面,需不断了解软件的舒适区,从而明白什么样的使用,会有什么样的风险。开源软件组件目前被广泛地关注和应用,而对于一个大型的企业而言,企业内部可能有许多部门去围绕开源软件组件进行开发。在此情形下,成立企业内部的开源技术中心,便是一个自然的选择:

  • 汇总常用开源组件的解决方案:不断深入了解常用开源软件的舒适区。
  • 富集各部门对开源组件的需求:更广视角看待问题,从而架构层面得以保持和演进。
  • 集中改进:将成果分享于全公司。
  • 反馈社区:超越公司的分享。普遍地分享,才能普遍得到别人的分享;才能让软件框架越来越进化;最终让软件的舒适区越来越大。

除此以外,软件工程的手段,也同时加以应用。例如:

  • 依据特定情况做减法:减少维护的体量。例如 s2n 就是这样一个思路。“轻量级”总是受欢迎的。
  • 提高复用度,从而集中维护的力量。复用意味着组件的“通用”,更广义而言,就是“相似性”。一个软件栈各层次呈现的“相似性”便透出一种优雅。
  • 各阶段都要考虑可测试性和可调式性。有助于问题的及早发现,以及发现后的尽快处理。
  • 语言和工具的力量:例如目前正兴起的、内存安全的编译语言:rust 和 swift;基于计算理论的静态代码检查工具;动态代码检查工具(模拟器)。这部分力量若能很好发挥,便属于黑科技范畴。

最后是 YY 环节,在『大开脑洞,做一个比表屏大,比 phone 便携的移动设备』一文中,YY 了一个手机 OS,现来进一步 YY 其基础软件栈:

  1. 通过类似 VDSO 将内核的 C 库、例程、系统调用接口封装来导出给用户态,就像『Linux 片面报告:从 4.0 到 4.2』提到那样。复用内核代码,不仅性能更好,更有利于集中维护。
  2. Systemd 及其提供的基本服务。systemd 基于 C 库做了薄薄的一层封装 – libsystemd。其代码严谨,并非常轻量。systemd 核心提供了非常动态的服务管理,可以按需来启动最小的服务集。同时,systemd 还基于 libsystemd,不断重构传统的系统服务,使之复用代码和框架,提高了操作系统的整体性。
  3. Swift 语言环境。在 WWDC 2015,苹果宣布将逐步开源 Swift 2.0,包含各平台的编译器和标准库支持。使用内存安全编译型语言,来实现用户态软件栈中代码体量最大的部分。借助先进语言,来提高生产效率与代码质量。

Read Related:

Read Latest: