我尝试实施aes128gcm加密算法,以便通过网络推送通知。然而,有些东西我不知道,因为我没有找到在任何地方使用盐的目的。
加密内容编码标头必须具有16个字节长的salt值。是否用于沿提供的公钥生成128位密钥?或者我应该在aesgcm加密期间在其他地方使用它?
事先感谢,我对这个世界有点新意,似乎无法在任何地方找到答案。
答案 0 :(得分:1)
如果你有一个完全确定的加密算法,那么它很容易受到字典攻击。
例如,如果“password”始终加密为“qbttxpse”,则攻击者可以查看加密密码列表,并知道无论他在哪里看到“qbttxpse”,普通密码都是“密码”。
我遇到过一个消息传递系统,其中消息是在没有盐的情况下加密存储的。一位客户经常发送相同的消息。虽然你无法分辨内容是什么,但你可以知道有多少消息是相同的。攻击者可以利用它。
当然,有很多更微妙的方法可以利用这个属性。
为了避免这种情况,我们在程序中引入了 salt 。
因此,您需要为每条消息随机生成16字节的盐,并且需要在传输协议中腾出空间与密文进行通信。它可以简单到只是将其添加到密文。
如果您对固定盐进行硬编码,并在两端使用它,它将“起作用”,即您将能够以相同的消息加密和解密 - 但您将拥有我描述的漏洞。
顺便说一句 - 围绕加密算法设计协议充满了极其微妙的陷阱,最好留给真正的专家(我有20年的经验,在安全互联网协议的相当低水平上工作 - 我不会相信自己设计一个防弹加密层)。如果可能的话,使用已建立的东西(例如SSL或S / MIME)。
答案 1 :(得分:0)
AES128GCM加密算法中的SALT角色是什么
无。 Salt通常用于随机化密码散列,但这不是AES-GCM的一部分,它使用密钥(不是密码!),IV和明文来生成密文和认证标记。
当然可以使用salt和密码来获取密钥,但这不是AES-GCM的一部分。