比如说,我正在 AWS 等云服务器上运行应用程序。假设我在运行时提供了一个密钥(所以它没有存储在代码旁边/内部的任何地方),有没有办法在内存中保护这个密钥?
因此,如果攻击者稍后可以访问远程服务器,他仍然应该无法从内存中提取密钥。有没有办法实现这一目标?还是已知理论上是不可能的?
这里讨论的技术,透明的运行时安全,声称使其“困难”,但它在计算上仍然是可行的。
编辑:基于硬件的解决方案也可以。
比如说,我正在 AWS 等云服务器上运行应用程序。假设我在运行时提供了一个密钥(所以它没有存储在代码旁边/内部的任何地方),有没有办法在内存中保护这个密钥?
因此,如果攻击者稍后可以访问远程服务器,他仍然应该无法从内存中提取密钥。有没有办法实现这一目标?还是已知理论上是不可能的?
这里讨论的技术,透明的运行时安全,声称使其“困难”,但它在计算上仍然是可行的。
编辑:基于硬件的解决方案也可以。
我在这里回答了一个类似的问题。对于普通的硬件解决方案,硬件安全模块 (HSM)会执行此操作。对于软件,.NET 提供安全字符串机制来加密和保护 RAM 中的敏感数据。其他平台可能会提供类似的东西。我认为,对于 AWS 解决方案,Amazon 提供CloudHSM几乎可以满足您的要求。
来自 AWS:
HSM 是硬件安全模块的缩写。它是一种硬件——一种在防篡改外壳内提供安全密钥存储和一组加密操作的专用设备。您可以将密钥存储在 HSM 中,并使用它们来加密和解密数据,同时确保它们安全无虞并由您完全控制。您是唯一可以访问存储在 HSM 中的密钥的人。
AWS CloudHSM 服务将 HSM 的优势带到了云中。您保留对您创建的 HSM 执行的密钥和加密操作的完全控制,包括对每个 HSM 的独占、单租户访问。您的加密密钥受到防篡改 HSM 的保护,该 HSM 旨在满足许多国际和美国政府标准,包括 NIST FIPS 140-2 和通用标准 EAL4+。
虽然其他人都建议了硬件解决方案,但我会建议一个软件解决方案(尽管我并不是暗示它比使用 HSM 更好或更差 - 您必须根据自己的情况自行决定需要)。这个解决方案是一个加密进程的内核补丁。
RamCrypt 是一个在 XEX 模式下使用 AES128 对单个进程的大部分内存进行加密的项目,因此进程中的所有机密在内存中都是安全的,即使所有内存都是通过取证获取的。内存使用 TRESOR 加密,因此加密密钥永远不会出现在 RAM 中。它将密钥保存在 x86 调试寄存器中,因此它们内存不足,并使用 AES-NI、通用寄存器和 SSE 寄存器进行所有 AES 计算,因此它永远不会进入主内存或 CPU 缓存。然后该密钥用于加密和解密整个进程的内存页面。只有 4 个页面未加密,其他所有页面都已加密。当需要访问加密页面时,使用 AES 密钥对其进行解密,并对 4 个未加密页面之一进行加密。RamCrypt 作为内核补丁提供,并且您可以调整未加密的页面数,以在性能和安全性之间进行权衡。查看项目的主页和 相关 的研究 论文.
我不确定我是否正确。但是在某些时候,简单的秘密必须在某种内存中(很可能是 RAM)。如果攻击者当时可以读取内存,并且如果他能够找到秘密,他就可以在之后解密数据。
我认为理论上不可能有办法(可能有一些包含您的程序代码的特殊安全模块)将秘密保存在内存中,而攻击者没有任何机会找到它。总有一种算法可以找到密钥(必须有,因为您想在自己的代码中使用密钥)。但正如论文中指出的那样,找到钥匙真的很难。
只是一个旁注:我也没有看到生成一个没人知道的随机秘密然后不将其存储在任何地方的用例。
干杯
从根本上说,没有什么可以绝对解决这个问题。您遇到了 DRM 问题,即您需要对系统上的某些数据进行明文访问以实现某些功能,但是您还将该系统置于不受信任的一方的控制之下。你能做的最好的事情就是让除了最坚定和最熟练的攻击者之外的所有攻击者都变得异常困难,从本质上说,这对他们来说是一个糟糕的成本/收益权衡。
就难以解决问题的解决方案而言,硬件安全模块 (HSM)等设备应该几乎是您列表的首位。他们利用一系列旨在使非法从中恢复信息变得极其困难的功能。例如,一个常见的特征是使用存储在单独板上的易失性存储器(例如 DRAM)中的密钥对数据进行加密,该板上物理地连接到设备的上壳。该板的电源和数据连接通过主板上的焊盘通过接触连接器(通常由导电聚合物或泡沫制成)提供,主板物理连接到设备的下壳。如果您尝试打开设备,则会将电路板分开,从而断开 DRAM 的电源并丢失密钥。附加传感器,例如光、温度、压力、加速度和位置(包括
在某些情况下可能对您有用的另一个潜在系统是同态密码系统的概念。通俗地说,同态本质上是密码系统的属性,它允许对加密形式的数据执行某些操作,而无需首先解密数据。有多种可用的方案,其中一些甚至适用于某些类型的场景,但它们通常在性质上非常复杂并且可能特别慢。我不知道有任何现有的密码系统以有利于云存储应用程序的方式提供同态。