2018年3月21-22日,由中国信息通信研究院主办、中国通信标准化协会支持的"OSCAR云计算开源产业大会"在国家会议中心举行。
随着云计算技术的日益发展,并开始进入“深水区”,开源技术与云计算融合的程度进一步加深,并开始成为产业发展的重要支撑。"OSCAR云计算开源产业大会"将邀请行业内多位大咖与权重人物共同探讨、交流云计算开源技术、研发、治理、产业化方面的经验,探索开源与云计算的创新发展新路径。
OpenSSL代码贡献榜华人第一、白山架构师杨洋,他带来的主题是《后心脏滴血时代的OpenSSL》,以下为演讲全文:大家下午好,我今天讲的跟开源更贴近一些。我今天为什么讲这个话题呢?主要是因为现在这个时间点是一个特别寸的点,2014年4月份,正好心脏滴血漏洞爆出来,公开是4月份,实际上大概是在3月下旬,所以今天这个时间应该是整个漏洞爆出来整四年的时间点。很多人好奇四年时间过去了,OpenSSL这个项目在经历了这么长的时间以后,究竟发展成什么样了,是不是还像当时那样代码写得特别烂,产品质量特别差。我今天想借这个机会跟大家讲讲过去四年中,我们整个社区在做的一些事,包括代码质量提升、社区建设的几个方面。
杨洋
这是我的个人基本信息,我现在是白山云的全职雇员,在到白山之前我主要做的就是传统的安全工作,包括传统的网络安全开发等等。如果聊后心脏滴血时代,最早还是要从心脏滴血开始说起,CVE—2014—0160,这是非常庞大的一个bug,可以导致服务器当中的敏感数据被窃取,包括用户名、密码、密钥、非对称的证书,在你的数据库当中保存的敏感数据都有机会被窃取到。bug的原因是因为一个非常简单和低级的错误,用钱无法衡量这个经济损失大概有多少。2017年1月份的时候,互联网还有接近20万个域名还在运行着这几个受威胁影响的判断。
心脏滴血这个事情发生之后,给整个社区带来的影响非常之巨大,批评的声音特别多,当然这个项目本身也得到了巨大的空前的关注,以前没有人去特别关注这样一个如此底层的加密库。从这个事件之后,我们最直接的好处就是收到了很多来自于个人和企业的捐款,项目突然有钱了,有钱之后就可以雇一些专职开源工作者去完善。
另外一个比较大的事情,我认为是它促成了CII的成立,CII是Lilnx基金会联合了十几家全球大型的IT公司,包括像英特尔、微软,中国的华为,成立了一个项目,因为这个心脏滴血漏洞在整个国际开源社区里引起了一个特别激烈的反思,为什么我们整个互联网基础都是基于开源软件前提下,但是现在很多开源软件的关注点不够,资金短缺,产品质量特别差,如果长时间下去的话,是不是互联网机组要垮掉。所以,Lilnx基金会牵头成立了一个CII项目,目的就是致力于去帮助这些在互联网中广泛应用但是当前的发展状况还不是特别好的开源项目,把它们变得更好。
当然OpenSSL作为心脏滴血惹了这么大祸的项目,肯定是作为第一个纳入到CII当中去的项目,CII给了整个项目很大的帮助,包括在法律、社区建设、代码的开发流程和团队的组织,甚至包括直接给我们提供资金去雇人。
我接下来会按照时间顺序讲一下这四年当中OpenSSL掌握的几个主要的发布版本。1.0.2严格意义上来讲,它并不是一个后心脏滴血时代的版,正在发beta版的时候正好是心脏滴血爆发的时候,研发之前心脏滴血就已经做了,由于漏洞影响特别大,所以一直推迟到2015年1月才释放出来。为什么还要讲这个版?它在OpenSSL产品历史上头一次引入了LTS版本,长期支持版本的意思是说它从2015年会直接支持到2019年底,每隔四年会释放一个LTS,这在OpenSSL过去20年的历史上都是没有的。
第二个版本是升级版1.1.0,这也是目前互联网上使用最多的版本,距离上一个版本将近两年左右的时间发布的一个新版,但是它不是一个长期支持的版本。这个版本的生命周期将会在最新的1.1.1版本发布之后继续持续支持一年。我说的继续支持是指不会增加新的功能,只会进行bug和安全性能的修复。它基本上是属于一个脱胎换骨的产品,整个团队花费了大量的时间和精力去开发。OpenSSL诞生的时间特别长,在1995年左右,那时候支持的操作系统特别多,很多操作系统现在已经消亡了,如果在1.0.1当中我记得还是支持dos,现在已经没有人用了。新的平台策略现在只支持三个平台。另外一个改进是不安全算法的移除和默认关闭,特别不安全的协议直接从代码中删除掉,默认关闭是像24或者其他的安全系数比较低的加密算法。编码风格进行了转换,以前的代码阅读体验特别差。另外一个就是隐藏结构体,所有库当中的结构体都可以直接在应用程序中访问,为了安全起见,更加面向对象化,所以从1.1.0版本里面只能通过API访问数据。
这是英特尔支持下的,如果想进行密码操作的话,比如对数据进行签名,如果想用硬件来做的话,这个操作是阻塞的,必须得等硬件返回,代码流程才能继续往下走。很多加密卡的厂商不得不去发布一个OpenSSL版本,这个东西的升级和维护特别困难,所以英特尔在1.1.0版本里面提供了资金支持去进行开发。
另外一个算法层面的就是ChaCha20和Ploy1305,这两个算法是谷歌贡献的,主要是使安卓在Lilnx环境下的数据加密性能下使得手机电量性能变小。我们重构了SSL协议的状态机和PACKET机制。
在开发流程的变化,早年OpenSSL开发的时候非常不规范,内部有一个封闭的代码库,基本社区觉得这个好,就把一个贡献代码合并到库里。我们现在最新的策略是从2014年开始把所有的开发重心全部转移到Github,大量使用了Travis—CI,AppVeyor等集成插件,所有的代码评审核定到代码库当中必须经过公开Pull Raques评审。OpenSSL一方面会提供很多的库名调用,本身也是一个工具集,所以有时候直接用OpenSSL到各种产品里,比如说很多密钥管理系统都会直接用到这个。
在社区建设方面,我们在2014年底仿照其他开源社区,上线了一个官方博客,会时不时发布一些社区的事,各种跟项目相关的事。官方改版,以前的版本是九几年设计的,2015年的时候也是在其他人的帮助之下,把这个官方改得还算是比较现代化。
另外一个比较大的事就是启动License切换,之前的协议写得比较糟糕,国内关心的人可能不是那么多,但是在国外的开源社区是比较大的一个事,因为它可能会引起法律的问题,你的开源项目是不是被其他的产品更多的使用,或者被其他的开源项目集成进来,后续我会具体讲。
去年9月份,我们邀请社区当中的五个比较核心的人来到中国,在上海、深圳、北京这几个地方分别拜访了一些中国比较大的IT公司,主要目的是探讨中国市场的需求,以及希望中国能涌现更多的社区参与。另外就是希望把这个项目推到国际上,OpenSSL的市场占有率特别大,如果我们自己国家有一个标准,对于在国内的推广可能会更一些。
开源许可证更换,我们已经确定在下一个版本1.1.1的版本中直接切换到Apache License2.0上,切换原则上是要经过所有提交代码的人同意,如果你不同意的话,我只能给你剔了。这个事2015年9月开始启动,2017年开始提交用户,我们现在能拿到的只有一个姓名和邮件,梳理出600多个人,三万多的提交。比较幸运的是99%的人都同意,但是也有一些人不同意,所以我们删的一些东西,现在感觉对整个项目的功能影响不是很大。
但是现在大概有十多个人联系不上,因为1.1.1这个版本今年5月份左右就要释放,还有十一二个人,现在正在全球范围内各个社交媒体寻找最后的十多人。OpenSSL官网上有一个链接,如果大家有兴趣帮我们去找这些人的话,可以去看一下,如果这里面有你认识的,麻烦跟他们说一下是同意还是不同意,如果到期要是不同意的话,没有明确表态,只能把你当成拒绝切换的这种情况来进行处理了。
社区策略的变更在去年年底又进行了一次讨论,还要再公开一下,要彻底取消OpenSSL—dev邮件列表,合并到OpenSSL—user.任何加入到OpenSSL的算法应该基于国家或者国际标准,相当于给我们的算法提供了合法性,这些东西以前没有,以前什么算法都可以加入到OpenSSL,所以我觉得这是一个比较好的事。
OpenSSL1.1.1这是今年马上要发布的一个非常关键的版本,重要性不比1.1.0差。有6个pre版,按照时间节点,我们现在刚过pre3,刚过beta版,4月3号到17号,一直到5月1号再经过三个beta版,如果没有问题的话,5月份会启动流程,再观察一周,没有问题的话,预计5月15号左右正式发布这一版。
这个版本的特性大概有以下几个,当然最关键就是TLSv1.3,这是整个互联网安全链最近几年非常关注的,因为TLSv1.2协议被关注很久了,1.3在性能和安性方面提升特别多。随机数生成器比以前更安全,增加了SHA—3,和STORE模块,支持之后你可以把管理工作当成一个小的密钥管理系统来用了。支持多素数RSA,可以减小对硬件的损耗,提高预算性能。中国国密算法SM3和SM4也会发布,SM2算法最近也公布了,所在1.1.1版本当中,我们会看到来自我国的三个算法,就是SM2、3、4. TLSv1.3的协议在标准化过程中会影响我们这个版本的释放,我得到最新的消息应该是明天会最终提交到委员会,在这个月或者下月初就会释放。全新的随机数生成器,这个就不具体聊了。
下面这个可能大家会比较关心,我写PPT的时候SM2还在评审,SM3、4去年已经合并了,现在正在开发的是SM9,当然这几个算法现在只做到了独立的算法,比如说就用SM2,现在这几个算法如果想整合到某一个协议里,因为我觉得国密算法基本上和VPN用得比较多,这个环节现在还没做,因为现在中国的国密标准对安全网络协议的标准内容和国际的协议有冲突。我们同时正在做的一个事,我们现在正在积极地和国密局沟通,看是不是有一些新的标准出来。国密算法要过一个检测程序,现在所有提交检测证明你的算法实践是对的,基本上有三个层面,而且都是以硬件为主,我们现在正在积极沟通,看看是不是能把OpenSSL做成过国密检测的开源项目,如果是这样的话,其他任何想使用国密的设备,你直接用OpenSSL就可以达到国密局的相关要求。
对整个社区批评大的就是OpenSSL的文档现在特别差,最近四年还算相对比较全了,基本上都是一些函数索引罗列的介绍,没有一本书从头到尾把项目历史的发展,包括很多普及的知识,做数据加密时对称加密是怎么做的,是干什么用的,非对称加密怎么用,这些东西都没有相关的文档在讲。我们是希望能够深入浅出的把这些都聊一下,当然这个书写出来特别慢,现在基本上不到5%.有没有纸质版将来也不知道,也许将来会有中文版在中国出版,目前来看基本上都是在线的。我的演讲到此结束,谢谢大家!