背景:
我在数据库中有一些使用AES(对称加密)加密过的数据。运行在一个假定为安全且隔离的Linux机器上的服务器端应用程序使用这些数据。它从数据库中读取加密数据并写回加密数据,只在内存中处理未加密数据。
因此,为了实现这个目标,该应用程序需要将密钥存储在内存中。
问题是,是否有任何良好的最佳实践来保护密钥的内存安全?
以下是一些想法:
- 将其存储在不可交换的内存中(对于Linux:使用
shmctl(2)
设置SHM_LOCK
?) - 将密钥分割成多个内存位置。
- 对密钥进行加密。使用什么方法,并如何保护关键密钥的安全?
- 每次需要时从文件中加载密钥(缓慢,如果恶意攻击者可以读取我们的内存,他可能也可以读取我们的文件)
关于密钥泄漏的一些情况:恶意攻击者获取到内存转储/核心转储;代码中糟糕的边界检查导致信息泄露;
第一个想法似乎是非常好而且相当简单的方法,但其他方法呢?还有其他的想法吗?是否有标准规范/最佳实践?
感谢任何意见!