代码之家  ›  专栏  ›  技术社区  ›  Lars A. Brekken

如何基于拥有对称密钥来认证客户机?

  •  1
  • Lars A. Brekken  · 技术社区  · 14 年前

    我们的客户通过SSL调用我们的Web服务,并使用用户名和密码进行身份验证。然后,我们的服务器生成一个对称密钥并将其发送回客户机。

    然后,客户机建立到服务器的TCP连接,并发送登录消息。此时,我想对客户机进行身份验证。

    我的想法是让客户机用对称密钥加密一段众所周知的/静态的文本,并以此作为它拥有密钥的证据。

    因为对称密钥是随机生成的,所以我可以在这里使用静态文本吗?

    感谢您的任何意见。

    2 回复  |  直到 14 年前
        1
  •  2
  •   rook    14 年前

    建立SSL是为了对客户机和服务器进行身份验证,而非对称加密是您在这个场景中可以使用的最安全的原语。对称密码可以通过使用 Cipher Block Chaining Message Authentication Code 另一种被称为CBC-MAC模式。cbc-mac的使用与hmac具有类似的保护,但使用对称密码而不是消息摘要函数。WPA使用CBC-MAC模式来保护无线网络。

        2
  •  2
  •   Community Mr_and_Mrs_D    7 年前

    你的想法受到 重放攻击 -如果有人观察到用户登录,他们可以存储用对称密钥加密的静态文本,并在以后使用它进行身份验证。

    这样做的公认方法是挑战/回应。客户机连接,服务器生成一个随机的质询并发送给客户机,客户机以质询的加密版本响应(尽管您实际上应该在这里使用HMAC,而不是块密码,因为否则您的客户机实际上是一个单块解密Oracle!)。使用两个不同的随机密钥(同时通过Web服务提供)也更安全,一个用于加密,一个用于身份验证。

    请注意,尽管这一计划,如文所述,仍然容易受到中间人的攻击。使用SSL绝对更好,因为 The Rook 建议。这将要求您的客户机生成一个公钥并将其发送到Web服务。Web服务用一个已签名的证书响应,该证书包含客户端的公钥以及DN字段中客户端的唯一标识符(用户名或其他任何标识符)。单独连接上的服务器验证所使用的客户端证书(确保由Web服务签名),并验证证书中的客户端标识符是否与请求连接的客户端匹配。