在检查MAC之前加密h(k) (甚至仅仅是k)并验证它是否足以击败分区甲骨文攻击,从而使整个方案变得健壮/提交(而不依赖于密码的属性,不像0填充)?
更新1:
基本上是E_k(h(k)\mathbin\|m)或E_k(k\mathbin\|m),其中E是像(x)chacha20poly1305那样的AEAD模式。k是从pkdf (如argon2/scrypt/etc )的密码派生出来的。开始时,它是在两端计算的,但解密密码的方也会检查消息之前是否附加了h(k) (或仅仅是k)。
发布于 2021-03-10 14:46:43
如果oracle返回信息(标记是否正确),则分区oracle攻击有效。如果没有回应,就根本没有甲骨文。这些信息也可以从侧面渠道获得.
分区oracle只是通过分组密码来加速密码攻击。密码是从一组可能的密码列表\mathcal{D}中选择的,相应的密钥由PBKDF生成。相应的密钥被分组在可以正确解密的密文下面。这里必须注意的是,正确解密的密文根本不需要一些有意义的明文。攻击者只要求在分组密钥下,密文具有返回给它们的有效或无效标记信息。这种攻击之所以有效,是因为GCM和Poly1305是不提交的,也就是说,在计算上可以找到一对密钥和在这两个密钥下解密的密文(带标记)。
基本上是E_k(h(k)\mathbin\|m)或E_k(k\mathbin\|m),其中E是像(x)chacha20poly1305那样的AEAD模式。k是从pkdf (如argon2/scrypt/etc )的密码派生出来的。开始时,它是在两端计算的,但解密密码的方也会检查消息之前是否附加了h(k) (或仅仅是k)。
如果使用E_k(h(k)\mathbin\|m)或E_k(k\mathbin\|m),则可能出现两种情况;
当然,对于这两种情况,攻击者都有需要消除的虚假否定。发生这种情况的可能性很小。
主要的缓解措施是使用尚未标准化的提交AEAD,或者使用带有一个密钥的HMAC作为加密-然后HMAC。记住,使用强密码总是被推荐的。
第一个也包含k或h(k)的块在检查MAC标记之前将被解密(作为一个例外,与下面的块不同)。这是为了在验证MAC标记之前,验证消息中加密的k或h(k)是否与我们正在解密的k匹配(以便不泄漏有关MAC标记是否无效的信息)。如果加密的k或h(k)与解密k不匹配,则解密中止(在检查任何MAC标记之前)
在这种情况下,我看不出分区甲骨文攻击会有什么效果。攻击者仍然可以分组,但如果使用SHA-256,则随机文本具有密钥哈希的概率为1/2^{256}。因此,没有可行的攻击。
标准的在线密码攻击仍然有效。因此,仍然适用通常的具有良好强度的密码建议。
我不喜欢在同一密钥下加密密钥的想法,尽管我们并不认为AES或ChaCha20会出现问题。如果我做错了,有人可以纠正我。
https://crypto.stackexchange.com/questions/88745
复制相似问题