【问题标题】:Three-way authentication/handing an authenticated client off to a different server?三向身份验证/将经过身份验证的客户端移交给不同的服务器?
【发布时间】:2010-11-24 17:56:29
【问题描述】:

我有兴趣创建一种移交身份验证方法,其中有一个客户端和两个服务器(我们分别称它们为 Alice、Bob 和 Carmen Sandiego)。 Alice 是网络上某处的客户端(在浏览器中),可能位于 NAT 后面,该 NAT 为向不同地址的传出请求提供不同的 IP(我知道有一些公司 NAT 这样做,以防万一)。

Alice 使用标准质询-响应身份验证登录 Bob。目标是 Alice 现在可以向 Carmen 发出请求并被识别为经过身份验证的用户。我认为最好的方法是让 Bob 创建一些临时密钥,将其发送给 Alice 和 Carmen,然后 Alice 将该密钥发送给 Carmen。但是,我不是加密专家,所以我不确定如何确保这种通信安全。也就是说,如果 Alice-Bob 线路上有窃听者访问了密钥,它可以直接将其发送给 Carmen 并获得未经授权的访问。

那么有人对如何做到这一点有任何想法吗?我假设它涉及很多共享秘密、随机数和散列,但我不确定究竟什么是加密合理的。

谢谢, 罗伯特

【问题讨论】:

    标签: security language-agnostic authentication cryptography client-server


    【解决方案1】:

    只要这 3 台机器之间仅通过 SSL 进行通信,您就是安全的。弱点将在 Alice 浏览器本身。有权访问 Alice 浏览器的人可能能够提取令牌并从另一台机器上使用它们。

    【讨论】:

    • 这是一个开源项目,所以我不愿意为任何 SSL 证书付费。此外,无需对数据进行加密——只需进行身份验证。
    • 只要您的用户/客户可以接受,您就可以免费签署 SSL 证书。我不认为这可以解决事先交换密钥的问题,但它减少了曝光。
    【解决方案2】:

    听起来您在谈论密钥交换算法。这是一个很好理解的问题,你会很高兴听到,虽然我必须承认 对它不是特别了解。 Diffie-Hellman algorithm 似乎是最好的例子。

    如果你想深入了解这些东西,标准文本是 Bruce Schnieier 的Applied Cryptography。它的可读性很高,Practical Cryptography 也是如此。

    无论您做什么,都不要在没有彻底了解问题的情况下尝试实施这些东西,否则您最终会得到一个瑞士奶酪安全模型。使用经过验证的第三方产品总是更安全,尽管我不熟悉任何产品。

    【讨论】:

    • 啊,谢谢...是的,这东西很复杂。我对挑战-响应的理解足以实现它,但这看起来有点令人生畏。
    • 啊,经过进一步调查,这似乎允许两方交换加密密钥,但似乎没有涉及身份验证。卡门怎么知道爱丽丝就是爱丽丝?
    • 确实,DH 只提供了密钥交换的基本机制,您需要在此基础上构建附加层,例如安全身份验证。然而,在这一点上,我已经超出了我的深度,我只能再次向 Schnieier 先生推荐您。
    【解决方案3】:

    您可能想看看Kerberos。我不知道这个协议是否满足你的需求,但至少值得一试。

    特别是使用 Kerberos,客户端可以向服务器 1 验证自己的身份,例如可以验证客户端密码。如果客户端随后想要向第二个服务器验证自己的身份,他可以要求一张票。 票证基本上是一条包含服务器 ID、时间戳和会话密钥 K 等信息的短消息。该消息使用两个服务器共享的密钥进行加密。客户端收到会话密钥 K 和票证。 有了这两件事,他现在可以向第二台服务器验证自己的身份。 IE。客户端将票证发送到第二个服务器,该服务器解密票证检查 ids 时间戳等并获取会话密钥 K。即客户端和第二个服务器现在共享密钥 K,它们可以用于身份验证。

    我知道此说明太短,无法包含所有详细信息。我希望它不会太混乱。

    【讨论】:

    • 如果您想自己动手,Kerberos 是一个非常可靠的平台,因此您可以在此之后对其进行建模,尽管它比您所要求的更复杂并且涉及更多的步骤,但它是一个开始的地方。
    • 意识到这需要客户端和服务器 1 之间的机密性 - 否则任何其他观看的人也可以获得票证和会话密钥。 Kerberos 涵盖了这一点 - 如果您按照类似的方式自行开发,请注意这一点。
    • 是的,做认证和密钥分配权并不容易。 Kerberos 本身经历了多个版本,因为它包含严重的缺陷。即使只是查看其历史以了解潜在问题也很有启发性。
    • 嗯,我认为对于我的项目(流式视频服务器)来说,基线安全级别就足够了。
    【解决方案4】:

    Carmen 可以使用 OpenID 通过 Bob 对 Alice 进行身份验证,而不是传递身份验证令牌。这不会涉及 Alice 给 Carmen 任何凭据。它可能涉及另一个用户交互,但用户代理协助(签名的 cookie 或客户端证书)应该会减少这种情况(我通常必须在我第一次为消费者进行身份验证时与我的 OpenID 提供者交互)。

    这假设 Bob 和 Carmen 可以在每次需要身份验证时进行通信。

    【讨论】:

      【解决方案5】:

      如果不提及SAML,则此讨论将不完整,这是多站点身份验证的劳斯莱斯。把它们放在一起很有趣。

      【讨论】:

        猜你喜欢
        • 2011-11-04
        • 2012-08-28
        • 1970-01-01
        • 2012-04-15
        • 1970-01-01
        • 1970-01-01
        • 2017-04-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多