我正在阅读PAKE协议的开发,从EKE和SPEKE开始,它们的潜在缺陷,以及是什么促使他们选择协议。我一直在想,对经典DH进行以下(非常简单)的修改,使PAKE成为PAKE,有什么问题:
让爱丽丝和鲍勃有一个共享的秘密s = hash(password)。爱丽丝和鲍勃挑选私钥a,b。从DH开始,Alice和Bob将它们的公钥计算为
在交换公钥之后,可以将共享密钥计算为
这个简单的计划有什么问题呢?我猜它在某种程度上允许对s进行离线字典攻击。我知道s没有低熵,但我仍然不知道怎么做。
发布于 2019-11-16 23:58:57
这个方案的问题是:假设A是诚实的客户端,而B是不诚实的服务器(不知道s)。然后,A尝试登录,他选择a并发送
然后,B只选择一个随机值b,并发送
然后,A将计算一个“共享秘密”S = B^a \bmod p (如果B诚实地执行协议,它将是g^{abs} \bmod p,而不是S = g^{ab} \bmod p)。然后,A发送一条由共享秘密密钥组成的M_S消息(无论是密钥确认消息还是初始加密数据交换,这都不重要)。
B与A没有进一步的交互。
然后,B可以这样做;他可以在他的字典password'中选择一个条目并计算s' = hash(password')。然后,他可以计算S' = A^{s'^{-1}b} \bmod p;如果他碰巧选择了正确的密码,那么s = s'和S' = A^{s^{-1}b} = g^{as \cdot s^{-1}b} = g^{ab} = S,所以他可以使用共享的秘密来验证消息。
如果他没有选择正确的密码,他可以返回并在字典中选择另一个条目,并重复脱机计算直到找到正确的条目。
底线:使用您的协议,主动攻击者可以作为单个交换的结果执行完整的字典搜索。
https://crypto.stackexchange.com/questions/75797
复制相似问题