我想知道,从理论上讲,云托管提供商是否可以为客户运行应用程序,而客户不信任托管提供商将应用程序中的数据交给他们。客户将上传虚拟机映像(或类似映像),主机将运行它,但无法读取其任何数据。
这似乎是不可能的,因为客户机必须解密内存中的数据才能使用它,而主机可以随时直接读取虚拟机的内存。
有没有什么技巧可以解决这个问题?或者有什么部分解决方案可以让主机更难访问虚拟机内的数据?
编辑:我意识到来宾可以轻松存储它永远不会解密的加密数据,例如从一个用户传递给另一个用户的加密电子邮件。我想知道来宾可以读取的数据是否对主机来说是不可读的。
答案1
简而言之,不是的。
根据定义,主机有权访问全部客户端可以访问的数据。其中包括内存、磁盘、网络缓冲区、CPU 缓存等。
客户机需要保留可用的解密密钥,以便它可以读取加密块(通常在 RAM 中),而主机可以轻松读取加密块。
为了回应上面的评论,如果您不信任主机,请找到另一个您信任的主机,或者自己托管。
答案2
这并不像看上去那么不可能。同态加密系统允许对加密数据执行计算操作,而无需先解密。
然而,它似乎并不特别实用(至少到目前为止)。首先,即使是迄今为止开发的“完全”同态密码系统也只能计算二进制电路的输出,而不是计算机程序的输出——尽管二进制电路有点通用,但您必须将您想要的任何计算重新表述为该形式才能执行它。即便如此,它也不是很高效:根据维基百科文章,“2014 年末,使用 HElib 重新实现 AES 加密电路的同态评估,报告称在 120 个输入上评估时间仅为四分钟多一点,将每个输入的摊销时间缩短至约 2 秒。”将其与具有 AES 加速的 Intel CPU 的性能报告进行比较:[本文] 报告 2.60GHz Haswell CPU 在 AES-128-CBC 中的速度达到 663.8 MiB/s,如果我的计算正确的话,这比同态加密计算快大约 9000 万倍。