我希望用一个完全“公共”的服务器构建一个授权系统,其中包括两个假设:
我发现SRP是一个非常巧妙的概念,但即使是这个概念也依赖于服务器的隐私才能有效。通过获得验证器和salt,蛮力攻击可以脱机安装,而无需服务器的任何额外输入。我的目标是建立一个需要与服务器交互的系统,以检查密码的正确性,并假定所有服务器端数据都是可见的。
我知道这可能非常困难,如果不是完全不可能的话。也许利用它的其他特性(服务器是可验证的合法的,客户端可以保存秘密)可能是关键?或者有一种方法可以安全地加密验证器。
发布于 2020-01-26 18:01:51
服务器的数据是公开的
这一假设使PAKE的想法成为泡影。
如果攻击者能够访问服务器的所有数据,那么他可以这样做:克隆服务器,将克隆放到实验室,然后让客户根据字典中的所有密码执行尝试协商。由于克隆与原始服务器完全一样,克隆将访问字典中的正确条目,因此攻击者现在知道密码。
这意味着你需要在某个地方改变一个假设。
人们试图解决这个问题;尝试的解决方案包括让不可复制的HSM持有服务器执行身份验证所需的部分,以及让多个服务器共同执行身份验证(因此没有一个服务器知道得足够多,因此对手需要入侵所有这些服务器)。因为我不知道你的局限性是什么,我不知道这些想法是否对你有用(我怀疑不是这样)。
至于你的想法:
客户可以持有秘密
这似乎是正确的方向;如果客户端可以持有私钥(服务器将持有相应的公钥),那么您仍然需要解决MITM攻击(客户端如何知道他实际上正在与真正的服务器直接交谈),但您已经解决了‘克隆服务器允许某人测试密码’的问题。当然,这个方向与PAKE的概念相去甚远(PAKE假设客户端对密码的了解是它唯一可以用来进行身份验证的东西)。
https://crypto.stackexchange.com/questions/77247
复制相似问题