在github的新身份验证令牌格式后面

2021-04-06 03:05:56

我们很兴奋地分享深入潜入我们的新认证令牌格式如何构建以及这些改进如何让您的令牌更安全。随着我们继续专注于我们对网上的平台和服务的安全性,此更新显示了影响简单更改的巨大程度。

我们的许多旧身份验证令牌格式是十六进制编码的40个字符串,它与SHA哈希等其他编码数据无法区分。这些具有若干限制,例如效率低效甚至是对秘密扫描功能的受损令牌的检测效率差效甚至不准确。我们不断争取安全卓越,所以我们知道令牌检测是我们想要改进的东西。我们如何让我们的令牌更容易识别和更安全?

没有进一步的ADO,这里是我们新的身份验证令牌格式后面的设计决策,让我们满足两个目标。

正如我们从懈怠和条纹这样的公司看到整个行业,令牌前缀是一种明确的方式来制作令牌可识别。我们包括特定的3个字母前缀来表示每个令牌,以公司辅助程序,GH和令牌类型的第一个字母开始。结果是:

此外,我们希望在令牌内明确区分这些前缀,以提高可读性。因此,我们正在添加一个分隔符:_。一个下划线不是一个base64字符,它有助于确保我们的令牌不能因随机生成的字符串而不意外复制。

当双击它时,另一件事_关于_这是可靠地选择整个令牌。我们考虑的其他字符有时包含在应用程序字分隔符中,因此将停止在该字符处突出显示。尝试双击此随机文本与this_random_text!

通过单独使用此前缀,我们预计秘密扫描的假阳性率将降至0.5%。

可识别的前缀很棒,但让我们进一步走一步。校验和几乎消除了秘密扫描离线的误报。我们可以检查令牌输入与校验和匹配,并在不必点击我们的数据库中消除虚假令牌。

每个令牌的最后6位数字中的32位校验和在保持随机令牌部分以一致的熵和足够的信心在校验和之间击中了最佳平衡。我们以CRC32算法,标准校验和算法开始实现。然后,我们根据需要使用领先的零进行基本62实现对结果进行编码。

我们当然无法忘记令牌熵。熵是可能令牌组合中固有的信息或不确定性的对数衡量标准。我们将其用作给定模式的唯一性的表示,为我们每天产生的广大令牌维护很重要。仅为个人访问令牌单独,我们在高峰日慢一天和18K上创建超过10K。通过我们的新格式,不仅我们维持了之前的水平 - 我们增加了它们!

math.log(((“a”..“f”)。to_a +(0..9).to_a).length)/math.log(2)* 40 = 160

math.log(((“a”..“z”)。to_a +(“a”..“z”)。to_a +(0..9).to_a).to_a).length)/math.log(2) * 30 = 178

随着我们继续发展并前进,我们将更多地增加这种熵。但是,现在,我们很激动我们的令牌,这些令牌有更多的可识别性,安全性和熵 - 都没有改变令牌长度。

我们强烈建议您重置您拥有的任何个人访问令牌和OAuth令牌。这些改进有助于秘密扫描检测,并将帮助您减轻令牌的任何风险。您可以使用我们的API将您的个人访问标记重置您的个人访问令牌和您的OAuth令牌。

如果您作为平台的一部分发出令牌并且不是我们秘密扫描功能的一部分,我们会遵循我们遵循我们自己的令牌的指南,并加入我们的秘密扫描程序,因此我们也可以保护您的令牌安全。 我们感谢您帮助我们使我们的平台和服务最好,最安全。