客户端是否有可能向服务器发送盲密码,以便服务器对该盲值执行密钥derivation+stretching,但是该密钥可以被客户端取消?
我使用“盲目”的方式,它是使用在“不经意伪随机函数”(OPRF),如Ristretto255。
通常,我看到Argon2id称为键派生函数,但在某些情况下,还有另一个关键派生函数在发挥作用,而Argon2id被称为键拉伸函数。我很高兴了解到“派生”和“拉伸”之间的形式上的精确区别,但我关心的是让人忽略这个秘密的是Argon2id的某些部分,它们有着明显的巨大成本(或任何具有类似安全性的部分),不管我们称之为什么。
因此,我们已经通过使用一个不经意的伪随机函数(OPRF)来实现“不经意的盐渍”。这在非对称密码身份验证方案中使用(客户端从不与服务器共享密码),允许服务器提供salt,而不向任何通过尝试登录“询问”的攻击者免费提供盐。例如,参见不透明协议。
但是,与传统密码登录相比,不透明密码登录的一个缺点是,由于密钥扩展在客户端而不是服务器上运行,因此KDF/KSF的参数必须足够弱,以便最弱的客户端在登录时仍然可以提供可接受的快速用户体验。
例如,单车道的Argon2id,内存的16 MiB,以及三次迭代,在浏览器中,在像素5上需要250 5s,在三星Galaxy5s上需要1400 5s。
从安全性的角度来看,我希望将更大的参数放入Argon2id中,即使OWASP建议在上次检查时认为我的参数高于可接受的安全最小值。
但从用户体验的角度来看,我不愿让用户从较慢的硬件或资源受限的多任务处理系统登录,而在登录期间,他们的设备不得不在高成本的Argon2id执行过程中坐上几秒钟。
(同一用户可能从功能差异很大的设备登录-一个用户可能拥有高端游戏桌面,但不想在廉价低端智能手机之外的任何东西上登录--如果他们同时登录同一网站或应用程序,那么在客户端上做键拉伸就意味着你仍然只能获得提供可接受的性能和安全平衡的最弱键伸缩参数的安全性。)
所以!如果我们可以做一个不经意的KDF/KSF,那么我们仍然可以让用户受益于一台具有昂贵硬件投资的服务器,该服务器运行KDF/KSF的成本要比正常客户端快得多。
发布于 2022-06-05 18:22:13
对于像PAKE这样的低性能客户端和高性能服务器的场景,马克瓦提供了一个委托特性,其中服务器执行计算的拉伸部分。服务器不了解有关密码的任何信息。客户端的工作量小于RSA签名,并且不依赖于伸缩因子。
Makwa是唯一支持委托的密码散列竞赛 ( Argon2获胜)的决赛者。
请注意,委托是为密码验证设计的。它将计算的负担转移到验证器上,而不让验证者知道密码是否正确,它需要知道密码是否正确(这就是身份验证的全部要点)。委托也可以用于密钥拉伸,在低性能系统中,使用Makwa的密码派生密钥加密了一些数据,用户输入密码。低性能系统可以将大部分Makwa计算委托给高性能第三方,而无需冒密码保密性的风险。然而,据我所知,它确实需要信任第三方来正确地执行计算:我认为不可能区分错误的密码和撒谎的第三方。
https://crypto.stackexchange.com/questions/100447
复制相似问题