是否无法验证网站是否在生产中使用其公开发布的源代码?

Is it impossible to verify that a website is using their publicly released source code in production?

这是一个有点奇怪的问题,我在互联网上的任何地方都没有看到类似的问题。

我想做什么

我想发布我网站的源代码。除此之外,网站的性质(如下所述)使我不仅要发布源代码,而且我希望我网站的用户能够明确地验证他们使用的是 源代码转储中的网站版本。

让事情变得艰难的部分是我的善意不可信。 (显然,它可以,因为我要讲到这个长度,但从用户的角度来看,它不能)。

我的(心理练习)试图解决这个问题

尝试 1

所以,我首先想到的是对源代码进行哈希处理,甚至对 运行 所在的整个 docker 容器进行哈希处理,并提供一个广播该哈希的端点,以便它可能与 public 源代码匹配。

尝试 2

我想到的第二件事是为用户提供只读 shell 登录,以便他们能够散列正在 运行 的 docker 图像。这里的问题是,无法验证 docker 图像是否是 运行ning(据我所知)。我可以构建 public 源代码的图像并将其放在那里供用户散列。

此外,出于安全考虑,我真的很讨厌将用户置于生产环境附近的想法。

尝试 3

最后,我想知道如果我使用某种类型的区块链技术,比如分布式应用程序,是否可以解决问题。但这太复杂了,我认为它不会提供额外的信任。

我为什么要这样做

我正在建立一个网站来处理难以置信的个人数据。如果其中任何一个被泄露,它可能会毁掉人们的生活(不,TLD 不是 .xxx 或类似的东西。事实上,这些数据没有任何违法行为)。然而,与数据类型相关的强烈社会耻辱感,实际上(在某些国家/地区)有足够的证据可以对用户判处死刑,如果任何数据泄露的话。

所以,除了有一个非常明确(和安全)的隐私政策外,我想向我的用户做出开源承诺,这样问题就可以被志愿者发现并迅速消除。此外,他们还可以验证我没有在 运行ning 生产版本中添加代码以对他们进行额外的监视。

这种事情理论上可能吗?

只要服务器以 [​​=16=] 可以读取的格式接收一些这种令人难以置信的个人用户数据,就没有完美的方法。您必须让用户在上传数据之前使用只有他们知道的密钥加密数据。
如果不涉及数据传输,则用户可以在浏览器中检查代码并手动比较哈希。也许有一种自动的方法可以做到这一点。无论如何,所有关于数据的工作都必须在客户端执行。

核心问题是用户必须信任整个环境,从编译器的源代码到执行 OS 和硬件。
你不能通过密码确保你不拦截底层的 运行ning 程序并在那里读出数据,即使你有可能确保你 运行 服务器上的确切代码.

"Trust",您可以根据合法性和隐私政策进行构建。

我们都愿意在许多 applications/systems 中将我们的敏感数据在线保存,我们从不检查系统的源代码或架构是否与他们最初承诺的相同。

正如 @tyWhosebug 所说,在代码中构建后门并不是确保系统用户的数据无法被其他任何人访问的唯一方法。在这种情况下,您的系统架构还应该支持更高级别的数据加密,任何人(除非通过系统访问)都不能直接访问它。

我明白这些数据泄露的风险,
这完全取决于您如何将系统设计为防篡改和安全,以及如何将您在应用程序中内置的安全措施背后的理念传达给用户。

祝项目顺利!