如何使用CBC和HMac? Mcrypt PHP

时间:2012-09-16 09:16:21

标签: php security mcrypt hmac cbc-mode

你如何使用CBC和HMAC?

我在互联网上找不到足够的信息。

你如何获得IV?当你需要稍后解密时,你怎么知道它是什么? (不会把它放在数据库中会失败的目的吗?)

什么是HMAC,它是否受到黑客攻击?

加密文本保留在数据库中。如果有人攻击数据库,他们可能也可以访问文件管理器,除非他们找到了一种方法来进行SQL注入。脚本如何知道哪个IV和密钥使用,黑客不知道?

加密多段文本时使用的最佳方法是什么,只有在编写它的用户的网站内才能看到? (用户始终将其视为纯文本。)

我现在使用ECB(该网站尚未发布测试版)但我听说CBC更安全。

1 个答案:

答案 0 :(得分:3)

IV的主要目的是每个加密都不同。这不是秘密。为每个加密创建随机IV是标准的,并将其存储为密文的前缀。

HMAC是一个MAC,它确保只有知道密钥的人创建的消息才被接受为有效。加密后应用MAC并包含IV非常重要。即HMAC(IV+Encrypt(...)),因此在解密之前验证它。这可以避免某些攻击,例如填充神谕。

使用经过身份验证的加密模式也值得考虑,例如AES-GCM,它以安全的方式结合了身份验证和加密。只是确保在这种情况下你永远不会重复使用IV。


存储密钥的位置是一个难题,而且非常依赖于应用程序。正如您所注意到的那样,将密钥存储在与数据库相同的系统上并不会带来太多好处。

有时,使用带有盐的缓慢KDF(例如PBKDF2)从用户密码派生密钥是个好主意。有时您可以将其存储在客户端上。有时您可以将其存储在具有较小攻击面的其他服务器上。

要确定存储位置,您需要明确的要求和威胁模型。