首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AES-GCM-256文件加密的密钥生成

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

Cryptography用户
提问于 2018-09-10 07:12:20
回答 1查看 1.7K关注 0票数 3

我目前正在工作的文件加密软件,通过AES-GCM-256工作,我正在寻找关于加密密钥生成过程的反馈,我打算实现。

到目前为止,我提出了以下程序:

  1. 用户提供密码或密钥文件。

然后,每个要加密的文件:

  1. 密码/密钥文件从(1以上)是通过SHA256哈希一次。
  2. 从SHA256得到的结果是byte 91编码的,并通过氪(N=2^15、r=8、p=1)和一个随机的16字节盐发送,为AES-GCM导出32位密钥。
  3. 该文件是使用AES-GCM加密和认证的,密钥来自(2),使用随机96位的nonce作为iv。
  4. 氪-值(N,r,p和salt)和AES-GCM (=iv)存储(未加密)在文件头中进行解密。

该程序确实确保它不会处理大于2^39 - 256位的文件(来自NIST 800-38D的AES-GCM加密的大小限制)。

这个设计有什么严重的缺陷吗?

EN

回答 1

Cryptography用户

发布于 2018-09-10 12:23:12

总的来说,你的概念在我看来还行。不过,我有几点意见:

  1. 在将密码输入scrypt之前先对其进行散列是无用的。
  2. scrypt可以处理二进制数据,因此不需要base91编码步骤。避免没有充分理由的步骤。
  3. 如果您想加密或解密大量文件,使用缓慢的密码散列功能,每个文件都会导致性能不佳。相反,使用scrypt从密码中创建一个masterkey,然后使用像HKDF这样的快速KDF创建依赖于键的文件。
  4. 我看到的最大问题是:您正在为每个文件使用唯一的密钥,但这是由随机盐创建的,而不是一些文件信息。攻击者可以在您没有注意到的情况下切换两个文件的内容(不更改或不了解其内容)。要禁止这种情况,您应该在处理过程中使用一些文件元数据(更可取的是像文件名/路径这样的唯一文件标识符)。要么将其注入密钥派生过程(使用它作为盐),要么使用AES-GCM将其作为附加数据进行身份验证。
票数 4
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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