[英]What's the best way to store sensitive data in MySQL?
我正在从PHP脚本管理MySQL数据库。 服务器和客户端之间的通信通过SSL保护。 我存储敏感的用户帐户数据。
输入数据库时有没有办法加密这些数据? 保护这些敏感数据的最佳方法是什么?
编辑:我正在使用CRON作业来更新依赖此密码登录用户帐户的数据。 所以我需要一种方法来散列这个密码,并能够获得我的CRON工作任务的原始密码。
实现它的最佳方法是什么?
谢谢
说真的, 不要使用MySQL的aes_encrypt()这是使用分组密码最不安全的方法。 它正在使用ECB模式,我可以给出一个简单的示例演示为什么这是一个严重的错误。
纯文字信息:
使用ECB模式加密的相同消息(与您使用的密码无关):
使用CBC模式的完全相同的消息(再次,你使用什么密码并不重要):
有更多的理由不使用mysql的aes_encrypt,最值得注意的是,你发送的每个查询也都有你使用的aes密钥。 如果数据库受到攻击,攻击者将启用日志记录,只需获取您的密钥并解密整个数据库 。
那你应该怎么用? 我暂时喜欢上课 。 它使用CBC模式,具有String2Key功能和IV。 您可以使用主键作为IV,每条消息必须具有唯一的IV。 如果攻击者知道IV,并且它们是顺序的, 只要分组密码实现是安全的 ,那就没关系。 重复使用IV使WEP更不安全 。
MySQL中有加密函数,
http://dev.mysql.com/doc/refman/5.1/en/encryption-functions.html
例如,您可以使用aes_encrypt()以加密形式存储数据。
但是,这些功能存在一些缺点,
它不支持IV或块链接。 相同的文本总是加密成相同的密文,因此它不适合密码等敏感数据。
没有关键信息,所以旋转键非常困难。
有一些基本的方法可以做到这一点(除非你提供一些关于你想要完成什么的更全面的信息)。
如果你要保护自己不要成为黑客,这应该没问题。 我再次要你详细说明一下。
您还必须考虑所需的安全级别与算法的速度。
有一个非常有用的答案有太多的信息,但这里是常见的情况:
如果您将密码存储在应检查用户输入是否正确但您不需要原始数据本身的位置,则可以存储哈希值(SHA1 / SHA2)。 查找哈希的所有实践,以正确执行此操作。
如果需要回读原始数据,可以使用加密功能。 AES是一种很好的对称加密选择。 但是,这里的问题变成了关键管理。 您在哪里存储用于加密/解密的密钥? 这是一个非常常见的问题,根据具体情况,这是不同的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.