Encryption URL和salt中的加密数据

Encryption URL和salt中的加密数据,encryption,platform-agnostic,Encryption,Platform Agnostic,当在URL中传递对称加密数据或可能在cookie中存储加密数据时,在同一URL中传递对称加密IV(Salt)是否合理和/或可能?在无状态环境(如web)中使用Salt的想法是否有效 (我理解salt在数据库中的工作原理,给出了一个名称或帐户列表等。但是,我们无法保存salt,因为我们正在无状态环境中传递数据 假设服务器端密码用于加密数据,然后解密数据,那么如何使用Salt?我猜可以在查询字符串中传递单独的IV,但是公开了Salt,好吗 或者可以从“密码”的散列生成密钥和IV。假设IV和密钥来自散

当在URL中传递对称加密数据或可能在cookie中存储加密数据时,在同一URL中传递对称加密IV(Salt)是否合理和/或可能?在无状态环境(如web)中使用Salt的想法是否有效

(我理解salt在数据库中的工作原理,给出了一个名称或帐户列表等。但是,我们无法保存salt,因为我们正在无状态环境中传递数据

假设服务器端密码用于加密数据,然后解密数据,那么如何使用Salt?我猜可以在查询字符串中传递单独的IV,但是公开了Salt,好吗

或者可以从“密码”的散列生成密钥和IV。假设IV和密钥来自散列的非重叠区域,这样可以吗?(我意识到对于给定的密码,salt/密钥将始终相同。)


编辑:通常使用AES。

鼓励为每个加密例程生成随机IVs,它们可以与密文一起安全地传递

编辑:

我可能应该问一下您存储的是什么类型的信息,以及为什么要使用salt和AES加密,因为salt通常用于散列,而不是对称加密。如果salt是公开的,那么它就无法达到拥有它的目的


您真正需要做的是确保密钥的强度,因为如果攻击者拥有salt、IV和密码文本,那么暴力攻击很容易在较弱的密钥上进行。

您不应该从密钥生成初始化向量。对于给定的消息,初始化向量应该是不可预测的;如果您生成了该消息对于密钥(或用于生成密钥的密码),IV将始终保持不变,这违背了其目的

但是,IV不需要保密。通常使用密文发送,不受保护。将IV合并到URL中比在服务器端状态下跟踪给定链接的IV容易得多


Salt和IVs有不同的应用,但它们的作用方式相似

加密“salt”用于基于密码的密钥派生算法;存储散列密码进行身份验证是该函数的一个特例。salt使同一密码产生不同的散列,并阻止“字典攻击”,其中黑客预先计算了常用密码的散列值,并构建了“反向查找”索引,以便他们可以快速发现给定哈希的密码。就像IV一样,使用的salt不是秘密

初始化向量在反馈模式(如CBC)中与DES和AES等分组密码一起使用。每个分组在加密时与下一个分组组合。例如,在CBC下,加密前,前一个分组密码文本与当前分组的纯文本异或。IV随机生成,用作伪初始b锁定以引导进程

因为不同的静脉注射是(或者至少应该是)为每条消息选择,当相同的消息使用相同的密钥加密时,生成的密文是不同的。从这个意义上说,IV与salt非常相似。加密随机生成器通常是salt或IV最简单和最安全的源,因此它们也具有相似性



密码很容易被弄乱。如果你对你所做的事情不自信,你应该考虑你所保护的信息的价值,并相应地预算来获得你需要的培训或咨询。

也许是我的错误。盐和IV是相同的吗?还是盐通常被添加到要加密的数据的开始。这里我的元素有点不对劲。只是为了确保,每次使用不同的IV在查询字符串中重复传递相同的加密值是可以的。密钥是服务器端的,保持不变,但加密值随每个请求而变化。从设计角度看我是可以的。只是想确保它是从安全角度看的。谢谢,IV应该每封邮件都必须是唯一的。最终,您将发送IV+密文作为另一端解密的完整值。另外,请确保您有某种方法来验证密文未被修改,因为AES不会这样做。因此,完整邮件可能最终是“IV+密文”中的:ciphertext=Encrypt(明文,哈希(明文))。这样,你就有了唯一的IV,以确保相同的明文每次都会得到不同的密文,并为接收者提供一个明文散列,以验证密文没有被篡改。我一直在阅读并被告知,最好在解密密文之前对密文进行完整性检查。此外,防止有人生成自己的散列s、 应该使用HMAC生成散列。因此,您将使用、IV、密文和散列发送到另一端。散列=HMAC(IV+密文)。