【问题标题】:How to authenticate client based on possession of symmetric key?如何基于拥有对称密钥对客户端进行身份验证?
【发布时间】:2010-06-30 14:29:02
【问题描述】:

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

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

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

既然对称密钥是随机生成的,那我这里用一段静态文本可以吗?

任何意见表示赞赏。

【问题讨论】:

    标签: security authentication encryption cryptography encryption-symmetric


    【解决方案1】:

    SSL 是为验证客户端和服务器而构建的,非对称加密是您可以在这种情况下使用的最安全的原语。对称密码可用于通过使用Cipher Block Chaining Message Authentication Code 进行身份验证,也称为 CBC-MAC 模式。 CBC-MAC 的使用具有与 HMAC 类似的保护,但使用对称密码而不是消息摘要功能。 WPA 使用 CBC-MAC 模式来保护无线网络。

    【讨论】:

    • 感谢您的回复。我正在使用 .NET 2.0,看起来 CBC-MAC 仅受版本 3.5 (blogs.msdn.com/b/shawnfa/archive/2009/03/17/…) 的支持。我想使用 CBC-MAC 或使用哈希算法创建 MAC 并将其附加到消息中,但登录消息包含的信息非常少(基本上只是用户名),我认为这可能会造成一个弱点。也许我错了。
    • @Lars A. Brekken 我确信在 ASP 或 C#(或任何你使用的)中还有另一个实现。构建自己的,然后根据 .net 3.5 的实现来验证它并不难。
    • @Lars A. Brekken 如果您确实使用散列 mac,那么您仍然需要使用秘密。这可以通过 SSL 传输,类似于会话 ID。
    【解决方案2】:

    您的想法会受到重放攻击 - 如果有人观察到用户登录,他们可以存储静态文本加密与对称密钥并稍后使用它来验证自己。

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

    请注意,尽管这种方案,如所写,仍然容易受到中间人攻击。正如The Rook 建议的那样,使用 SSL 肯定会更好。这将要求您的客户端生成一个公钥并将其发送到 Web 服务。 Web 服务使用包含客户端公钥的签名证书以及 DN 字段中的客户端唯一标识符(用户名或其他)作为响应。单独连接上的服务器验证所使用的客户端证书(确保它由您的 Web 服务签名),并验证证书中的客户端标识符是否与请求连接的客户端匹配。

    【讨论】:

      猜你喜欢
      • 2011-10-18
      • 1970-01-01
      • 1970-01-01
      • 2020-12-20
      • 1970-01-01
      • 1970-01-01
      • 2014-07-31
      • 2013-01-20
      • 2017-06-07
      相关资源
      最近更新 更多