背景:我在数据库中使用 AES(即对称加密)加密了一些数据。在(假定的)安全且隔离的 Linux 机器上运行的服务器端应用程序使用此数据。它从数据库中读取加密数据,并写回加密数据,只处理内存中未加密的数据。因此,为了做到这一点,应用程序需要将密钥存储在内存中。
问题是,有没有什么好的最佳实践呢?保护内存中的密钥。
一些想法:
- 将其保存在不可交换的内存中(对于 linux:
SHM_LOCK
使用shmctl(2)
? 设置) - 将密钥拆分到多个内存位置。
- 加密密钥。用什么,以及如何保持...密钥密钥..安全?
- 每次需要时从文件中加载密钥(速度很慢,如果作恶者可以读取我们的内存,他可能也可以读取我们的文件)
关于为什么密钥可能泄漏的一些场景:邪恶的人掌握了内存转储/核心转储;错误的代码边界检查导致信息泄露;
第一个似乎是一件好事且非常简单的事情,但是其余的呢?其他想法?任何标准规范/最佳实践?
感谢您的任何意见!