【问题标题】:Encrypting sensitive data with mcrypt使用 mcrypt 加密敏感数据
【发布时间】:2012-08-11 19:18:13
【问题描述】:

大家好,我有一个关于加密/解密个人敏感信息的安全问题:身份(姓名、地址、电话号码)、银行详细信息(排序代码和帐号)几乎所有内容都已加密,并且只能由本人访问并由授权人使用个人数据。现在主要的问题是: 1. 我的方法够安全吗?
2. 有没有更好的方法?
3. 我应该在哪里使用来自数据库或 $_SESSION 的密钥?(最好在哪里使用它们进行解密以便用户查看他的详细信息)

这里是代码:
$iv = mcrypt_create_iv(32, MCRYPT_RAND);
$key = mcrypt_create_iv(32, MCRYPT_RAND);
$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $unencrypted, MCRYPT_MODE_CBC, $iv);

这是在我将数据发送到数据库之前加密数据

$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $encrypted, MCRYPT_MODE_CBC, $iv );

这是解密方法。(使用上面示例中的 $encrypted、$key 和 $iv)。

【问题讨论】:

  • 您将生成的密钥和 IV 存储在哪里?

标签: php security mcrypt sensitive-data


【解决方案1】:

加密任何敏感信息并将密钥存储在数据库中没有安全优势。这与锁定保险箱并将钥匙留在钥匙孔中相同。至少您需要将密钥存储在文件系统上,而不是数据库中。在这种情况下,如果您的数据库被泄露(例如由于 SQL 注入攻击),攻击者将无法解密它,因为他们没有密钥。

编辑 没有办法保护包含密钥的文件,因为 PHP 需要读取它才能进行所需的操作。但是,您可以使用 HSM(硬件安全模块)设备将密钥存储在那里。以YubiHSM 为例。

【讨论】:

  • 是的,这实际上是一个好点。好的,我应该如何保护文件?
猜你喜欢
  • 2021-04-10
  • 2012-07-12
  • 2016-10-08
  • 2013-03-24
  • 2014-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多