存储AES_ENCRYPT密钥

问题描述 投票:1回答:3

这是关于使用AES_ENCRYPT对插入MySQL数据库中的数据生成加密的一个安全性问题。

存储用于加密数据的密钥的最佳位置是什么?显然不在数据库中! :)

mysql security aes
3个回答
1
投票

嗯,您没有太多选择。只要您将该密钥(数据库,代码,文件)放在任何位置,只要其他人都可以访问该计算机,就可以轻松找到它。

您可以做的是,根据某个密码(不存储在任何地方,至少不在本地),用另一个密钥对该密钥进行加密,然后在应用程序启动时要求输入该密码。这样,您可以将加密的AES_ENCRYPT密钥存储到数据库中,使用密码登录后将其解密并开始使用它。


1
投票

Security by obscurity

如果您的Web服务器受到威胁,则无论密钥存储在哪里,攻击者都可以访问该密钥-因为代码必须能够找到进行加密/解密的密钥-并且代码说明了在何处找到密钥。唯一能带来真正价值的方案就是保护应用程序外部(例如,备份磁带上)的数据。但是,由于您正在损害DBM优化查询的能力并创建更大的数据占用空间(例如备份),因此加密备份或文件系统(而不是单个数据项)更有意义。

即使您使用不是永久存储在应用程序中的密钥(例如,通过SSL提供的HTTP基本身份验证密码),仍然存在很多数据被泄露的风险-并且您之间存在共享数据的问题不同的用户。

为了提供合理的答案,我们需要知道什么是威胁模型以及您是否有外部约束,例如PCI-DSS


0
投票

虽然可以将它安全地存储在服务器上的PHP / Python /其他应用程序中使用的密钥和密码在服务器上的问题不仅与隐藏已获得服务器根权限的攻击者的密钥不相关

© www.soinside.com 2019 - 2024. All rights reserved.