在 OAuth 或令牌可以是不透明或透明的任何其他协议中,收益和风险取决于您想要的结果是什么:
- 如果您希望客户端能够解析访问令牌,则需要令牌是透明的。
- 如果您不希望客户端能够解析访问令牌,则需要该令牌是不透明的。
确实,这就是不透明和透明令牌的定义;客户可以看到它们,也可以不看到。
如果您的令牌是透明的,您必须对其进行签名,否则,任何人都可以简单地编辑您的令牌内容,并索取他们想要的任何东西。
因此,拥有不透明令牌的第一个明显好处是您可以丢弃任何签名机制;你不需要它,相反,如果你有一个适当的透明令牌,客户端可以读取令牌,但不能编辑它。
拥有不透明令牌的另一个好处是更安全。没有一种加密方法是真正随机的(即必须有一种方法来解密它),这意味着如果您可以读取足够多的令牌内容(透明令牌),您总是可以判断使用了哪种加密协议。这本身就减少了识别密码(了解协议)的时间。许多人不认为这是非常冒险的,事实上,如果您使用超过 80 位的熵,他们是正确的(10 个真正随机的字符作为您的密码,即“密钥”)。
但是,这风险更大;透明令牌允许破解者使用内容(因为他们看到它们),并且一些协议具有严重的弱点,允许您创建冲突甚至在更短的时间内解码密码,因为破解者会知道协议以及内容有效块的数量(大多数加密协议使用 16 字节长的块,因此如果您的令牌包含 160 个字符的数据,则您已为破解者提供了 10 个有效的密码组合。这减少了他们识别您的密码所需的时间一个数量级。给他们更透明的令牌也将进一步减少这个时间。一些协议降低了这种风险,但根据编码的性质,编码块和解码块都在你手中, 你'
这就是为什么许多人选择不透明令牌的原因。事实上,如果不需要任何外部实体能够解析您的令牌,您应该始终选择不透明的令牌。这方面的一个示例是一个服务框架,在该框架中,您仅将令牌作为盲声明传递给服务;您不知道它在说什么,但您知道它有效并且可以识别您。仅由服务通过密钥或密码来确认您的身份。
不透明令牌也不需要签名,我在上面提到过,它们也不需要透露有关所选协议的任何信息。
出于这个原因,它们更加安全,不仅在数学和逻辑上,而且摆脱了人为的实施错误,老实说,99% 的原因都是一开始就出现了裂缝。
有趣的笔记
即使是真正的随机性也意味着随机猜测时组合空间的 36.7% 损失(1 除以 e)。这意味着一个有 1000 种可能性的密码锁,如果随机猜测,实际上有 630 分之一的机会猜对它。
所以 1 / e 是你拥有的绝对最佳机会,那是纯随机的。
任何对人类感兴趣的“可能性”,即“信息”,根据定义并不是真正随机的,更糟糕的是,任何用于对其进行解码的协议都会通过协议的工作方式为密码放弃一些可能的空间。因此,实际上,您随机猜测答案的机会远小于大多数人谈论或认为他们实际拥有的熵或组合空间;通常,当所有帐户都由优秀的黑客衡量时,至少比外行认为的要容易一个数量级。