登录依旧是用账号密码
客户端用账号密码生成私钥
服务器端储存账号及其对应的公钥
登录过程:
1. 客户端发送登录请求
2. 服务器端返回任意字符串( nonce )
3. 客户端利用私钥生成函数和用户输入的账号密码生成私钥
4. 客户端用私钥对 nonce 签名,并把账号和签名发送给服务器端
5. 服务器端接收账号,找到对应的公钥,并用公钥验证签名
之所以有这个想法是因为现在的密码是用 HASH 函数加密后储存的,可以被爆破,所以才有撞库这种攻击方法。但是如果只是存公钥的话,就比较难被爆破了(虽然也存在可能性,但不高)。而且可以选择的算法有 RSA,还有 ECDSA 等其他的算法,都挺安全的。
只是不知道 非对称加密算法 和 散列算法 那个性能高一点,不过如果真的很安全的话,牺牲一点性能应该没什么问题吧。
客户端用账号密码生成私钥
服务器端储存账号及其对应的公钥
登录过程:
1. 客户端发送登录请求
2. 服务器端返回任意字符串( nonce )
3. 客户端利用私钥生成函数和用户输入的账号密码生成私钥
4. 客户端用私钥对 nonce 签名,并把账号和签名发送给服务器端
5. 服务器端接收账号,找到对应的公钥,并用公钥验证签名
之所以有这个想法是因为现在的密码是用 HASH 函数加密后储存的,可以被爆破,所以才有撞库这种攻击方法。但是如果只是存公钥的话,就比较难被爆破了(虽然也存在可能性,但不高)。而且可以选择的算法有 RSA,还有 ECDSA 等其他的算法,都挺安全的。
只是不知道 非对称加密算法 和 散列算法 那个性能高一点,不过如果真的很安全的话,牺牲一点性能应该没什么问题吧。