繁体   English   中英

在MySQL中存储敏感数据的最佳方法是什么?

[英]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()以加密形式存储数据。

但是,这些功能存在一些缺点,

  1. 它不支持IV或块链接。 相同的文本总是加密成相同的密文,因此它不适合密码等敏感数据。

  2. 没有关键信息,所以旋转键非常困难。

有一些基本的方法可以做到这一点(除非你提供一些关于你想要完成什么的更全面的信息)。

  • 禁用远程访问。
  • 监控MySQL访问日志。
  • 需要使用来自客户端的强大安全的密码。
  • 在存储到数据库之前,清理所有用户输入。
  • 配置您的PHP以确保安全性。 (register_globals,safe_mode等)
  • 正如所指出的,使用mysql内置加密函数。 http://dev.mysql.com/doc/refman/5.1/en/encryption-functions.html

如果你要保护自己不要成为黑客,这应该没问题。 我再次要你详细说明一下。

您还必须考虑所需的安全级别与算法的速度。

有一个非常有用的答案有太多的信息,但这里是常见的情况:

如果您将密码存储在应检查用户输入是否正确但您不需要原始数据本身的位置,则可以存储哈希值(SHA1 / SHA2)。 查找哈希的所有实践,以正确执行此操作。

如果需要回读原始数据,可以使用加密功能。 AES是一种很好的对称加密选择。 但是,这里的问题变成了关键管理。 您在哪里存储用于加密/解密的密钥? 这是一个非常常见的问题,根据具体情况,这是不同的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM