三方认证/将经过身份验证的客户端交给另一台服务器?

时间:2009-09-01 19:08:15

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

我有兴趣创建一种切换身份验证方法,其中有一个客户端和两个服务器(分别称为Alice,Bob和Carmen Sandiego)。 Alice是'网络上某个地方的客户端(在浏览器中),可能在NAT后面,为不同地址的传出请求提供不同的IP(我知道有一些企业NAT可以做到这一点,以防万一)。

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

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

谢谢, 罗伯特

5 个答案:

答案 0 :(得分:4)

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

特别是对于Kerberos,客户端可以向server1验证自己,前面的示例可以验证客户端密码。如果客户端然后想要向第二个服务器验证自己,他可以要求票证。 故障单基本上是一条短消息,其中包含服务器ID,时间戳和会话密钥K等信息。此消息使用由两个服务器共享的密钥加密。客户端接收会话密钥K和票证。 有了这两件事,他现在可以向第二台服务器验证自己。即客户端将票证发送到第二服务器,该服务器解密票证检查ID时间戳等并获得会话密钥K.即客户端和第二服务器现在共享密钥K,它们可以用于认证。

我知道此描述太短,无法包含所有细节。我希望它不会太混乱。

答案 1 :(得分:3)

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

如果你想要很好地理解这些东西,标准文本是Bruce Schnieier的Applied Cryptography。它具有高可读性,Practical Cryptography也是如此。

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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