Security 此用户注册、身份验证和会话管理方案是否安全?

Security 此用户注册、身份验证和会话管理方案是否安全?,security,authentication,networking,encryption,Security,Authentication,Networking,Encryption,我正在使用权威服务器开发一个游戏,服务器和客户端之间的所有通信都是通过HTTP进行的。我试图弄清楚我提出的处理用户注册、身份验证和会话的方法是否安全 服务器的公钥是在客户端上硬编码的。要注册,用户需要输入用户id和密码。将使用明文用户id和密码(使用服务器的公钥加密)向服务器发送消息。服务器用其私钥解密密码,如果用户尚未出现在数据库中,则存储用户id和密码的单向散列 为了进行身份验证,客户机生成一个密钥并向服务器发送一条消息,其中包含明文形式的用户id以及使用服务器公钥加密的密钥和密码。服务器通

我正在使用权威服务器开发一个游戏,服务器和客户端之间的所有通信都是通过HTTP进行的。我试图弄清楚我提出的处理用户注册、身份验证和会话的方法是否安全

服务器的公钥是在客户端上硬编码的。要注册,用户需要输入用户id和密码。将使用明文用户id和密码(使用服务器的公钥加密)向服务器发送消息。服务器用其私钥解密密码,如果用户尚未出现在数据库中,则存储用户id和密码的单向散列

为了进行身份验证,客户机生成一个密钥并向服务器发送一条消息,其中包含明文形式的用户id以及使用服务器公钥加密的密钥和密码。服务器通过使用其私钥解密密码和密钥并将密码的单向散列与该用户存储的散列进行比较来验证用户。如果两个散列匹配,服务器将建立一个“会话”,在该会话中,客户端的进一步通信将使用共享密钥进行验证


要在身份验证后发送消息,客户端将发送用户id、使用共享密钥加密的有效负载以及数据的校验和。服务器尝试使用共享密钥解密数据,如果结果数据与校验和匹配,则处理消息。

这似乎是在重新发明轮子。为什么不直接使用SSL呢


为原始问题提供一些答案—很大程度上取决于您对“安全”的定义。如果服务器可能遭到破坏,并且私钥被盗,那么它就不安全。如果您使用的公钥/私钥算法不够强,则表示该算法不安全。如果会话数据使用的共享密钥可能被猜测或以其他方式泄露,则它是不安全的,等等。

我可以问一下,为什么不使用SSL?法律原因?我至少会在服务器上存储的密码哈希中添加盐,以防止彩虹表。我正在为客户端使用Unity3D,这是一个专有的游戏引擎,它只提供一个有限的HTTP GET/POST接口,不支持HTTPS。@davidwayes,SSL隧道如何?