我在开源Have I be Pwned Code Base

2020-08-07 18:47:21

让我直截了当地说:我将把Have I be Pwned代码库开源。这一决定已经做出了一段时间,经过失败的并购过程才来到这里,但代码将被提交给公众,以改善项目,坦率地说,也是为了改善所有使用它的人。让我解释一下原因和方法。

我最近一直在思考我希望这个项目如何发展,特别是在并购过程于今年早些时候结束之后,就在我开始的时候:一切都由我独自负责。这个过程最重要的一个目标是为HIBP寻求一个更可持续的未来,这个愿望并没有改变;这个项目不能完全依赖我。然而,这就是我们今天的状况,如果我消失了,HIBP很快就会枯萎和死亡。

自从并购过程以来,我对未来进行了更深入的思考,社区贡献的重要性确实击中了要害。最近几年加载到系统中的每一个字节的数据都来自于某个为了改善每个人的安全环境而免费提供这些数据的人。HIBP运行的许多服务都是由Cloudflare等公司免费提供的。编写的大部分代码都利用了社区贡献,要么是人们公开发布的内容,要么是直接提供给我的支持。

就在昨天,当我来自Cloudflare的朋友朱纳德·阿里(Junade Ali)发布了这篇帖子时,我想起了这一点:

现在@LastPass已经使用我和@TroyHunt设计的k-匿名API添加了被攻破的密码通知,加入了@1Password、Okta PassProtect、苹果、谷歌等https://t.co/fyOKbZWNNF。

-Junade Ali(@Icy4月5日)2020年8月5日。

这条推文并不完全准确;这都是朱纳德的主意,他为HIBP的Pwned密码设计了k-匿名性实现。免费的,因为他是个好人,克劳德弗莱尔支持他。LastPass现在也采用了同样的模式,他们效仿了朱纳德提到的其他知名公司。我相信我也代表他说,我们非常高兴其他公司也采用了我们首创的模式,并将其应用到自己的服务中,因为归根结底,这符合每个人的最大利益。这句话的意思是,我们非常高兴其他公司也采用了我们首创的模式,并将其应用到自己的服务中,因为归根结底,这符合每个人的最佳利益。

HIBP的理念一直是支持社区,现在我希望社区帮助支持HIBP。

开源代码库是实现这一点的最明显的方式。它将HIBP的具体细节交给那些能够帮助维持这项服务的人手中,无论我发生了什么。但这不只是一个基于想要卸掉工作的哲学决定,它也是一个常识,原因有很多。让我解释一下:

我已经在之前128篇被标记为“我已经被打了Pwned”的博客帖子中,写了很多关于系统架构的文章。关于这个标签的第二篇博客文章是关于我如何使用Azure Table Storage让它变得如此快速和廉价。一旦它变得流行起来,我就写下了我是如何优化它的性能的。当我开始使用Azure函数时,我写了关于无服务器计算的乐趣,以及我是如何在HIBP中实现它的。当我写到使用Cloudflare Workers来进一步优化性能和降低成本时,我甚至更上一层楼。

重点是,HIBP的设计一直都是完全公开的,这不像是我一直试图在这里保护的任何专有的秘密酱汁。

现在有一大堆非常棒的项目都是开源的。例如,visual Studio代码就是开源的。这个博客运行的平台Ghost是开源的。HIBP使用的大多数库都是开源的。我不仅在谈论开源领域的开源,其他人也可以自由阅读它,而且我也在谈论开源,就是从获取贡献的角度来考虑的一种方式。在这种方式下,我不仅在谈论开源,也在谈论其他人可以自由阅读的那种方式,而且我也在谈论开源,就是从接受贡献的角度来看。

这实际上让我思考--我每天使用的产品和服务中有多少是开源的?今天早些时候,我在推特上问了这个问题,答案是,嗯,涉及面很广:

我也喜欢微软仍然是开放源码最大的企业贡献者之一,甚至可能是最大的贡献者,这取决于你想要如何定义度量标准。开源存在于HIBP赖以建立的一切事物的DNA中。

将代码公之于众,对于解决人们对服务运营方式的担忧大有裨益。例如,人们经常质疑我记录搜索是否是为了建立一个新的电子邮件地址列表。不,我不是,但目前这一断言实际上只是归结为相信我。显示代码--实际的代码--和证明没有记录的东西是非常不同的主张。

代码的透明性反映了我一次又一次应用于HIBP运行方式的精神。我对如何验证数据是透明的。我对政府使用这项服务的情况是透明的。当我搞砸和系统中断时,我是透明的。代码透明化感觉是有史以来最自然的事情!

开源的HIBP代码库让我有机会解决我最初打算用并购流程解决的问题:寻找其他可以帮助维持项目的人。如果社区愿意,所有那些积压的工作、所有的错误、人们拥有的所有伟大的新想法,但我根本无法实现自己的想法,最终都可以重新投入到这个项目中。

