为什么GitHub应用程序在获取访问令牌时使用非对称加密,而在签署Webhook时使用对称加密



创建GitHub应用程序时,必须生成私钥并设置webhook机密

第一个用于对JWT令牌进行签名,使用该令牌可以获得访问令牌:https://docs.github.com/en/developers/apps/building-github-apps/authenticating-with-github-apps#authenticating-作为一个github-app

您将使用此密钥对JSON Web令牌(JWT(进行签名并使用RS256算法。GitHub检查请求是否经过身份验证通过使用应用程序存储的公钥验证令牌。

后者用于确保webhook来自GitHub:https://docs.github.com/en/developers/webhooks-and-events/webhooks/securing-your-webhooks

目的是使用SECRET_TOKEN计算哈希,并且确保结果与GitHub中的哈希匹配。GitHub使用HMAC十六进制摘要用于计算哈希,(…(

我想了解他们为什么使用两种不同的加密方法。难道其中一个不能同时用于两个用例吗?

谢谢!

虽然这两种情况都涉及密码学,但它们不是加密方法。在这两种情况下,我们都在讨论用于身份验证的数字签名。

第一篇文章是关于您的应用程序通过提供JWT令牌来访问GitHub API的。在这种情况下,您使用私钥对令牌进行签名。这是最安全的选择,因为GitHub只知道公钥,除了你之外没有人存储私钥。它对GitHub威胁模型的影响也是最小的,因为他们不必担心要存储的另一个秘密。如果你的私钥泄露了,那就不能怪他们。

在第二个场景中,GitHub会给你回电话,并需要对自己进行身份验证。在这种情况下,他们无法避免存储一些秘密,所以他们使用了一个更简单的模式:具有共享秘密的HMAC。

对称加密系统中,多方需要使用同一密钥,您总是面临如何安全地分发密钥的问题。这可以在非对称密钥系统中解决,在该系统中您可以自由分发公钥。因此,从功能的角度来看,不对称算法似乎可以解决我们的所有需求。

但是目前使用的非对称算法比对称算法慢很多。例如,非对称RSA比AES慢100-1000倍(取决于密钥大小等(。仅出于这个原因,非对称算法通常用于建立对称密钥,然后用于批量加密。