首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >香港发展基金:宜家盐及资讯价值

香港发展基金:宜家盐及资讯价值
EN

Cryptography用户
提问于 2018-11-18 20:24:15
回答 1查看 1.9K关注 0票数 3

如以下所示

AES-GCM-256文件加密的密钥生成

我目前正在开发一个文件加密软件。在上面的线程中,有人建议,出于性能上的原因,我使用scrypt和HKDF的组合。

但是,我应该如何使用HKDF为每个文件派生一个新的密钥呢?正如在上面的线程中所建议的,我打算通过scrypt生成一个主密钥,并从它中通过HKDF导出文件加密密钥。

到目前为止,我已经想出了两种可能的方法:

(1)运行HKDF (提取-然后-展开),并将salt结果作为输入密钥材料(ikm),并为每个文件加密一个新的随机盐。

(2)运行HKDF (提取-然后-展开),结果为ikm,一个固定的随机盐,和一个随机的‘信息’值为每个文件被加密。

哪一种--如果有的话--是做我想做的更好或正确的方式?据我所知,NIST特别出版的800-56C,显然是重复使用相同的ikm,只是改变了盐。但我不太明白为什么和他们的用例(共享秘密Z作为ikm)与我的不同。

EN

回答 1

Cryptography用户

发布于 2018-11-18 23:10:07

食盐不需要确保香港国防军的安全。使用静态盐没有太大的意义--你应该很好地使用一个空盐。您可以使用空盐,也可以使用新的随机盐。此盐类可以生成并为每个文件加上前缀。如果它足够大(例如128个字节),那么它将使每个加密密钥都是唯一的,因此您不必依赖文件名或其他元信息(这可能是Input的一部分)来派生文件加密密钥。

salt使HKDF函数更容易证明,但我还没有听说过没有KDF的攻击--包括那些直接使用散列函数而不应该使用的攻击。

从氪矿的输出中提取关键物质是不需要的。基本上,您已经可以创建一个键,从输出的scrypt。因此,不需要导出使用HKDF-提取的伪随机密钥(PRK) .那样的话,你应该可以只使用HKDF-展开,使计算量稍微减少一些。

所以你会:

代码语言:javascript
复制
IKM = scrypt(password, salt1)
K = HKDF-expand(IKM, Input, 256)

其中,Input是定义要加密文件的任何规范编码信息。

你也可以去:

代码语言:javascript
复制
IKM = scrypt(password, salt1)
PRK = HKDF-extract(IKM, salt2)
K = HKDF-expand(PRK, Input, 256)

在这种情况下,如果盐足够随机的话,Input甚至可以是空的。盐可以用加密文件存储(前缀)。

请注意,salt1用于scrypt,根据该组织。你上一个问题的答案只能用一次。因此,它不能用于香港发展基金。

票数 4
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/64150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档