这是我坚定不移的;这里的目标不仅仅是说,嘿,看看代码,它不是在记录你的搜索,它的根本目的是让HIBP成为一项更可持续、更具特色的社区服务。坦率地说,我想不出一个好的理由来解释我为什么不做这件事。但也就是说,它也不像听起来那么微不足道,所以让我来谈谈整个事情的实用性。

2013年,我开始在飞往菲律宾的飞机上写HIBP,降落后在酒店房间里写完了一大堆。在那之后的近7年里,我一直在零星地吃东西,经常是在旅行、倒时差和全神贯注的时候从笔记本电脑上拿出来的。我已经抄近路了。我已经破解了一些相当杂乱的东西。我以前可能已经登记过秘密,当你是唯一一个接触到项目的人时,你可以逃脱所有这些事情,但一旦你开始开源,就不会了。

HIBP还不能简单地在GitHub中展示它的可见性,但它需要达到这一点。相反,我需要选择项目的正确部分,以便在正确的时间以正确的方式开放。仅这一项练习就需要帮助,现在有一段时间,我一直在和这个领域里我认识的一些最聪明的人交谈。生活和呼吸开源的人,对.NET和Azure了如指掌的人,对HIBP非常了解的人,最重要的是,我信任的人会揭露我自己的缺点,这样他们就可以帮助我使这件事更具可持续性。在他们的支持下,从完全封闭到完全开放的转变将以一种既可管理又负责任的方式逐步进行。让我澄清一下:我还没有一步一步的时间表,因为HIBP仍然是我在业余时间做的事情,而且我总是有一堆其他的事情要做,但这个过程已经开始了,我会尽快分享更多关于这一点的信息。

我想要达到这样一个地步,那就是所有可能的事情都是开放的。我希望基础设施配置也是开放的,我希望整个社区能够自我维持,这样我就可以让自己变得多余。这并不是说我正计划退出(远非如此),但我现在不能退出对HIBP没有好处,坦率地说,这对我也没有好处。

关键是,这篇博客中概述的目标需要时间才能实现,而且它们并不像表面上听起来那么微不足道。当我有机会的时候,HIBP仍然是我钟爱的项目,在那里的某个地方,我需要做出承诺,让它达到我在这篇博客文章中的目标。

我真的需要清楚地把这一部分的讨论分开,因为虽然开源代码库是一回事,但如何处理数据则完全是另一回事。没有办法粉饰这件事,所以我就直截了当地说:HIBP的存在只是因为一大堆犯罪活动,导致数据最终落入我手中。当然,情况比HIBP中的大量数据已经在广泛公开传播并通过许多人手中的情况略有微妙。但是,尽管如此,即使拥有它的合法性也仍然是灰色的,虽然有许多互联网纸上谈兵的专家对这个话题发表了自己的观点,但以下是我一直被给予的法律指导,归根结底是:

太好了,不错的律师在那里讲话。(严肃地说,是的,这正是毕马威在并购过程中为我支付了令人眼花缭乱的金额的律师们提供的建议。)。然而,显然,世界上许多最大的公司确实看到了它的价值,并得出结论,持有这些数据是可以接受的。例如,大型科技公司截获了与HIBP完全相同的漏洞,并利用它们来识别跨自己平台的凭据重用:

看起来@Amazon正在重置来自LinkedIn etc@troyHunt pic.twitter.com/NIP5aOfr7W的可能泄露或回退的帐户。

-Ryan Yates(MBCS MVP)#mhasl(@ryanyates1990)2016年6月23日。

然后还有隐私方面的问题:我自己的个人数据都在这些信息泄露中,你的数据几乎肯定也是如此,因为实际上有数十亿人受到了数据泄露的影响。无论这些信息的传播范围有多广,我仍然需要确保在代码基础变得更加透明的情况下,对违规数据本身实施相同的隐私控制。这可不是小事。可行,但不是微不足道的。

这是我想了很久的事情。开源HIBP的概念被一次又一次地提出,它经历了一次失败的并购过程,帮助我意识到这是最好的前进道路,但现在我们来到了这里。

在这篇文章中,我经常使用“社区”这个词,我不能低估其他人在这个项目成功中所扮演的角色的重要性。为了真正阐明这一点,看看过去两周HIBP发生了多少次违规事件。在我写这篇文章的时候,这16次泄露涉及95,850,490条记录,其中每一条都是对社区的贡献;有人无私地站出来,相信我会以他人的最佳利益来处理这些数据。我在这里特别关注这一短时间范围,因为它还展示了不断涌入的数据以及更有效地扩展自己的需要。

因此,这就是HIBP的发展方向。我知道这篇博客文章会引起很大的热情,因为这是你们中的许多人长期以来一直告诉我要做的。我听过了,现在是时候把它变成现实😊了