你如何使用CBC和HMAC?
我在互联网上找不到足够的信息。
你如何获得IV?当你需要稍后解密时,你怎么知道它是什么? (不会把它放在数据库中会失败的目的吗?)
什么是HMAC,它是否受到黑客攻击?
加密文本保留在数据库中。如果有人攻击数据库,他们可能也可以访问文件管理器,除非他们找到了一种方法来进行SQL注入。脚本如何知道哪个IV和密钥使用,黑客不知道?
加密多段文本时使用的最佳方法是什么,只有在编写它的用户的网站内才能看到? (用户始终将其视为纯文本。)
我现在使用ECB(该网站尚未发布测试版)但我听说CBC更安全。
答案 0 :(得分:3)
IV的主要目的是每个加密都不同。这不是秘密。为每个加密创建随机IV是标准的,并将其存储为密文的前缀。
HMAC是一个MAC,它确保只有知道密钥的人创建的消息才被接受为有效。加密后应用MAC并包含IV非常重要。即HMAC(IV+Encrypt(...))
,因此在解密之前验证它。这可以避免某些攻击,例如填充神谕。
使用经过身份验证的加密模式也值得考虑,例如AES-GCM,它以安全的方式结合了身份验证和加密。只是确保在这种情况下你永远不会重复使用IV。
存储密钥的位置是一个难题,而且非常依赖于应用程序。正如您所注意到的那样,将密钥存储在与数据库相同的系统上并不会带来太多好处。
有时,使用带有盐的缓慢KDF(例如PBKDF2)从用户密码派生密钥是个好主意。有时您可以将其存储在客户端上。有时您可以将其存储在具有较小攻击面的其他服务器上。
要确定存储位置,您需要明确的要求和威胁模型。