5.1. User Code Brute Forcing (用户代码暴力破解)
由于 user code 由用户输入, 出于可用性原因, 较短的代码更理想. 这意味着它的熵通常会低于 device code 或其他 OAuth bearer token 类型所使用的熵, 因为那些代码的长度不会影响可用性. 因此, 建议服务器对 user code 尝试实施速率限制.
user code SHOULD 具有足够的熵, 使其在与速率限制和其他缓解措施结合时, 暴力破解攻击变得不可行. 例如, 通常认为用于加密的 128 位对称密钥在今天足够安全, 因为攻击者需要投入 2^96 的工作量, 才能通过暴力破解获得 2^-32 的正确猜测概率. user code 的速率限制和有限生命周期, 会人为限制攻击者可以"完成"的工作量. 例如, 如果使用 8 字符 base 20 user code (大约 34.5 位熵), 则速率限制间隔和有效期只需要总共允许 5 次尝试, 就能把随机猜测成功概率限制到同样的 2^-32.
如果攻击者成功暴力破解 user code, 就可以使用自己的凭据批准 authorization grant, 之后设备会收到一个关联到攻击者帐户的 device authorization grant. 这与 OAuth bearer token 被暴力破解时的场景相反, 后者是攻击者获得受害者 authorization grant 的控制权. 此类攻击并不总是有经济收益. 例如, 对于视频应用, 设备所有者随后可能可以使用攻击者的帐户购买电影, 但即便在这种情况下仍然存在隐私风险, 因而仍需要防护. 此外, device flow 的某些用途会让授予授权的帐户能够执行需要保护的操作, 例如控制设备.
user code 的确切长度及其包含的熵由 authorization server 自行决定. 在确定 user code 格式时, authorization server 需要考虑其特定 protected resource 的敏感性, 从可用性角度看代码长度是否实际可行, 以及已经部署的缓解措施, 例如速率限制.