使用 mcrypt 加密敏感数据
Posted
技术标签:
【中文标题】使用 mcrypt 加密敏感数据【英文标题】:Encrypting sensitive data with 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 存储在哪里? 【参考方案1】:加密任何敏感信息并将密钥存储在数据库中没有安全优势。这与锁定保险箱并将钥匙留在钥匙孔中相同。至少您需要将密钥存储在文件系统上,而不是数据库中。在这种情况下,如果您的数据库被泄露(例如由于 SQL 注入攻击),攻击者将无法解密它,因为他们没有密钥。
编辑 没有办法保护包含密钥的文件,因为 php 需要读取它才能进行所需的操作。但是,您可以使用 HSM(硬件安全模块)设备将密钥存储在那里。以YubiHSM 为例。
【讨论】:
是的,这实际上是一个好点。好的,我应该如何保护文件?以上是关于使用 mcrypt 加密敏感数据的主要内容,如果未能解决你的问题,请参考以下文章