要服务器存的叫公钥,给用户的叫私钥,怎么感觉听的好别扭啊,应该是反了吧,服务器存的应该是私钥因为是不公开的所以存私,给用户的应该是叫公钥,应该是公开了已经,,但实际不是这样的,比如生成GITHUB的SSH KEY?
要服务器存的叫公钥,给用户的叫私钥,怎么感觉听的好别扭啊,应该是反了吧,服务器存的应该是私钥因为是不公开的所以存私,给用户的应该是叫公钥,应该是公开了已经,,但实际不是这样的,比如生成GITHUB的SSH KEY?
公钥是锁,私钥是钥匙。
你把锁分发给别人,你自己留一把钥匙。
要验证的时候你拿你的钥匙去开锁,能开开就是验证通过了。锁被别人复制了没关系,他们并不能做什么。
但是你如果自己留锁把钥匙分给别人,那么钥匙被别人复制了谁都能开你的锁了。
用户手里的是钥匙,不可公开。你提交给GitHub的公钥是可以公开的。。
弄反了。
http://songlee24.github.io/2015/05/03/public-key-and-private-key/
如果你是在服务器上生成公钥-私钥对,让后把私钥发给用户,那非对称加密机制已经丧失意义了。你在服务器上设置一个普通的(对称加密的)密码,然后发给用户,效果不是一样的吗?
非对称加密发明时,想要解决的问题就是:密钥可能在传递过程中泄露。通过在客户端生成公钥-私钥对,然后把公钥贴到Github上/传到服务器上,就保证了只有公钥需要通过网络传输,私钥始终在用户的本地放着,这样就保证了加密的可靠性。公钥就算公开也不影响加密,所以称之为公钥。
5 回答2.4k 阅读✓ 已解决
2 回答1.4k 阅读
886 阅读
1 回答725 阅读
784 阅读
1 回答606 阅读✓ 已解决
这要分场合的
看你的标签贴得是ssh-key,这个场景下你的描述是有问题的,不是服务器『给用户』,而是用户生成好公钥,给服务器。不能公开的私钥,在用户自己手里,服务器拿到的公钥,即使被泄露了,没有任何影响。这种情况下,服务器是作为验证的一方,验证用户的身份。
如果是访问HTTPS网站这种场景,建立连接时,服务器会把自己的公钥证书给客户端,在客户端验证过证书没问题之后,需要用这个公钥来解密服务器用私钥加密的消息。这种情况下,用户端是验证的一方,验证服务器的真实性。
总之,A要验证B的身份,A拿公钥,B拿私钥,就这样简单~