当应用程序在SSO中由颁发者解密令牌时涉及哪种算法?

时间:2012-08-24 05:04:17

标签: single-sign-on claims-based-identity claims

在使用SSO的基于声明的身份验证的情况下,应用程序从发行者接收特定用户的令牌,该令牌包含声明以及某种数字签名,以便应用程序跟踪发行者是值得信赖的。 我想知道,如果涉及某种算法,本应用程序会识别发行人吗? 我曾经读过发行人有公钥,所有其他应用程序都有自己的私钥,这是真的吗?

1 个答案:

答案 0 :(得分:2)

执行单点登录的协议,格式和方法有很多,例如Security Assertion Markup Language (SAML)OpenIDOAuth。目标是一个实体(例如网站)识别和验证用户(例如通过用户名和密码)和其他实体(例如其他websties)通过令牌信任该验证的证据。这意味着用户无需记住另一个密码,每个网站都会保留自己的密码列表。

此信任通常通过使用数字签名的加密来强制执行。使用数字签名是因为它允许信任实体验证令牌(1)仅由验证实体发出,(2)未被篡改而不能冒充(伪装)验证实体。

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

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

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

因此,验证实体不是加密用户详细信息,而是生成“哈希”或“摘要”并对其进行加密。哈希算法以非常难以逆转的方式将一段数据转换为少量数据(哈希)。不同的数据片段也会产生不同的哈希值。常见的哈希算法包括Message Digest 5 (MD5)Secure Hash Algorithm (SHA)及其派生词,如SHA1,SHA256和SHA512。

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

如果您想了解有关SAML和基于声明的身份验证的更多信息,我发现this video非常有用。它确实很复杂,您可能需要多次观看,但Vittorio非常详细地介绍了这些概念。