gpt4 book ai didi

c++ - 确定性地生成加密安全 key 和 IVEC

转载 作者:IT老高 更新时间:2023-10-28 23:21:04 25 4
gpt4 key购买 nike

背景

我正在设计一个系统,该系统可以为静态 Web 内容的用户开发动态身份验证方案。其动机是预先生成大量复杂但敏感的 Web 内容,然后使用基于 cookie(嵌入可逆加密信息)的身份验证静态地提供它,由 Web 服务器单独强制执行。使用 AEAD 模式加密原语。

问题

我需要生成在一段时间内有效的 IVEC 和 key ,比如一周(当前有效对)。并且过去的 IVEC/ key 也有效期为 2 周(历史有效),并且使用历史有效 secret 加密的任何数据都将使用当前有效的 IVEC/KEY 重新加密。

我需要的是一个确定性的 CSPRNG,它包含随机数和密码短语,并且可以以索引方式生成 64 位或 128 位数字 block 。如果我使用“自 1970 年 1 月 1 日以来的几周”作为我假设的 CSPRNG 的索引元素之一,我应该能够构建一个系统,随着时间的推移自动更改 key 。

我正在考虑的方法

现在我在 cryptopp 中看不到这样的功能,或者我现在已经足够了解术语,而且由于 cryptopp 是目前最先进的加密库,我没有信心找到另一个。所以,如果我找不到那里的实现,我应该推出自己的。从连接的数据中生成一个静态字符串结构,然后对其进行散列(如下所示)可以解决问题吗?

RIPEMD160(RandomPreGeneratedFixedNonce:PassPhrase:UInt64SinceEpoch:128BitBlockIndexNumber);

注意: block 编号将被分配并具有规则结构,因此例如对于 128 位摘要, block 0 的前 64 位将用于 ivec,所有元素 1 用于 128 位 key 。

这是一种合理的方法(--即加密安全)吗?

-- 编辑:发表接受评论--

经过一番思考,我决定将我最初认为的密码短语和 nonce/salt 合并为一个 16 字节(加密强) key ,并使用 PKCS #5 中概述的技术导出多个基于时间的键。不需要盐,因为不使用密码。

最佳答案

有趣的问题。

首先,您的初始 vector 不必是加密性强的随机量,但它们应该对每条消息都是唯一的。 IV 实际上只是一种盐值,可确保使用相同 key 加密的类似消息在加密后不会看起来相似。您可以使用任何快速的伪随机生成器来生成 IV,然后将其与加密数据一起发送(最好是加密的)。

当然, key 应该尽可能地坚固。

在我看来,您对包含随机数、密码和有效性数据的文本字符串进行哈希处理的提议非常合理——这与其他使用密码生成 key 的系统所做的大致一致。您应该多次散列——而不仅仅是一次——以使 key 生成在计算上变得昂贵(对于任何试图暴力破解 key 的人来说,这将是一个比对你来说更大的问题)。

您可能还想查看 PKCS#5 中规定的 key 生成方案(例如 http://www.faqs.org/rfcs/rfc2898.html ),该方案在 cryptopp 中作为 PasswordBasedKeyDerivationFunction 实现。这种机制已经被广泛使用并且被认为是相当安全的(请注意,PKCS#5 建议对密码短语数据进行至少 1000 次散列)。您可以将您的有效期和索引数据附加到密码短语中,并按原样使用 PasswordBasedKeyDerivationFunction。

您没有说您建议使用哪种加密算法来加密数据,但我建议您应该选择一些广泛使用且已知安全的算法......特别是我建议您使用AES。我还建议使用 SHA 摘要函数之一(可能作为 PasswordBasedKeyDerivationFunction 的输入)。 SHA-2 是最新的,但 SHA-1 足以生成 key 。

您也没有说明您希望生成的 key 长度,但您应该注意, key 中的熵量取决于您使用的密码的长度,除非密码是 very long 这将远小于理想所需的 key 长度。

此方案中最薄弱的环节是密码本身,而这总是会限制您可以达到的安全级别。只要您对数据进行加盐(就像您正在做的那样)并使 key 生成成本高昂以减缓暴力攻击,您应该没问题。

关于c++ - 确定性地生成加密安全 key 和 IVEC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4303607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com