十七年前,肯·汤普森提出了一个新的问题,这个问题的产生源于思考,并且致力于证明那些信任计算机的人们正身处困境。
我当然是在谈论汤普森的图灵奖演讲“论信任的信任”2。除非您对这篇文章已烂熟于心,否则您可能需要花点时间阅读一下,如果可能的话。
汤普森演讲中最重要的一句话是:“你不能信任不是你完全自己创建的代码。”
这句话不是政治、观点、品味问题,也不是任何其他形式的价值判断;它是一条基本的自然法则,它直接源于图灵和哥德尔著作附近领域的纯粹数学。如果您对此表示怀疑,请(在您方便的时候)阅读道格拉斯·霍夫施塔特的经典著作《哥德尔、埃舍尔、巴赫》,当您读到关于“蟹先生的唱片机”部分时,将“蟹先生的笔记本电脑”替换上去。
霍夫施塔特的这本书最初出版于1979年,丝毫没有减损肯·汤普森的声誉,如果他的演讲确实受到了这本书的启发;1979年是很久以前的事了,可能并非每位读者都知道——更不用说读过——这本书。我的编辑建议我总结或引用这本书,以便让读者更清楚地理解。
考虑到哥德尔、埃舍尔和巴赫都以他们错综复杂、层层叠叠的作品而闻名,而霍夫施塔特的书不仅是他们作品的大杂烩,也是康托尔、丘奇、甘托尔、图灵以及您能想到的几乎任何其他数学家或哲学家作品的大杂烩,我不会尝试进行总结,只能说:“这是一本关于我们如何思考的书。”
本书在此处的相关方面是哥德尔不完备性定理,广义上讲,该定理认为,没有哪个有限的数学系统可以明确地解决所有可能在该数学系统中表达的数学猜想的真值。
在书中,这一点用一个关于蟹先生的“完美唱片机”的寓言来说明,由于它可以播放任何和所有的声音,因此也可以播放使其共振并自我毁灭的声音——蟹先生的对手龟先生利用了这种漏洞,制作了精心构造的唱片。
蟹先生试图通过预先分析唱片并重新排列唱片机来避免任何易受攻击的共振频率,以此来防御这种攻击,但龟先生只是在他唱片上制作的声音针对负责重新排列的唱片机部件的共振频率。这使得蟹先生别无选择,只能将唱片播放限制在他自己预先批准的唱片上,从而严重限制了他的唱片机的效用。
恶意软件扫描程序试图将可执行代码分类为“安全”和“不安全”,而不是将数学猜想分类为“真”和“假”,但情况和结果是相同的:总是会有第三堆称为“无法以任何方式决定”,而最终落入该堆的任何东西对于计算机用户来说都是安全风险或生产力风险。
有趣的是,恶意软件扫描程序几乎总是将恶意软件扫描程序(包括它们自己)归类为恶意软件,因此包含明确的豁免来抑制这些“误报”。这些豁免当然可以被恶意软件利用——这意味着将恶意软件扫描程序归类为恶意软件从一开始就是正确的。“Quis custodiet ipsos custodes?”(谁来监督监督者自身?)
1984年,汤普森的演讲引起了大学Unix系统管理员的苦笑和轻微出汗,因为这些是唯一计算机暴露于允许编译自己程序的恶意用户的场所。然而,除了零星且大多是幽默的实现之外,没有出现天启般的骑士。
近年来,已经记录在案的许多案例表明,开源项目遭到入侵,其源代码被修改以添加后门。据我所知,到目前为止,这些攻击都没有超出肯·汤普森攻击阶梯中的最低一级,即硬编码后门的形式,这在源代码中清晰可见。然而,考虑到对犯罪分子的价值,沿着汤普森提出的路线进行更高级的攻击只是时间问题。
商业闭源软件的安全状况是任何人的猜测,但没有理由认为——也没有可靠的事实依据来声称——这种情况与开源项目有任何不同或更好。
现在传奇的Stuxnet恶意软件事件严重提高了攻击可能达到的复杂程度的门槛。广泛部署的Java实现是用被入侵的编译器编译的想法是完全合理的。外包软件开发并没有使这种情况变得不那么现实、不太可能或不那么可怕。
我们必须做一些真正有效的事情,而不是接受病毒或恶意软件扫描程序以及其他数学上证明不足且效率低下的努力形式的安全闹剧。我们正接近人们和组织退回到纸和笔来保守重要秘密的地步,因为他们不再信任他们的计算机来保证安全。
肯·汤普森的声明——“你不能信任不是你完全自己创建的代码”——指出了一个严酷且不可避免的现实。正如我们不期望人们自己制造汽车、手机或房屋一样,我们也不能期望秘书创建自己的文字处理程序,也不能期望会计师创建自己的会计系统和电子表格软件。严格来说,你不能信任不是你完全自己建造的房子,但在现实中,我们大多数人会信任由合格的专业人士建造的房子。通常我们比我们自己建造的房子更信任它,即使在我们可能从未见过建造者和/或建造者已经去世的情况下也是如此。这种信任的原因是,3700多年来,劣质建筑已经对建造者产生了负面后果。“如果一个建筑工人为某人建造房屋,但建造不当,以至于他建造的房屋倒塌并导致房屋所有者死亡,那么该建筑工人应被处死。”(汉谟拉比法典,约公元前1700年)
今天,可操作的法律概念是“产品责任”,基本公式是“如果你通过销售某物赚钱,你最好把它做好,否则你将对它造成的麻烦负责。”但是,我想指出的是,产品责任的实施方式除了美国现行的之外,还有其他方式。例如,如果你在丹麦被热咖啡烫伤,你就是被热咖啡烫伤了。你不会成为百万富翁,也不需要标志来指出咖啡是热的。
有人说,今天唯一不受产品责任约束的两种产品是宗教和软件。对于软件来说,这种情况必须结束;否则,我们将永远无法控制在我们眼前几乎每天都在日益戏剧化的头条新闻中展开的安全疯狂。问题是如何引入产品责任,因为仅仅强加它就会立即关闭任何和所有软件公司,只要他们的组织结构图中稍有风险管理职能的影子。
我对软件责任法的初步建议有三个条款
条款 0. 查阅刑法,看看是否有任何故意造成的损害已经涵盖在内。
我试图仅对非故意造成的损害施加民事责任,无论是由于草率编码、测试不足、削减成本、文档不完整,还是仅仅是纯粹的无能。故意造成的损害是刑事案件,大多数国家已经有相关的法律。
条款 1. 如果您交付的软件带有完整且可构建的源代码,并且许可证允许被许可人禁用任何功能或代码,那么您的责任仅限于退款。
此条款阐述了如何避免责任:许可您的用户检查并切断他们不信任或不想运行的软件的任何和所有部分,并使他们能够实际做到这一点。
禁用这个词是经过非常仔细的选择的。本条款不授予任何权限来更改或修改程序的工作方式,仅允许禁用被许可人不想要的部分。也没有要求被许可人实际查看源代码,只需收到源代码即可。
所有其他版权仍然由您控制,并且您的许可证可以包含您希望包含的任何语言和限制,这使得硬件锁定、保密性、秘密、软件盗版、幻数等情况保持不变。免费和开源软件显然受此条款约束,并且不会以任何方式改变其法律状况。
条款 2. 在任何其他情况下,您都应对您的软件在正常使用时造成的任何损害负责。
如果您不想接受条款 1 中的信息共享,您将属于条款 2 的范围,并且必须像汽车、搅拌机、链锯和热咖啡的制造商一样,承担正常的产品责任。后果有多可怕,以及什么构成“正常使用”,则由立法机关和法院决定。
一个例子:您的一位长期供应商的销售人员来访,并在一个 USB 密钥上交付了新的产品文档。您将 USB 密钥插入您的计算机,并将文件复制到计算机上。这是“正常使用”,绝不应该导致您的计算机成为僵尸网络的一部分,将您的信用卡号传输到埃尔博尼亚,或将您的所有设计文档发送给供应商。
今天的大多数商业软件都将属于条款 2 的范围。为了给软件公司一个合理的机会来清理他们的行为和/或属于条款 1 的范围,设置一个过渡期是有意义的,但过渡期不应超过五年,因为法律的目的旨在解决严重的计算机安全问题。
实际上就是这样。软件公司将交付高质量的产品,并以产品责任保证作为后盾,否则他们的客户将努力保护自己。
毫无疑问,我的建议将在长期内提高软件质量和计算机安全性,这正是当前情况所需要的。
当编写糟糕的源代码获得更广泛的受众时,肯定会有一些短期的令人不快的意外。当这种情况发生时,重要的是要记住,今天的好人既没有技术能力,也没有法律能力知道他们是否应该担心,因为唯一可以访问源代码的人是软件公司和犯罪分子。
如果任何立法者要提出一项包含这些规定的法案,软件公司将会发出血腥谋杀的尖叫,他们能负担得起的任何权威人士和游说者都会发表可怕的预测,即“这项法律将意味着我们所知计算的终结!”
对此,我经过深思熟虑的回答是:“是的,拜托!这正是我的想法。”
1. Hofstadter, D. 1999. 《哥德尔、埃舍尔、巴赫》。Basic Books。
2. Thompson, K. 1984. 论信任的信任的反思。《 通讯》27 (8): 761-763; http://m.cacm.acm.org/magazines/1984/8/10471-reflections-on-trusting-trust/pdf.
喜欢它,讨厌它?请告诉我们
Poul-Henning Kamp ([email protected]) 编程计算机已有 26 年,并且是 bikeshed.org 背后的灵感来源。他的软件已被广泛用作开源和商业产品中的“幕后”构建模块。他最近的项目是 Varnish HTTP 加速器,它被用于加速 Facebook 等大型网站。
© 2011 1542-7730/11/0900 $10.00
最初发表于 Queue 第 9 卷,第 9 期——
在 数字图书馆 中评论本文
Mark Russinovich, Cédric Fournet, Greg Zaverucha, Josh Benaloh, Brandon Murdoch, Manuel Costa - 机密计算证明
证明是用于完整性和隐私的强大工具,使验证者能够委托计算并仍然验证其正确执行,并使证明者能够对计算的细节保密。 CCP 和 ZKP 都可以实现可靠性和零知识,但存在重要差异。 CCP 依赖于硬件信任假设,这产生了高性能和对证明者的额外保密保护,但对于某些应用程序来说可能是不可接受的。 CCP 也通常更易于使用,特别是对于现有代码,而 ZKP 带有大量的证明者开销,对于某些应用程序来说可能是不切实际的。
Raphael Auer, Rainer Böhme, Jeremy Clark, Didem Demirag - 中央银行数字货币的隐私格局
随着世界各地的中央银行转向数字化现金,隐私问题需要提到首位。所采取的路径可能取决于每个利益相关者群体的需求:注重隐私的用户、数据持有者和执法部门。
Sutapa Mondal, Mangesh S. Gharote, Sachin P. Lodha - 个人信息隐私
每次与外部服务的在线交互都会创建关于用户的数字记录和存储数据。这些外部服务可能是信用卡交易、医疗咨询、人口普查数据收集、选民登记等。尽管表面上收集数据是为了向公民提供更好的服务,但个人的隐私不可避免地会面临风险。随着互联网的日益普及和生成的数据量不断增加,数据保护,特别是保护个人隐私,已变得尤为重要。
Kallista Bonawitz, Peter Kairouz, Brendan McMahan, Daniel Ramage - 联邦学习与隐私
集中式数据收集可能会使个人面临隐私风险,并使组织面临法律风险(如果数据管理不当)。联邦学习是一种机器学习设置,其中多个实体在中央服务器或服务提供商的协调下协作解决机器学习问题。每个客户端的原始数据都存储在本地,并且不进行交换或传输;相反,使用旨在立即聚合的重点更新来实现学习目标。