1

在使用 SSO 的基于声明的身份验证的情况下,应用程序从颁发者处为特定用户接收令牌,并且该令牌包含声明以及某种数字签名,以便应用程序跟踪颁发者是受信任的一。我想知道,该应用程序是否涉及某种算法来识别发行人?我读过发行者有一个公钥,而所有其他应用程序都有自己的私钥,这是真的吗?

4

1 回答 1

2

进行单点登录的协议、格式和方法有很多,例如安全断言标记语言 (SAML)OpenIDOAuth。目标是让一个实体(例如网站)识别和验证用户(例如通过用户名和密码),而其他实体(例如其他网站)通过令牌信任该验证的证据。这意味着用户无需记住另一个密码,并且每个网站都维护自己的密码列表。

这种信任通常是通过使用数字签名的密码术来实施的。使用数字签名是因为它允许信任实体验证令牌是 (1) 仅由身份验证实体颁发的和 (2) 在无法冒充(假装是)身份验证实体的情况下未被篡改。

正如您上面所说,这是使用非对称或公钥密码术执行的。对称密码术,例如 AES 或 DES 算法,使用单个密钥来加密和解密数据。非对称加密,例如RSA算法,使用两个相关的密钥。使用其中一个加密的数据只能由另一个解密,反之亦然。

一个密钥通常是保密的,称为私钥,另一个是广泛分布的,称为公钥。在上面的示例中,身份验证实体拥有私钥,允许它加密任何拥有公钥的人都可以解密的数据。

似乎验证实体只会加密用户详细信息并将其用作令牌。但是,常用的非对称算法(如 RSA)速度非常慢,即使加密少量数据也可能需要很长时间。

因此,身份验证实体不是加密用户详细信息,而是生成“散列”或“摘要”并对其进行加密。散列算法以非常难以逆转的方式将一段数据转换为一个小数(散列)。不同的数据片段也会产生不同的哈希值。常见的散列算法包括消息摘要 5 (MD5)安全散列算法 (SHA)及其衍生算法,如 SHA1、SHA256 和 SHA512。

使用认证实体的私钥加密的散列称为数字签名。当它收到令牌时,信任实体使用身份验证实体的公钥解密令牌,并将其与它自己计算的哈希值进行比较。如果散列相同,则信任实体知道它没有被修改(因为散列匹配)并且它必须来自身份验证实体(因为只有它知道它的私钥)。

如果您想了解有关 SAML 和基于声明的身份验证的更多信息,我发现此视频非常有用。它确实很快变得复杂,您可能需要多次观看,但 Vittorio 非常详细地涵盖了大多数这些概念。

于 2012-09-01T03:41:56.200 回答