我正在尝试实现一个aes128gcm加密算法,这样我就可以在网上推送通知。然而,我错过了一些东西,因为我找不到在任何地方使用盐的目的。
加密内容编码头必须具有salt值,即16字节长。它是否用于沿所提供的公钥生成128位密钥?或者在加密过程中我应该在其他地方使用它呢?
事先谢谢,我对这个世界有点陌生,似乎在任何地方都找不到答案。
发布于 2017-08-18 20:03:18
AES128GCM加密算法中的SALT角色是什么?
没有。Salt通常用于随机化密码散列,但这不是AES-GCM的一部分,它需要密钥(不是密码!)、IV和明文来生成密文和身份验证标记。
当然可以使用salt和密码来派生密钥,但这不是AES-GCM的一部分。
发布于 2017-08-18 12:40:59
如果您有一个完全确定性的加密算法,那么它很容易受到字典攻击。
例如,如果“密码”总是加密到“qbttx启示”,那么攻击者可以查看加密密码的列表,并知道无论他在哪里看到“qbttx型式”,普通密码都是“密码”。
我遇到了一个消息传递系统,在这个系统中,消息是在没有盐的情况下被加密存储的。一个客户经常发送相同的消息。虽然您无法知道内容是什么,但是您可以知道有多少消息是相同的。攻击者可以利用这一点。
当然,有很多更微妙的方法可以利用这个属性。
为了避免这种情况,我们在诉讼程序中引入了一个盐。
因此,您需要为每条消息随机生成16字节的盐分,并且您需要在传输协议中腾出空间来与密文进行通信。只要把它放在密文前面就可以了。
如果您硬编码一个固定的盐类,并在两端使用它,它将“工作”在某种意义上,您将能够加密和解密以相同的消息--但您将有我描述的漏洞。
顺便说一句,围绕加密算法设计协议充满了极其微妙的陷阱,最好留给真正的专家(我有20年在安全互联网协议方面的工作经验--我也不相信自己会设计一个防弹加密层)。尽可能使用已建立的东西(例如SSL或S/MIME)。
https://stackoverflow.com/questions/45756502
复制相似问题