我正在与权威服务器进行游戏,其中服务器和客户端之间的所有通信都是通过HTTP进行的。我试图弄清楚我提出的处理用户注册,身份验证和会话的方法是否安全。
服务器的公钥在客户端上是硬编码的。要注册,用户输入用户ID和密码。使用服务器的公钥加密的明文用户ID和密码将消息发送到服务器。服务器使用其私钥解密密码,如果用户尚未存在于数据库中,则存储用户ID和密码的单向散列。
要进行身份验证,客户端会生成密钥并向服务器发送一条消息,其中包含用明文形式的用户ID以及使用服务器公钥加密的密钥和密码。服务器通过使用其私钥解密密码和密钥并将密码的单向散列与该用户的存储散列进行比较来验证用户。如果两个哈希匹配,则服务器建立“会话”,其中使用共享密钥验证来自客户端的进一步通信。
要在身份验证后发送消息,客户端会发送用户ID,使用共享密钥加密的有效负载以及数据的校验和。服务器尝试使用共享密钥解密数据,如果结果数据与校验和匹配,则处理该消息。
答案 0 :(得分:1)
这似乎重新发明了轮子。为什么不直接使用SSL?
为原始问题提供一些答案 - 很大程度上取决于您对“安全”的定义。如果服务器可能被盗用,并且私钥被盗,则它不安全。如果您使用的公钥/私钥算法不够强大,则不安全。如果用于会话数据的共享密钥可能被猜到或以其他方式受到损害,那么它就不安全等等。