3、OpenSSL的问题和未来
界面的文章中说基层程序员批评他们的代码“令人作呕”,实际上,说这句话的人是Theo de Raadt,是OpenBSD项目的创始人,他可不是“基层程序员”,而是操作系统领域最好的计算机科学家之一。OpenBSD开发者们并没止步于批评,而是立刻决定从当前OpenSSL版本创建一个叫做LibreSSL的独立项目,从清理OpenSSL的代码重新开始。他们在第一周就删除了9万多行代码,OpenSSL整个项目只有38万行,相当于删减了近1/4的代码。可见Theo的批评并不是顺口胡说。几年来,OpenSSL出过各种漏洞,在“心脏出血“之后,仍然有隐藏了10年以上的漏洞被发现,很多熟悉这个项目的人看法都是“除了重写别无办法”。
OpenBSD有一份文档说明了他们在清理过程中遇到的问题,去掉其中的技术细节,我把主要观点列在这里,这些也基本是业内主流看法:
OpenSSL的代码混乱不堪,难以阅读。开源软件一般通过让更多人看到代码来发现bug,如果代码难以阅读,这个办法就失效了。
他们使用了大量自己的代码封装和编程风格,这些代码有的有bug,有的不符合现代主流做法。这让常见的检测工具没法应用于他们的项目,更难以发现Bug。
他们的开发者更关心增加功能,而不是维护和修补。
其他开发者提供的修改和贡献,一般不会被合并到最终代码里。
很多用户指出的Bug,包括一些相当严重的,公开放在追踪系统里面长达几年,没被修补。
其中存留了大量无用的旧代码,比如给windows 2000之前的16位系统写的兼容代码,仍然包含在最新版本的OpenSSL中。
基于以上原因,OpenBSD认为这个项目已经没法维护了,必须要重新开始。这就是他们创建一个分支,从清理代码这种基础工作开始的原因。可见,这个项目根本不是钱的问题,而是管理方式和社区文化有问题。比起来其他项目,他们在有一个全职开发者和一个全职基金会主席的情况下还能响应如此缓慢,实在更令人沮丧。顺便说一句,做清理代码这件事的OpenBSD开发者,也不是全职工作,他还在这份文档前面特别注明了“可以被雇佣”。一年之后的今天,LibreSSL已经基本算可用了,除了清理和改变了原有代码风格,他们也增加了一些更先进的特性,看起来很有前途。另外,这个项目也很需要捐款,如果更认同他们的做法,可以捐款给他们。
除此之外,OpenSSL公布“心脏出血“漏洞的过程也非常有问题。一般出现严重漏洞的流程,是先不对公众公布,立即通知主流操作系统维护者和相关厂商,让大家先修改,之后一起发布安全公告和升级。之所以这样做,是因为如果操作系统不去打补丁,很多普通用户知道漏洞也没办法修补,反而让黑客们更容易利用这些漏洞。OpenSSL不是这么做的,在Google告知了他们漏洞之后,OpenSSL没有告知任何一家操作系统厂商,反而奇怪的被几家主要CDN厂商知道了,也就是说,在不知道哪个环节发生了泄密。之后开源社区中开始有关于这个重大Bug的传言,直到这个时候,几大操作系统仍然没得到正式通知。又过了3天,OpenSSL才告知了Red Hat,当天,参与处理这件事的一位Red Hat员工在一个私密邮件组里面把这个消息分享给了SuSE/Debian/FreeBSD等几个重要操作系统相关负责人。多亏了他,因为此时OpenSSL仍然表示没有任何细节提供,这是加州湾区的太平洋时间4月6日晚上,从Red Hat得到具体细节的几大操作系统,连夜开始忙着打补丁,到这个时候,Red Hat提供的消息是OpenSSL将在9号,也就是3天之后公开这个漏洞。可惜,转天,4月7日一大早,OpenSSL就直接发布了公告,媒体们知道了,全世界都知道了。如果没有Red Hat提前放的消息,最后的影响恐怕还会大的多,就算如此,因为时差的原因(Red Hat那位员工在印度),很多在他夜里睡觉之后的邮件没来得及回复,仍然有很多厂商没能提前得知细节。关键厂商对于如此重大的漏洞比媒体知道消息还晚,近年来恐怕这是第一次。这造成了不少损失,比如加拿大国税局CRA在漏洞被公开之后发现数据被盗,此时已经来不及打补丁了,所以干脆直接把电子报税系统关掉了,当时是4月9号,加拿大2014年的报税截至日期是4月30日,正是电子报税系统最繁忙的日子,其间的尴尬可想而知。整个过程的时间线,在theage的一篇文章有完整记载,我列在最后,供参考。
针对这个反常的流程,社区中有不少阴谋论的看法,我不转述这些看法,我只是想说,这是另外一个证据证明OpenSSL有严重的管理问题,而不是钱的问题,人们说他们把事情做的一团混乱绝对不是没理由的指责。
另外,OpenSSL并不是凭空出现的项目,而是继承了另一个项目SSLeay的代码。在SSLeay的开发者去RSA公司工作,不能继续这个开源项目之后,有好几个项目继承了它的代码继续开发,OpenSSL只是其中比较成功的一个。维基百科上列出了SSL库的实现,包括OpenSSL,现在还在使用的也有10多个,其中开源的占了将近一半。
这也是我不赞成吹捧OpenSSL的原因,历史的选择往往存在偶然,具体到SSL软件上,就更复杂,这是混合了技术,商业,历史,政治复杂因素之后的偶然结果。现在OpenSSL暂时有最多的用户,以后则未必会如此,我相信,早晚会有一个新的替代者出现。
4、谁是真正的人类隐私捍卫者?——电子前线基金会的故事
界面这篇文章认为OpenSSL是人类隐私的捍卫者,事实上,OpenSSL只是同类加密软件中的一个,他们当不起隐私捍卫者这个头衔。今天,我们可以不知不觉获得加密软件的保护,背后有一些曲折的故事,那是真正的隐私捍卫者的故事。
曾经,加密技术是被美国政府禁止出口的,就像很多武器禁止出口一样,其他国家的人,想要使用这些加密算法,就像要从美国买导弹一样,是不可能的。转机发生在1995年,这一年,加州伯克利大学的研究生Bernstein在一个叫做电子前线基金会的律师帮助下,起诉美国政府。他的主张是自由发表加密算法,属于言论自由的一部分,从而受美国宪法第一修正案保护,史称 Bernstein v. United States。这个案子进行了4年,到1999年,美国联邦第九巡回上诉法院出了判决,依据第一修正案,判决美国政府禁止公开密码算法违宪。在这之后,各种密码协议和开源算法才从美国流传出来,被自由使用。
电子前线基金会EFF(Electronic Frontier Foundation),创建于1990年,是一个法律援助组织,他们的使命是捍卫隐私,自由表达和公民权利。这也是一个基金会,而且是一个完全靠捐款运作的非盈利组织。EFF创始人之一是Lotus公司创始人卡普尔,曾经是和比尔盖茨齐名的软件天才。80年代,Lotus是最大的独立软件公司,几年之后微软才超过它。卡普尔是一个极具前瞻精神的奇才,1990年,卡普尔意识到未来技术、隐私、法律和政治的冲突,自己出资创建了EFF,后来的资助者中还有著名的苹果联合创始人沃兹。当时,商业互联网尚未成型,可见他们前瞻性之强。关于EFF的传奇故事可以写很多篇文章,这里我们先说和OpenSSL有关的部分。
曾经浏览器的领导者Netscape,于1995年开发了第一个SSL协议。SSLeay也在1995年完成了第一个实现,1998年SSLeay中止开发,由社区接手。直到1999年美国政府败诉,加密技术终于可以自由流通。这才是人类隐私保护工程的历史脉络。在这个复杂的故事里面,OpenSSL是受益者之一,也是整个故事中的一小段,界面的文章把OpenSSL开发者捧为人类隐私的捍卫者,不仅过誉,而且显得非常无知。
EFF及其创始人卡普尔,是真正的理想主义者,他们没有商业收入,自己掏钱,做这一件事做了25年之久,通过一个又一个的诉讼案和对隐私相关案件的法律援助,他们成功推动了社会进步。这才是互联网时代真正的隐私的捍卫者。
5、媒体的责任
有朋友说,写写文章,让大家捐点钱,怎么也不会有害,不应该被批评。我不这么认为。媒体传播是可以影响人群选择的。这在开源领域有先例,比如,BSD是最正宗的UNIX继承者,但曾经的一场诉讼,让BSD应用广泛程度至今不及Linux,媒体在这个过程中起了相当重要的作用。直到今天,谈起开源软件,媒体都更关注Linux,质量更可靠的BSD缺少关注,从而影响了人们的选择。界面文章中说“如果一个开源项目在商业世界获得了成功,那决不会是出于侥幸,决不会是因为其它竞争者恰好被规章制度所累、被知识产权法约束“,BSD的历史正好是一个反例。(“决不会“ 此处错字为界面原文引用)
所以,界面这篇文章的影响是很负面的。我在前面指出了不少他们在整体认知上的错误,其他的小错和不合理之处更是多的说不完。比如,界面的文章说"有了锤子科技的那笔捐款"OpenSSL的开发者在德国Linux会议期间才终于有机会见了一次面。文章中有一张OpenSSL开发者的合影和人名,就算这些人你之前完全不知道,现在立刻Google一下就知道,这些人里面有Debian开发者,也有Google全职员工,这些人都不是OpenSSL付薪的,就凭这张照片,说大企业一分钱没出过也实在说不过去。再说OpenSSL开发者大部分在英国和欧洲,从伦敦飞德国法兰克福,往返机票也就300美元,硬要说这些有工作,有正常收入的工程师连300美金机票都要等这笔捐款,未免太过夸张。
我想问问界面编辑部,你们认为这篇文章到底是不是软文。如果作者是在写付费软文,那么是职业道德问题,如果没收费,而是作者出于对罗永浩的崇拜写了一篇软文,那么是公器私用,也是职业道德问题,如果作者没收费又不是公器私用,仍然写出了一篇如此软,错误如此多的文章,那不仅仅是职业道德问题,还是能力问题。界面网络的编审流程看起来也不那么靠谱,让这么一篇文章发表出来,还四处推广,恐怕编审团队没做什么背景调查,甚至都没去搜索点相关文章读读。另外,整篇文章连一个观点相反的平衡意见都没有,完全是单方面的观点阐述,这也违背了平衡报道准则。一篇好的报道,应该兼顾各方意见,给读者展示各种观点,提供多方面信息,界面没能做到这一点。
互联网的安全,不取决于一个特定的软件,即使这个软件是用来加密的。发现“心脏出血“漏洞的Google员工Mehta说过,libjpeg如果出问题,可能会有极大影响。libjpeg用来生成和显示大部分网站和软件的图片,被普通人用到的范围比OpenSSL更广,威胁也会更严重。当人们被媒体把关注转向OpenSSL上时,大量更重要的问题就会缺少关注。希望能有更多人关注更多的基础项目,而不是和汶川地震一样,盯着看各大企业谁给OpenSSL捐款更多。一年了,炒作也应该结束了。
界面的这篇文章对华为、诺基亚,Google这样出钱出力,没自我炒作的厂商不公平,对于其他开源组织也不公平。界面是一家有正规编审流程的机构,严谨程度还不如我这种完全靠个人爱好写作的非专业人员,虽然不严谨,但他们的煽情技巧确实是出色而专业的,这篇文章被很多人称为精彩,这令人失望,也非常遗憾.
(责任编辑:安博涛)