我们的客户通过SSL呼叫我们的网络服务,并使用用户名和密码进行身份验证。然后,我们的服务器生成对称密钥并将其发送回客户端。
然后,客户端与我们的服务器建立TCP连接,并发送登录消息。此时,我想验证客户端。
我的想法是让客户端使用对称密钥加密一个众所周知的/静态文本,并使用它作为它拥有密钥的证明。
由于对称密钥是随机生成的,我可以在这里使用静态文本吗?
任何意见都赞赏。
答案 0 :(得分:2)
SSL用于对客户端和服务器进行身份验证,非对称加密是您在此方案中可以使用的最安全的原语。对称密码可以通过使用Cipher Block Chaining Message Authentication Code其他明智的CBC-MAC模式用于身份验证。 CBC-MAC的使用具有与HMAC类似的保护,但是使用对称密码而不是消息摘要功能。 WPA使用CBC-MAC模式来保护无线网络。
答案 1 :(得分:2)
您的想法受到重播攻击的影响 - 如果有人观察用户登录,他们可以存储静态文本加密对称密钥,并在以后使用它来验证自己。
这种做法的可接受方式是挑战/回应。客户端连接,服务器生成随机质询并将其发送到客户端,客户端使用加密版本的质询进行响应(尽管您实际上应该使用HMAC,而不是块密码,否则您的客户端是有效的一个块解密oracle!)。使用两个不同的随机密钥(通过Web服务同时提供)也更安全,一个用于加密,一个用于身份验证。
请注意,尽管如此编写的这种方案仍然容易受到中间人攻击。正如The Rook建议的那样,您最好使用SSL。这将要求您的客户端生成公钥并将其发送到Web服务。 Web服务使用签名证书进行响应,该证书包含客户端的公钥以及DN字段中客户端的唯一标识符(用户名或其他内容)。单独连接上的服务器验证使用的客户端证书(确保它由您的Web服务签名),并验证证书中的客户端标识符是否与要求连接的客户端匹配。