面对日益升级的供应链攻击和 “预装” 后门威胁,开源硬件是可信赖硬件的终极答案吗?开源硬件一定比闭源硬件安全(自主可控)吗?
著名硬件黑客黄欣国 (Andrew 'bunnie' Huang) 在上周末举行的混沌计算机俱乐部会议 (36C3) 上讨论了这个问题。
数年前,黄欣国和朋友构建了开源笔记本电脑 Novena,在此过程中他们意识到构建一个完全可信的开源硬件非常困难,即使你能制造自己的 CPU 和 SSD,你也无法确保它们是值得信任的,因为你没办法确保供应链的每一环节你的硬件没有遭到纂改。自从斯诺登事件以后,人们已经意识到供应链攻击的风险无处不在:在产品交付到客户手中的各个环节,从送货司机、海关官员到仓库工人都可能接触硬件,有机会纂改硬件。尤其是在智能手机行业,固件调换(预装)已经形成了规模庞大的市场。
黄欣国的结论是开放硬件和闭源硬件的可信度没什么差别。软件有近乎完美的信任转移机制,比如验证哈希值,但硬件没办法采用这些方法。他描述了构建可信任硬件的三个原则:
构建可信任硬件的三个原则
1. 复杂性是验证的敌人;
2. 不能只验证元件而要验证整个系统;
3. 赋权终端用户去验证和密封硬件。
他和朋友发起了 Betrusted 项目去实践这三个原则。
以下是《我们能否开发出可信硬件》的论文原文,安全牛编译如下:
我们能否打造可信硬件?
为什么开放硬件自身不能解决信任问题?
几年前,我和 Sean ‘xobs’ Cross 弄了个开源笔记本电脑 Novena(上图),一路从电路板构建起来的,并将构建方法和过程分享给了全世界。我是开源硬件的坚定支持者,坚信分享知识就是共享力量。我们没料到的是,媒体会把我们的开源硬件小创造标榜为更可信的计算机。若说有何不同的话,构建 Novena 的过程让我强烈意识到:真是什么都不能信任!仔细审查过每个部件的开放性和文档后,你就会发现:从开机加电到执行你代码的第一条指令的过程中,如果不运行几个闭源固件块,你根本无法启动任何现代计算机。互联网批评家认为,如果我们真想弄个可以信任的东西出来,我们就应该构建自己的 CPU 和固态硬盘 (SSD)。
我还真的认真考虑过这个建议。我在芯片行业待过,所以从无到有构建开源片上系统 (SoC) 的想法也没那么疯狂。但是,我想得越多,就越感觉到,自己构建片上系统也还是太多短视。制造芯片的过程中我也在编辑芯片掩模;芯片的可塑性相当强,甚至在流片试产之后都保有可塑性。我也花了十年时间争论供应链问题,对付假货、劣等工艺、秘密零件替换——把 “好” 芯片偷偷换成 “坏” 芯片的机会和动机简直不要太多。即使工厂出品的是经过严格质检的产品,配送公司、海关人员和仓库工作人员也有机会在用户拿到计算机前动点儿手脚。最后,当今高度集成的电子商务系统环境下,往供应链中注入恶意硬件也不过就是下单产品、篡改、装回原包装箱,然后再退个货这么简单。买到这种被篡改过的退换货品的受害者根本不会察觉。
参照上述经验,我可以肯定,开源硬件的可信度跟闭源硬件没什么不同。换句话说,两者都不可信。虽然开源硬件让用户有机会创新,也自带比闭源硬件更正确和透明的设计意图,但最终,无论开源还是闭源,任何足够复杂的硬件实际上都是难以检验的。就现代十亿级晶体管 CPU 而言,即使我们公开了完整的掩模组,如果没有实用方法在不破坏 CPU 的同时,以近原子级的程度验证掩模组和手中芯片间的等价性,那也是毫无意义的。
所以,到底为什么,相比闭源软件,我们觉得自己可以更加信任开源软件呢?毕竟,Linux 内核都有 2,500 万行代码了,而且贡献者里还包括向来就跟 “隐私” 或 “信任” 不搭界的企业。
个中关键就在于,软件有近乎完美的信任转移机制,用户可以把审计程序这种困难任务委托给专家去做,并将此审计结果精准转译到用户自己的程序副本中。有了这套机制,我们才可以不用担心软件程序的 “供应链”,不用先信任云才能信任我们的软件。
软件开发者使用 Git 等工具管理源代码(如上图所示,云在左边),用 Merkel 可信树跟踪代码修改。这些散列树将代码链向各自开发历史,使经审核后的代码不易被偷偷插入恶意代码。代码构建再经过散列和签名(如上图所示,密钥在中上部),可重现构建的项目支持第三方审计者下载、构建和证实(如上图所示,绿色对勾)用户下载的程序符合开发者的本意。
上一段讲了很多东西,重点是:软件中的信任转移机制依赖一种名为“散列”的东西。了解散列为何物的读者可以略过下一段内容;不了解的可以看看。
散列可将任意大文件转换为一组短得多的符号:比如,左侧文件转换为“
Copyright (C) 1999-20120 www.ahcar.com, All Rights Reserved
版权所有 环球快报网 | 联系我们:265 073 543 9@qq.com