首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于密码存储和密钥派生的Argon2

用于密码存储和密钥派生的Argon2
EN

Cryptography用户
提问于 2018-12-29 20:29:49
回答 2查看 3.7K关注 0票数 7

使用Argon2进行密码存储和密钥派生是否安全?当然,我打算用不同的盐值。

基本概念是这样的:

爱丽丝的帐户上有一些秘密数据(data_e)。它是用Argon2派生的密钥加密的,该密钥来自她的密码,使用的是随机盐。

k = \operatorname{Argon2}(\text{password}, \text{salt}_1, \text{iteration})
\text{data}_e = \operatorname{E}_k(\text{data})

艾丽斯的密码被存储为一个Argon2派生的密钥,从她的密码,使用随机盐。当Alice (或敌手)想要登录时,使用Alice的密码盐类从输入中派生出一个密钥,并检查是否匹配。

\text{storedPWD} = \operatorname{Argon2}(\text{password}, \text{salt}_2, \text{iteration})
  1. 机密数据应该用Alice的原始密码加密吗?
  2. 她的数据应该用她的原始密码加密的随机密钥加密吗?从她的密码中得到的密钥?

您应该假设Alice是一位训练有素的系统管理员,他了解使用弱密码的风险。密码将至少有12个字符,将包括大写字母和小写字母,并有数字。

还假设登录系统具有抵抗暴力的能力,但是要考虑数据库被破坏的可能性。

提前谢谢。

EN

回答 2

Cryptography用户

回答已采纳

发布于 2018-12-29 23:25:26

机密数据应该用Alice的原始密码加密吗?

作为一般的经验法则:

密码只应被输入密码哈希方案(PHS),如Argon2、scrypt或bcrypt,而不是其他任何东西!

造成这种情况的原因有多种:

  • 密码需要以复杂参数的形式进行特殊处理。
  • 密码需要外部(高熵)的唯一性/随机性来源的混合。
  • 密码应该是长的和可变的长度,大多数密码原语对密钥长度有非常明确的期望。
  • 密码通常不是随机均匀分布的位串(例如,最高位很少被设置),大多数加密算法对其密钥都采用这种方式。

应该用...加密的随机密钥加密她的数据吗?

是。另一个好的经验法则是:

只对每个用户执行一个密码哈希,但给它您可以节省的所有资源。

这背后的想法是:

  • 如果您使用链式派生,并且攻击者可以验证它们在中间阶段是否得到了正确的值,那么它们只需要计算最后一个阶段,而不是对所有密码计算一次。
  • 如果不公开中间值,则有效地创建了一个新的复合散列方案。
  • 如果你执行两个独立的派生,你很可能会降低每个个体所需的资源,而对手只需要打破最弱的一个,得到另一个(S)“免费”就足够了。

其余的类似于S的回答:

用密码派生的密钥加密高熵密钥,可以让用户更改密码,而不必重新加密整个数据,如果有大量数据,这可能在CPU时间和I/O时间方面代价高昂。

此外,如果您使用认证加密 (AE)对高熵密钥使用派生密钥,则基本上可以获得“免费”的安全密码确认,因为如果密码和派生密钥是错误的,则该方案将非常清楚地报告错误。此外,您还可以使用大多数AE方案的相关数据输入,以加密方式将派生参数(如salt和迭代计数)绑定到成功解密。

因此,在公式:\text{derKey} = \operatorname{Argon2}(\text{password}, \text{salt}, \text{iteration}), c=\operatorname{AE}_{\text{derKey}}(\text{MK})和现在,如果试图用错误的密码解密,AE-方案将报告认证失败,因为密钥是错误的,如果它是正确的,它将只是返回正确的主密钥。

票数 8
EN

Cryptography用户

发布于 2018-12-29 21:21:17

试着像黑客一样思考..。

假设黑客控制了存储,并且认为Alice的密码相对较弱。在这种情况下,相对薄弱的意味着黑客不能通过Argon2哈希强制破坏它,但是如果他只得到一个基本的SHA256哈希,他就可以破坏它。

如果你用密码加密艾丽斯的数据,黑客可以用暴力破解数据(暴力破解AES就像破解SHA256一样容易/困难)。此外,如果Alice更改她的密码,您将不得不重新加密她的数据,这是一个缺点。

如果你用密码加密一个随机的主密钥,并使用主密钥加密Alice的数据,那么安全性没有差别,只是如果Alice更改了她的密码,你就不必再加密数据了。你必须重新加密主密钥。

如果你用storedPWD加密一个随机的主密钥,那么黑客可以很容易地在数据库中获得密钥。

海事组织,您应该使用不同的盐分计算两个Argon2散列,并使用一个验证密码,另一个用于加密数据。

我认为最好的解决方案是:x=Argon2(密码),然后在数据库中存储SHA256(x欧元/ salt1),并使用它进行密码验证,使用SHA256(x =x\x> salt2)进行加密。或者更好的是,Argon2将结果长度作为参数。让Argon2派生出512位,然后使用前256个进行密码验证,然后使用第二个256进行加密。

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

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

复制
相关文章

相似问题

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