首页 > 解决方案 > 如何在 cbc 中发送向量以进行解密?

问题描述

我期望从客户端加密一个字符串(使用 aes-256-cbc 和服务器和客户端都知道的秘密密码)。然后我想破译它(在服务器端)。

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

00000000000000000000000000000000.JAPQElUAxxxxxxxxxxxjTgJAPQElUAfgydvbY=

因此,在服务器上,我用“点”作为分隔符拆分有效负载,并将第一项视为向量。

我相信这样送IV不好。你能帮我理解它应该如何工作吗?

标签: vectoraescryptcbc-mode

解决方案


在 CBC 加密模式下,发送未加密的 IV 是正常的,只要 IV 不可预测,无需担心。看到这个问题为什么具有可预测IV的CBC被认为对选择明文攻击不安全? 来自密码学。

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

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

AS 模式提供了一个身份验证标签,您需要将其与 IV 一起传输。惯常做法;预先添加 IV 并将标签附加到密文。

 IV || Ciphertext||Tag

推荐阅读