使用 mcrypt 加密敏感数据


Encrypting sensitive data with mcrypt

大家好,我有一个关于加密/解密个人敏感信息的安全问题:身份(姓名、地址、电话号码)、银行详细信息(分类代码和帐号) 几乎任何东西都是加密的,只有个人本人和授权人员才能使用个人数据。现在的主要问题是: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)。

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

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