首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加密-然后-HMAC实现-我做的对吗?

加密-然后-HMAC实现-我做的对吗?
EN

Cryptography用户
提问于 2016-04-08 16:09:56
回答 2查看 1.6K关注 0票数 3

我希望使用C#实现经过身份验证的加密。有一个名为encryptAndAuthenticate的点网络类,但它只支持在windows 8或更高版本上,我需要代码也可以在windows 7上工作。换句话说,在GMC模式下,不存在在windows 7或更高版本上工作的内置点网络库。因此,看起来我必须对C#、aes和hmac例程分别使用调用。这是我脑子里的伪码。我计划得对吗?

加密:

  1. 用户提供明文。
  2. 用户提供密码。
  3. CSPRNG生成256位盐.
  4. 对密码和salt的慢密钥推导功能产生640位的输出.
  5. 前256位的输出成为AES密钥。
  6. 接下来128位的输出变成AES IV。
  7. 最后256位输出变成HMAC-256键。
  8. AES加密CBC模式使用(明文,AES密钥,AES IV)产生密文。
  9. HMAC- MAC 256上的IV\密文(使用HMAC-256密钥)来产生MAC。
  10. 公开存储盐、密文和MAC。

解密:

  1. 用户检索salt、密文和MAC。
  2. 从上面开始的第二步。
  3. 上面的步骤4-7。
  4. 从上面开始第9步。
  5. 比较计算的MAC与检索的MAC。
  6. 如果不同,则中止并告知用户解密失败。
  7. 如果有效,AES使用(密文、AES密钥、AES IV)解密CBC模式来生成明文。
  8. 向用户显示明文。
EN

回答 2

Cryptography用户

发布于 2016-04-08 16:38:25

PBKDF2本身对步骤4是不利的,因为它的输出块可以

可以独立计算。​如果您使用的PBKDF不能直接使用

产生足够的输出,然后您应该使用一个基于快速键的KDF。

请确保

IV是步骤9's密文的一部分。

解密是恒定时间的步骤5

票数 3
EN

Cryptography用户

发布于 2016-04-08 17:04:28

您可能需要调用利伯钠而不是。它提供密码散列和身份验证加密内置,具有非常干净的API,易于正确使用,只要您记得每次加密时都要选择一个新的nonce。它还将比AES+HMAC更快,并且使用Argon2进行密码哈希,这是密码哈希竞赛的赢家。

API是C,但是您可以轻松地调用P/Invoke,或者使用现有的绑定。请注意,绑定不会导致失败。

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

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

复制
相关文章

相似问题

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