Managing and storing AES keys in a webserver application
我有一个Web服务器应用程序,它接收上传的文件,使用aes256对其进行加密和解密。我加密了它们,所以一个潜在的黑客,不知何故进入了存储,不能对这些文件做任何事情。目前,每个文件都使用相同的硬编码密钥进行加密。
用存储在数据库中的另一个随机密钥加密每个文件是否更安全,可能是散列的(也可能是salt的)?这是否提供了更高级别的安全性?或者在数据库中存储这样的键会更糟吗?
密钥存储是一个非常基本的问题,如果没有非常特殊的硬件,很难解决。
只要将密钥与加密数据存储在同一台计算机上,攻击者就会同时获得这两个密钥。如果你有更多的钥匙,这不会从根本上改变。
您也不能散列/加盐键,因为散列是一个单向函数,只使用存储的散列,您自己(或您的应用程序)将无法计算键,因此这是毫无意义的。
如果可行,您可以在应用服务器启动时手动输入密钥,因此密钥只保存在RAM中,而不是磁盘上。确保它不会被调出以交换分区。
如果你可以加密文件客户端(上传前),那么只有用户有密钥,这样会更安全…