vector - 如何在 cbc 中发送向量以进行解密?
问题描述
我期望从客户端加密一个字符串(使用 aes-256-cbc 和服务器和客户端都知道的秘密密码)。然后我想破译它(在服务器端)。
我有一个可以正常工作的代码(从功能上讲)。但似乎我需要将 IV 向量从客户端发送到服务器。我目前是这样做的:
00000000000000000000000000000000.JAPQElUAxxxxxxxxxxxjTgJAPQElUAfgydvbY=
因此,在服务器上,我用“点”作为分隔符拆分有效负载,并将第一项视为向量。
我相信这样送IV不好。你能帮我理解它应该如何工作吗?
解决方案
在 CBC 加密模式下,发送未加密的 IV 是正常的,只要 IV 不可预测,无需担心。看到这个问题为什么具有可预测IV的CBC被认为对选择明文攻击不安全? 来自密码学。
发送 IV 的常用方法是将其添加到密文中。通常,这些库旨在提取前 16 个字节或启用字节数组中的偏移量。
CBC的操作模式已经过时。作为填充预言攻击,它有很多问题。您应该使用更好的替代认证加密 (AE) 模式作为不需要填充的 AES-GCM 和 ChaCha-Poly1305。此外,在 AE 中,您将拥有机密性、完整性和身份验证,而 CBC 仅支持机密性。
AS 模式提供了一个身份验证标签,您需要将其与 IV 一起传输。惯常做法;预先添加 IV 并将标签附加到密文。
IV || Ciphertext||Tag
推荐阅读
- django - 将 ModelForm 进度值保存到 Django 中的会话
- php - 以编程方式创建后如何转到新的 WordPress 帖子?
- android - Firebase 实时数据库:如何迭代每个键值
- r - 多类分类 nnet 的每类得分
- swift - 如何摆脱这个是错误的。它在“守卫”之后显示预期的“{”
- algorithm - 一种高效的哈密顿电路算法
- java - 计算 8 位校验和的 Java 程序
- python - minimalmodbus,随机生成错误的crc
- php - PHP eval() - 只有一个函数
- python - 无法使用 torch.jit.trace 跟踪模型