前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >非对称加密的应用

非对称加密的应用

原创
作者头像
挥刀北上
修改2019-09-02 16:55:00
1.9K0
修改2019-09-02 16:55:00
举报
文章被收录于专栏:Node.js开发Node.js开发

估计有人看到这篇文章标题的时候会有很多的疑惑,非对称加密是干什么的,"非对称"大致很好理解,意思和对称相反,加密也能理解,但是非对称加密是个什么玩意儿。这东西有什么应用呢?

在开始聊非对称加密之前,咱们先来聊聊对称加密,什么是对称加密呢?

首先我们要清楚,网络中有些数据进行传输的时候,是需要加密的,比方说https,https中就用到了对称加密。

在http协议中,我们将用户发送给服务器端的真实信息叫做明文,明文传输很不安全,所以我们要将明文进行加密,打个比方,我们将明文锁在一个箱子里面,用户有这个箱子的钥匙,这个箱子加上明文就叫做密文,我们把密文发送到服务器,服务器也有一把钥匙,这把钥匙和用户的钥匙是一样的,所以能打开箱子进行解密,这个过程就叫对称加密。

因为客户的钥匙和服务端的钥匙是一样的,所以叫做对称加密。

图A

这里的对称加密有一个缺点,只要持有钥匙就能开锁,并不能确定对方的身份,只要有人持有了钥匙就能解密。

下面就该非对称加密出场了,非对称加密和对称加密不同,非对称加密有两把钥匙,一把叫做公钥,一把叫做私钥。

两个密钥是不同的,也可以称作“不对称”,公钥可以公开给任何人使用,而私钥必须严格保密(理论上不能被第三方知道,除非你的计算机被入侵)。这是非对称加密的一个非常重要的一个特性。

还有一个重要的特性,公钥和私钥有个特别的“单向”性,虽然都可以用来加密解密,但公钥加密后只能用私钥解密,私钥加密后只能用公钥解密,具体如何实现的,这里不做讨论。

通常情况下,⽹站保管私钥,将公钥分发给客户,客户登录⽹站只要⽤公钥加密就⾏了,密⽂只能由私钥持有者才 能解密。⽽hacker因为没有私钥,所以就⽆法破解密⽂。如图:

图B.

非对称加密在数据传输过程中并不能完全保证数据的完整性,比方说有中间人截取了公钥,发布一把假的公钥,非对称加密就形同虚设了。

但是我们这里讨论的是非对称加密的另外一个特性,非对称加密主要的功能是身份的认证,这里我们以github的公钥配置和ssh的免密登录两个案例为大家来演示非对称加密如何实现身份的认证。

文章读到这里请大家思考一个问题,大家仔细观察上面的图B,私钥解密完数据后,能判断出数据是哪个客户端发送过来的吗?

答案肯定是不能,我们在仔细回忆一下公私钥加密的特性,公钥加密私钥解密私钥加密公钥解密,私钥唯一保存,公钥所有客户端都有保存。

仔细观察上面的图B,是公钥加密,私钥来解密,私钥并不知道消息是谁发送的,但是反过来呢?私钥加密公钥解密,我们将上面的图发过来画,如图:

我们用私钥加密,私钥是唯一的,持有公钥的客户端,如果接收到与其匹配的私钥加密的信息,就可以解密,如果解密完成,就能判断是谁发送的信息了,因为私钥唯一(就像人的身份证号码是的,知道你的身份证号码就能确定你是谁),这样就完成了身份验证。

回过头来,在看一下我们通常配置github账号的公钥的时候,我们先在本地用ssh-keygen命令生成公私钥,id_rsa.pub和id_rsa, 前者是公钥,后者是私钥,我们将公钥填入我们github账号的配置里面,如图:

这样,我们再向远程仓库推送或者拉取代码就不需要在输入密码和账号了。

我们思考一下推送代码的流程,github云端保存我们的公钥,我们每次发起命令(git pull git push 等等),本地计算机用私钥加密,云端的公钥解密,github云端仓库解密完成说明公私钥匹配,完成身份验证,所以可以免去输入账号密码的麻烦。

另外一个应用就是用ssh命令登录远程的linux服务器,我们如果不用公私钥配对的方式验证身份,那么我们每次登录远超过linux服务器,都需要输入账号和密码验证,如果你频繁操作这是很麻烦的,或者如果要执行一些诸如scp的命令等等是很不友好的,所以我们可以使用公私钥配对的方式,ssh支持公私钥配对。

首先还是我们本地生成公私钥,当然如果你本地计算机已经生成公私钥就不需要重复生成了,我们将公钥配置到远程目标服务器,如何配置呢,通常是将公钥的内容填写到目标服务器的一个文件中,这个文件的位置在目标服务的 ~/.ssh/authorized_keys中。

配置如图,登录远程服务器,进入.ssh目录,将本地计算机的公钥添加到目标服务器的 ~/.ssh/authorized_keys中。

添加完成后,我们用cat 命令看一下authorized_keys文件的内容:

可以看到这里配置了1把公钥,所以有拥有和这个公钥匹配的私钥的客户端可以用ssh免密登录这个服务器。

将客户端公钥添加到目标服务器除了手动添加外,我们还可以使用scp_copy_id命令,完整命令如下:

·

代码语言:javascript
复制
ssh-copy-id -i  ~/.ssh/id_rsa.pub "-p 10056 root@192.168.20.11"

shh-copy-id命令是专门操作公钥的一名命令,-是指定客户端的公钥位置,一般都在用户目录的.ssh文件夹中。

-p命令指定登录目标服务器的端口,默认ssh端口是22,如果是非22那么就需要添加-p指定端口了。

后面就是用户名和目标服务器的ip了,用户名和目标服务器中间需要@作为间隔。

以上便是非对称加密的一些应用,如果你有其他建议或者问题欢迎留言讨论。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
访问管理
访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档