如何在CBC中发送矢量进行解密?

时间:2019-05-04 13:30:04

标签: vector aes crypt cbc-mode

我希望从客户端(使用aes-256-cbc和服务器和客户端都已知的Secret-Password)对字符串进行加密。 然后,我想解密它(在服务器端)。

我有一个可以正常工作的代码(从功能上来说)。但是似乎我需要将IV向量从客户端发送到服务器。 我目前是这样的:

slug_en

因此,在服务器上,我用“点”作为分隔符分割了有效负载,并认为第一项是矢量。

我认为这样发送IV不利。 您能帮我了解它如何工作吗?

1 个答案:

答案 0 :(得分:0)

在CBC加密模式下,发送未经加密的IV是正常的,只要IV是不可预测的,就没有什么可担心的。请参阅密码学的Why is CBC with predictable IV considered insecure against chosen-plaintext attack?问题。

发送IV的一种常见方法是将其放在密文之前。通常,这些库旨在提取第一个16字节或在字节数组中启用偏移量。

CBC操作模式已过时。它具有填充oracled攻击的许多问题。您应该使用不需要填充的更好的替代身份验证加密(AE)模式作为AES-GCM和ChaCha-Poly1305。另外,在AE中,您将拥有机密性,完整性和身份验证,而CBC仅支持机密性。

AS模式提供了您需要随IV传输的身份验证标签。惯常做法;在IV前面加上标签并将其附加到密文中。

 IV || Ciphertext||Tag