0

你如何使用CBC和HMAC?

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

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

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

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

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

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

4

1 回答 1

3

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

HMAC 是一个 MAC,它确保只有知道密钥的人创建的消息才被接受为有效消息。重要的是在加密后应用 MAC 并包含 IV。即HMAC(IV+Encrypt(...)),从而在解密之前对其进行验证。这避免了某些攻击,例如填充预言。

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


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

有时,从用户密码中获取密钥是一个好主意,使用带有盐的慢速 KDF,例如 PBKDF2。有时您可以将其存储在客户端上。有时您可以将其存储在具有较小攻击面的不同服务器上。

要确定将其存储在哪里,您需要明确的要求和威胁模型。

于 2012-09-16T10:17:12.337 回答