20150517
V2EX  ›  问与答

Github 为什么会允许任何人下载你的 public key?

  •  
  •   20150517 · Aug 5, 2015 · 6506 views
    This topic created in 4110 days ago, the information mentioned may be changed or developed.

    比如linus torvalds的公钥
    https://github.com/torvalds.keys

    公钥泄露了是没什么大问题,但是别人却可以这样鉴别你的身份,为什么github要这么设计,用处在哪?

    Supplement 1  ·  Aug 5, 2015
    注意,问题不是公钥泄露有什么安全问题,问题是公布在网站是什么意义?什么用处
    Supplement 2  ·  Aug 6, 2015
    我语文是数学老师教的,我错了,我表达是有问题,我感兴趣的是,为什么他要把你公钥做成一个页面。。。。
    43 replies  •  2015-08-06 23:24:42 +08:00
    typcn
    typcn
    Aug 5, 2015
    1
    jybox
    jybox
    Aug 5, 2015
    2
    只有公钥(里面不包含你在 Github 上的备注)没有任何危害的,不然你可以想一想攻击者可以用这些公钥做什么。
    20150517
    20150517
    OP
    Aug 5, 2015 via Android
    3
    2048位的公钥是真算不出私钥吗?云计算也不行?把linus私钥搞到,是不是可以植入代码到linux kernel里了,控制全世界了?
    freeznet
    freeznet
    Aug 5, 2015❤️1
    4
    今天刚好有人利用github的key数据和ssh的特性写了个PoC, 感兴趣的可以试试 ssh whoami.filippo.io 就能看到一些好玩的信息了
    同时也可以看看 https://blog.benjojo.co.uk/post/auditing-github-users-keys 这篇文章
    20150517
    20150517
    OP
    Aug 5, 2015 via Android
    5
    @jybox 要是碰撞了呢?
    elvodn
    elvodn
    Aug 5, 2015
    6
    公钥不就是为了让别人验证身份的吗
    Tink
    Tink
    Aug 5, 2015 via iPhone
    7
    对啊,我也好好奇公钥不就是为了让别人鉴别的么。。?
    TrustyWolf
    TrustyWolf
    Aug 5, 2015
    8
    @20150517 目前已知碰撞出来的最长位数貌似是700多,1024位的基本都是安全的,Github说明文档的推荐值是4096位,这已经是变态级别的了。
    AstroProfundis
    AstroProfundis
    Aug 5, 2015
    9
    PUBLIC key
    20150517
    20150517
    OP
    Aug 5, 2015 via Android
    10
    @elvodn
    @Tink

    问题不是公钥泄露有什么问题,问题是github为什么要把你公钥显示在网站上?
    jetbillwin
    jetbillwin
    Aug 5, 2015
    11
    You know, it's public key man.
    iptux
    iptux
    Aug 5, 2015
    12
    已从 2048 位全面升级至 8192 位
    qinix
    qinix
    Aug 6, 2015 via iPhone
    13
    公钥本来不就是应该公开发布出来的么,以前发pgp加密邮件的时候、验证签名、解密都是用公钥
    9hills
    9hills
    Aug 6, 2015 via iPad
    14
    @20150517 算不出,能算出请去拿图灵
    9hills
    9hills
    Aug 6, 2015 via iPad
    15
    @20150517 我以前把GPG公钥放博客上。。。

    这个没啥吧。
    20150517
    20150517
    OP
    Aug 6, 2015 via Android
    16
    @9hills 可我问的不是公钥安不安全啊?
    msg7086
    msg7086
    Aug 6, 2015
    17
    @20150517 公钥的目的就是公开。
    不公开就失去了公钥的目的了。
    很难理解么。
    ryd994
    ryd994
    Aug 6, 2015 via Android
    18
    不公开叫什么公钥
    yangff
    yangff
    Aug 6, 2015 via Android
    19
    @20150517 公开了才知道这个公钥是你的啊。。不然公开了干嘛。。
    20150517
    20150517
    OP
    Aug 6, 2015 via Android❤️1
    20
    @msg7086 我当然知道是为了公开,公开的用处是?我问的是怎么使用这个功能?为什么很多人没看懂问题就开始说公钥就是为了公开这种废话。。。

    @yangff
    @ryd994
    shanigan
    shanigan
    Aug 6, 2015
    21
    @20150517 https://en.wikipedia.org/wiki/Public-key_cryptography

    加密的例子:我可以用你的公钥加密我的邮件,然后发给你,然后你可以用你的私钥来解密读取。
    签名的例子:我想大众提供一个软件安装包,用我的私钥签名,你下载之后可以用我的公钥来验证你下载的安装包确实是我提供的。
    Pastsong
    Pastsong
    Aug 6, 2015
    22
    这个问题问得有问题,要问的应该是公钥有什么用
    kiritoalex
    kiritoalex
    Aug 6, 2015 via Android
    23
    我一般用4096位的,感觉没什么压力啊
    20150517
    20150517
    OP
    Aug 6, 2015 via Android
    24
    @shanigan
    @Pastsong
    好吧 我语文是数学老师教的,我当然知道公钥是什么用,rsa算法质数什么我大学还自己写过,我问的是,为什么github要搭这个接口,让大家的公钥显示在你的id上
    kiritoalex
    kiritoalex
    Aug 6, 2015 via Android
    25
    @shanigan 正解
    msg7086
    msg7086
    Aug 6, 2015
    26
    @20150517 为什么你连我们说的废话都不明白还来问这么废话的问题呢
    公开的用处是?
    你说这种废话问题你怎么能问的出来。
    公开的用处就是公开,就是让人知道,这就是作用。这么简单的道理都不明白?
    20150517
    20150517
    OP
    Aug 6, 2015 via Android
    27
    @msg7086 好吧,我语文不好, 我问的不是为什么公钥要公开,我问的是,他做这接口派什么用处?
    20150517
    20150517
    OP
    Aug 6, 2015 via Android
    28
    @msg7086 因为显然他做成这样一个http接口,而不是帖在你的profile上,不仅仅是为了公开显示,是为了提供api调用用的,但这功能 怎么用的?
    msg7086
    msg7086
    Aug 6, 2015
    29
    @20150517

    发布帖里说得很清楚了。

    Postmodern
    ‏@postmodern_mod3

    TIL @github exposes the ssh public keys for users. https://github.com/defunkt.keys Handy for adding devs to servers/repos.
    下午6:57 - 2013年2月9日

    [1]: https://twitter.com/postmodern_mod3/status/300438256200339456
    msg7086
    msg7086
    Aug 6, 2015❤️1
    30
    Today I learned from @postmodern_mod3 that GitHub exposes public ssh keys for its users. For example, if you wanted my public keys: https://github.com/adamstac.keys

    So never again should you have to ask, “What’s your public ssh key?” You can just
    ※ curl -O https://github.com/<username>.keys
    their public keys from GitHub and move on.

    [1]: https://changelog.com/github-exposes-public-ssh-keys-for-its-users/
    20150517
    20150517
    OP
    Aug 6, 2015 via Android
    31
    @msg7086 这才是我要的答案啊
    msg7086
    msg7086
    Aug 6, 2015
    32
    @20150517
    (1) 搜索只需要1分钟就能知道答案
    (2) 你需要学会提问
    wuchizhitu1988
    wuchizhitu1988
    Aug 6, 2015
    33
    我天。。。好理直气壮的伸手党啊 google首页结果都看不到?
    julyclyde
    julyclyde
    Aug 6, 2015
    34
    啊?提供下载的是ssh public key啊?这个好像没什么意义啊……
    提供GPG public key还差不多
    julyclyde
    julyclyde
    Aug 6, 2015
    35
    人家问的是,把SSH key公开并不能像GPG key一样提供“别人加密文件给key的主人”这种用途,因为目前并没有常见的用SSH key去做文件加密的软件,SSH public key的用途目前还仅仅限于ssh通信中的身份认证。而@msg7086 等几位却曲解为“公钥本来就没啥可保密的呀”。等有人出来回答之后,你们又开始说“只需要1分钟就能知道答案,你需要学会提问”

    我建议你们还是多学学语文
    msg7086
    msg7086
    Aug 6, 2015
    36
    @julyclyde 你曲解我的意思了。我建议你还是多学学语文。
    msg7086
    msg7086
    Aug 6, 2015❤️1
    37
    @julyclyde 我索性把整件事情讲讲清楚吧,免得睡觉了又断开对话。

    首先楼主标题里写了「为什么会允许任何人下载你的 public key」,顶楼写了「公钥泄露了是没什么大问题 但是别人却可以这样鉴别你的身份」,很明显着重提到了安全性,所以下面所有的楼层都在围绕着楼主提到的安全性问题展开讨论。楼主真正想知道的问题,为什么GitHub做了这样一个接口来提供这个数据,只占了顶楼不到四分之一的内容。下面歪楼简直是无可厚非。

    顺便你35楼的第一句话,「人家问的是,……」,说了2行却还是没把问题说清楚。建议你咨询语文老师,疑问句应该怎么写。

    第二句话,你说我等曲解为「公钥本来就没啥可保密的」。然而我说的是「公钥的目的/作用就是公开」。前者你说的这句是公钥的性质,而后者我说的这句是公钥的用途,这都能让你混在一起我也是服了。

    第三句话,「有人出来回答之后,你们又开始说……」抱歉,回答的人是我,回复这句话的人也是我。
    另外这句话我也不觉得有什么问题。我把楼主贴的github地址扔进谷歌,搜索,点开结果,复制,粘贴,点下回复键。很难吗?

    我不喜欢对人很mean。我尽可能在我的范围内用更温和的口气来回答问题。如果作为一个提问者,对着回答者就是一通「你们说的都是废话」,我也就呵呵了。至于你半途跳出来说了几句有的没的还让人「多学学语文」,我也就更呵呵了。
    20150517
    20150517
    OP
    Aug 6, 2015 via Android
    38
    @msg7086 算了 没什么好吵的,我是的问的有问题,我当时手机写的,写的比较简单,没考虑太多的后果,因为正好下班,确实没来及谷歌,就是觉得好奇,想让大家分享下

    向大家表示抱歉
    julyclyde
    julyclyde
    Aug 6, 2015
    39
    @msg7086 SSH public key那是给服务器鉴别用户的身份用的。如果某人要给别人开ssh登录权限,也应该直接找这个用户索取,而不是在公开渠道获得,因为并没有可靠的证据证明这个key就是这个人的。而SSH public key目前并不能用于其它密码术软件,所以也不存在加密文件或者签署数字签名的用法。

    当然在github这种场景里确实有Handy for adding devs to servers/repos. 这种做法,但lz和我都没想到。你如果有心指点,就直接举出来,犯不着拿与此根本无关的人对人的身份鉴别来说事。
    julyclyde
    julyclyde
    Aug 6, 2015
    40
    很多人都在回答:public key公开对安全无害。问题是lz根本就没问安全相关的问题,只是问这个看起来对外人没什么用的东西为什么被公开了,公开它的意义在哪儿
    msg7086
    msg7086
    Aug 6, 2015
    41
    @julyclyde 你还是没明白哪

    公钥,不管是SSH公钥也好SSL公钥也好。公钥的目的就是鉴别身份。
    比如我的公钥是AABB,那你怎么知道AABB这个公钥就是我的?
    当然是公开传播以后你才知道。而且是公开范围越大,知道得人越多,才越能证明我的公钥的可信度。
    最好是有著名网站、著名机构为公钥背书,这样公钥的可信度就越大。

    比如GPG就是把公钥上传到GPG的服务器去。而且通常这还不够,还需要现实生活中的其他朋友为你背书,说,大家看,这个GPG公钥,真的就是某某他本人的公钥。
    SSL证书也是这样,要各大SSL机构为其背书,说,大家看,这个SSL证书是我签的,我能证明这张证书背后的就是某某网站本身。

    同理这里SSH公钥也是这样。用户把公钥保存在GitHub服务器上,本身GitHub与用户之间就有鉴权行为,保证公钥只能由用户本人上传。那么本质上来说GitHub就是在为用户公钥的真实性背书了。对于第三方来说,确权行为不再需要用户本人参与,而直接找GitHub背书过的公钥就行了。

    以上这些就是我从17楼发言往下的推论。推出的结果和29楼没什么太大的区别。

    另外你说的「如果有心指点,就直接举出来」,而我确实就是这么做了。27、28楼,楼主确认了提问的主题以后我在5分钟内就针对问题给出了结果,不知你有何不满意的。
    楼主的提问明显的没有抓准重点,导致后面一排人歪楼。如果90%的读者都无法抓住你提问的重点,请问是90%的人语文水平都不合格,还是楼主没有好好表达清楚呢?
    julyclyde
    julyclyde
    Aug 6, 2015 via iPad
    42
    @msg7086 你在前面的回复里并没有表达github的CA角色,这正是我批评你的表达的点

    另外,github这个CA角色,虽经你提起,我有了些理解,还是认为这用途太窄了,实在不值去做
    msg7086
    msg7086
    Aug 6, 2015
    43
    @julyclyde 您批评得好,请收下我的膝盖。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4225 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 80ms · UTC 04:03 · PVG 12:03 · LAX 20:03 · JFK 23:03
    ♥ Do have faith in what you're doing.