背景
我正在设计一个能够为静态Web内容的用户开发动态认证方案的系统.动机是预先生成大量复杂生成但敏感的网页内容,然后以基于cookie(嵌入可逆加密信息)身份验证的方式静态提供服务,由网络服务器强制执行.使用AEAD模式加密原语.
问题
我需要生成一个持续时间有效的IVEC和密钥,比如说一周(当前有效对).而过去的IVECs / Keys也适用于说2周(历史上有效的),并且用历史上有效的秘密加密的任何数据将仅用当前有效的IVEC / KEY重新加密.
我需要的是一个确定性的CSPRNG,它是一个随机数和密码短语的种子,可以以索引的方式产生64位或128位的数字块.如果我使用一个星期,因为 – “1 1970年”作为我的假设CSPRNG的索引元素之一,我应该能够建立一个系统,随着时间的推移自动更改密钥.
我考虑的方法
现在我没有在cryptopp中看到这样的功能,或者我现在知道的术语足够好,而且cryptopp是最先进的加密库,我不会放心,我会找到另外一个.所以,如果我找不到一个实现,我应该自己滚动.会从连接的数据中生成一个静态字符串结构,然后散列它(如下所示)做的伎俩?
RIPEMD160(RandomPreGeneratedFixedNonce:密码短语:UInt64SinceEpoch:128BitBlockIndexNumber);
注意:块分配将被分配并具有规则的结构,因此例如对于128位摘要,块0的前64位将用于ivec,所有元素1用于128位密钥.
这是一个健全的方法( – ,即密码安全)?
– 编辑:帖子接受评论 –
经过反思之后,我决定将我最初认为的密码和nonce / salt合并成一个16字节(cryptographicall strong)密钥,并使用PKCS#5中概述的技术来导出多个基于时间的密钥.不需要盐,因为没有使用密码.