为什么GitHub只需要我的公钥就可以推送?

为什么GitHub只需要我的公钥就可以推送?,git,github,ssh-keys,Git,Github,Ssh Keys,我最近在cloud9(c9.io)上建立了一个项目。在cloud9上设置项目时,有一个包含公钥和私钥的.ssh目录。我假设这些是在您设置帐户时生成的 创建git存储库后,我在GitHub上将源代码设置为空存储库,并尝试将其推送到上游。正如所料,我没有权限 我复制了公钥的内容并将其添加到GitHub。在这一点上,我能够推到GitHub 我很好奇为什么GitHub只需要公钥。当我试图推动时,幕后发生了什么?私钥的作用是什么?私钥,顾名思义,是私钥。这是你的,也只是你的。你不应该给任何人私钥 您的私钥

我最近在cloud9(c9.io)上建立了一个项目。在cloud9上设置项目时,有一个包含公钥和私钥的.ssh目录。我假设这些是在您设置帐户时生成的

创建git存储库后,我在GitHub上将源代码设置为空存储库,并尝试将其推送到上游。正如所料,我没有权限

我复制了公钥的内容并将其添加到GitHub。在这一点上,我能够推到GitHub


我很好奇为什么GitHub只需要公钥。当我试图推动时,幕后发生了什么?私钥的作用是什么?

私钥,顾名思义,是私钥。这是你的,也只是你的。你不应该给任何人私钥


您的私钥允许您对邮件进行签名。然后发送带有签名的消息,任何拥有公钥的人都可以验证签名是否与消息匹配。这就是公钥密码的原理。因此Github只需要您的公钥来检查您是否是您声称的那个人。

在ssh使用的公钥系统中,一般的想法是使用公钥来检查数字签名,以验证您是否是您声称的那个人。私钥用于创建签名


当您尝试对github进行身份验证时,它不需要您的私钥。它只需要您的公钥来检查您是否是您声称的那个人。有更多关于的信息。

基本上,您只需要在使用私钥对数据进行“签名”时向github提供公钥,并使用公钥验证它是否真的是您。这就是github需要公钥的原因。它是非对称加密。

SSH公钥身份验证是

您的公钥和私钥都是,但是从公钥计算私钥在理论上是不可能的。密钥值的选择使得只有拥有私钥的人才能解密使用相关公钥加密的消息

继续进行简化的解释,身份验证顺序遵循

ek_-ny:嗨,我是ek_-ny,我的公钥是
abc123

c9.io:哦,是吗?好吧,如果你真的是ek_ny,那么你知道我在给你发送[加密秘密信息“神奇的单词是吱吱作响的ossifrage”]
00:01:02:03:aa:…

ek_ny:事实上,你给我发来了[解密]“这些神奇的文字都是些令人毛骨悚然的文字。”

伊奥:ek_ny,我的老朋友!很高兴见到你!进来吧

使用SSH,用户和主机都有密钥。这就是SSH要求您在第一次连接时确认主机密钥的原因。目的是检测中间人攻击。整个对话都是加密的,这要归功于引导过程

你从来没有真正交换过敏感信息。这就是挑战响应的概念。假设你有一把物理钥匙,你声称它能打开一扇门。为了给我演示一下,你可以把钥匙给我,但我可能不会还给你。也许你甚至不想让我看到门后的东西。足以证明你的要求是能够破门而入只有轻微的,你永远不会失去拥有你的钥匙这样做

另请参见:在Unix和Linux SE上。

我要说的是“自称”而不是“假装”。