为什么GitHub只需要我的公钥才能推送?

时间:2015-02-12 14:08:49

标签: git github ssh-keys

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

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

我复制了我公钥的内容并将其添加到GitHub。那时我能够推送到GitHub。

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

4 个答案:

答案 0 :(得分:4)

SSH公钥验证是challenge-response

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

继续简化说明,认证顺序与

一致
  

ek_ny:嗨,我是ek_ny,我的公钥是abc123

     

c9.io:哦,是吗?好吧,如果你真的是ek_ny,那么当你发给我时你知道我的意思[加密秘密信息“神奇的话是娇气的ossifrage”] 00:01:02:03:aa:...

     

ek_ny:事实上,你发给我[解密]“这些神奇的词语是娇气的ossifrage。”

     

c9.io: ek_ny,我的老朋友!很高兴见到你!来吧!

使用SSH,用户和主机都有密钥。这就是SSH首次连接时要求您确认主机密钥的原因。目的是检测中间人攻击。由于引导过程的Diffie-Hellman,整个会话都是加密的。

您实际上没有交换过敏感信息。这是挑战 - 反应的想法。假设您有一个物理钥匙,您声称可以解锁一扇门。为了向我展示这个,你可以给我钥匙,但我可能不会把它还给我。也许你甚至不想让我看到门后面是什么。足以证明你的主张只能稍微打开门,你永远不会失去你的钥匙。

另请参阅: How is using a public-key for logging in to SSH any better than using a password?在Unix& Linux SE。

答案 1 :(得分:2)

私人密钥,如其名称所示,是私有密钥。这是你和你的。你永远不应该给任何人一个私钥。

您的私钥可让您签名留言。然后,您使用其签名发送邮件,任何拥有您的公钥的人都可以验证签名是否与邮件匹配。这就是公钥密码学的原理。所以Github只需要你的公钥来检查你是否是你声称的那个。

答案 2 :(得分:1)

公钥系统中的一般想法,例如一个ssh使用的公钥,用于检查数字签名以验证您是谁。私钥用于创建签名。

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

答案 3 :(得分:1)

基本上,当你使用私钥来"签署"时,你只需要给github公钥。数据和公钥,以验证它实际上是你。这就是为什么github需要公钥。它是非对称密码术。