是否可以使用非对称加密技术而不是哈希密码方法来实现登录协议?
例如,在创建帐户时,客户端会根据用户名和密码的哈希值生成私钥/公钥对。然后使用用户名将公钥发送到服务器,服务器存储用户名和公钥。当用户想要登录时,他输入他的密码,客户端重新生成私钥,用它签署一个随机数,并将签名的消息发送到服务器。然后,服务器能够在知道与用户名相关联的公钥时对用户进行身份验证。
此协议中是否存在任何缺陷?
与存储密码哈希有什么好处?
答案 0 :(得分:0)
验证可能存在严重缺陷,是的,具体取决于实施情况。如果Bob是服务器而Alice是客户端,则Mallory是恶意窃听者:
如果Alice生成一个随机数,请将其与用户名连接,使用私钥加密并发送到服务器。服务器使用Alice的公钥解密和验证。如果没有服务器保存随机数,这就容易受到重放攻击--Mallory只能监听,保存Alice发送给服务器的块,稍后再重放。如果不保存它们,服务器就不会更聪明了。
为了保护服务器不受此影响,服务器必须生成随机数。它也需要是一个安全的随机数,否则马洛里可以预测,或者至少猜测下一个数字是什么。
如果Mallory可以拦截消息,那么他可以声称是Alice - 他拦截所有通信并只是中继它们,即使服务器生成随机数。
爱丽丝和鲍勃都需要能够证明这是另一个欺骗的人。他们还需要能够检测到来自Mallory的篡改 - 协议需要一些额外的层来确保消息的真实性。
目前正在进行研究,但据我所知,如果没有使用可靠的证书颁发机构,很难对用户进行身份验证:所有人都可以知道公钥,但任何攻击者都可以交换除非通过证书颁发机构建立信任,否则他们自己的公钥不会被检测到。