首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >盐在KDF类Argon2中的应用

盐在KDF类Argon2中的应用
EN

Cryptography用户
提问于 2022-12-09 22:38:14
回答 1查看 126关注 0票数 2

我不明白为什么Argon2需要一个salt,如果密码只需要Argon2作为一个KDF,那么密码就叫做Argon2。最后,密码和密码散列都不被存储。只有用KDF密钥加密的数据。在数据库中存储密码时,需要使用salt来防止彩虹表的攻击,这是合乎逻辑的。硬编码的盐是坏的,这也是合乎逻辑的。但是,如果Argon2被用作KDF,为什么不能将用户密码本身用作salt呢?(当然,这种盐不会与加密的数据一起存储;)也许我误解了盐类的概念.给了我一个很好的概述,但它不能直接回答我的问题。

这里是背景:我正在创建一个应用程序,其中一些用户数据存储在一个CouchDB数据库中。这些数据应该在本地以及数据库中加密。对于原型,我们使用对称加密。程序如下:

  • 用户输入密码。
  • KDF (Argon2id)从密码和随机盐生成加密密钥。
  • 使用AES-256 GCM加密数据集,并将其传输到云端.
  • 在另一个设备上下载数据,并分离salt、IV和数据。
  • 然后使用salt再次调用Argon2id,生成密钥,并对数据进行解密。

问题是:随着文件数量的增加,对KDF的调用数量增加,性能受到严重影响。一份盐就能让这件事变得更容易。

EN

回答 1

Cryptography用户

发布于 2022-12-09 23:18:11

对于任何基于密码的密钥派生函数或密码哈希,您需要salt来防止在许多不同的用户或帐户中猜测相同的密码。在典型情况下,通过比较KDF的输出来验证密码;在这种情况下,验证密码是通过验证该用户加密的加密数据上的MAC或AEAD。

这样做在计算上是否有点困难呢?是。这不可能吗?不是的。您确实需要在这里使用salt,因为通常情况下,人们会选择错误的密码,而salt会使攻击变得更加困难。唯一不这样做的情况是,如果您为用户分配具有足够熵(例如令牌)的随机加密安全密码,并且他们使用密码管理器或其他秘密存储来存储这些密码。

但是,如果您使用相同的用户帐户加密多个文件,则可以使其变得更复杂,速度更快。您可以使用Argon2和每个用户的salt来生成一个512位的输出。然后,您可以使用每个文件的salt和Argon2输出(而不是秘密)作为输入到HKDF以生成密钥,并由AES-GCM对数据进行加密。HKDF是非常快的,所以您可以生成密钥和现在为许多,许多文件非常快。

你也可以使用类似于NaCl的crypto_box。生成一个公共私钥对。在Argon2i中使用每个用户的salt和密码来生成密钥,并使用AES-GCM (或任何安全算法)对私钥进行加密。然后,您可以使用公钥使用crypto_box加密您的文件,并且您只需要在解密期间使用Argon2来解密私钥。

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

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

复制
相关文章

相似问题

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