encryption和安全docker集装箱

我们都知道,当你不能开源和自由分发软件的情况下,我正处于这些情况之一。

我有一个应用程序,它包含许多二进制文件(从C源代码编译)和Python代码,它们都包含在一个系统中。 这个应用程序曾经作为一个云解决scheme,所以用户可以通过networking访问应用程序function,但没有机会触摸存储二进制文件和代码的实际服务器。

现在我们要提供我们系统的“本地”版本。 该应用程序将运行在我们的用户将物理拥有的个人电脑上。 我们知道,一切都可能被破坏,但至less要尽可能保护应用程序免受可能的复制和逆向工程。

我知道docker是一个非常棒的部署工具,所以我想知道:可以创buildencryption的docker容器,其中没有人可以看到存储在容器文件系统中的任何数据。 有没有解决这个问题的已知方法?

另外,也许有不是基于docker的众所周知的解决scheme?

你在问什么叫做混淆 。 它与Docker无关,是一个非常特定于语言的问题。 对于数据,你总是可以做任何你想要的东西,但是当你希望阻止攻击者时,它永远不会安全。 即使是最先进的encryptionscheme也无法提供帮助,因为程序(您提供的)必须包含密钥。

C通常很难进行反向工程,对于Python你可以尝试pyobfuscate和类似的 。

对于数据,我发现这个问题 (关键字: encryption文件游戏 )。

主机上的root用户(运行docker守护程序的用户)可以完全访问主机上运行的所有进程。 这意味着控制主机的人可以随时访问应用程序的RAM以及文件系统。 这使得无法隐藏解密文件系统的密钥或保护RAM免于debugging。

在标准Linux机器上使用模糊处理,可以使读取文件系统和RAM变得更加困难,但是不能使其变得不可能,或者容器无法运行。

如果您可以控制运行操作系统的硬件,那么您可能需要查看在系统引导后立即开始系统validation的可信平台模块 。 然后理论上你可以在root用户访问系统之前做些事情来隐藏密钥并强制encryption文件系统。 即使这样,在物理访问机器的情况下,确定的攻击者总是可以获得解密的数据。

如果你想要一个完全安全的解决scheme,你正在寻找机密性的“圣杯”:同形encryption。 简而言之,你想要encryption你的应用程序和数据,将它们发送到PC,并让这台PC运行它们,而不需要它的所有者,操作系统或任何其他人能够获取数据。 这样做没有大规模的性能损失是一个积极的研究项目。 至less有一个项目pipe理了这一点,但它仍然有局限性:

  1. 这是只有窗户
  2. CPU可以访问密钥(即,你必须信任英特尔)
  3. 它针对云场景进行了优化。 如果你想把它安装到多台电脑上,你需要以安全的方式提供密钥(例如,只需要去那里,然后自己input)到你要安装你的应用程序的电脑之一,这台电脑应该能够安全地将密钥传播给其他PC。

安迪关于使用TPM的build议对第2点和第3点也有类似的影响。

听起来像Docker不是正确的工具,因为它从来没有打算用作一个成熟的沙箱(至less根据我一直在阅读)。 你为什么不使用更全面的VirtualBox方法? 至less可以lockinglogin后面的虚拟机(就像其他人的计算机上的物理安装一样可以locking),并运行隔离的encryption文件系统和整个九码。

你可以去轻量级,打开,或胖,closures。 我不知道有一个“轻量级和封闭”选项。