SSH原理

SSH工作原理学习

一、网络安全传输

网络安全涉及到很多个方面,我们这里仅仅讨论下网络数据传输过程中可能受到的威胁,其中常见的有:

  • 数据窃听
  • 数据篡改
  • 身份伪装

针对以上威胁,我们介绍下网络数据传输的安全性涉及的几个方面:

  1. 机密性
    机密性是指对要传输的数据进行加密和解密,防止第三方看到通信数据的明文内容。其对应的通信过程如下:
数据发送方:
plaintext(明文) ==> 转换算法 ==> ciphertext(密文)   
数据接收方:
ciphertext(密文) ==> 转换算法 ==> plaintext(明文)

【对称加密】
对称加密是指数据加密与解密使用相同的密钥。
常用的加密算法:DES,3DES,AES(Advanced Encryption Standard)

  1. 完整性
    数据完整性是指不允许数据在传输过程中被修改(第三方恶意篡改或部分数据丢失),但是它不要求数据的机密性,也就是说允许其他人看到明文数据。我们通常通过以不可逆的算法对数据提取特征码(也叫数据指纹),通过验证特征码的一致性来判断数据是否被修改过,通信过程如下:
数据发送发:
plaintext(明文) ==> 转换算法 ==> plaintext(明文) + footprint(数据指纹A)
数据接收方:
plaintext(明文) + footprint(数据指纹A) ==> 转换算法 ==> footprint(数据指纹B) ==> 对比数据指纹A与B是否一致

【单向加密】
单向加密是指只能对明文数据进行加密,而不能解密数据。
常用的加密算法:MD5,SHA

  1. 身份验证
    身份验证通常是指数据接收方需要确认发送数据给自己的数据是自己想要通信的那一方,防止他人冒充通信对方的身份进行通信。身份验证的大体原理是:数据发送方与数据接收方约定一种特殊的数据加解密方式,数据发送方将一个通过约定的加密方式进行加密后的数据发送给数据接收方,数据接收方如能按照约定的加密方式正确解密该数据就表示对数据发送方的身份验证成功。其对应的通信过程如下:
数据发送方:
plaintext(明文) ==> 转换算法 ==> ciphertext(密文)
数据接收方:
ciphertext(密文) ==> 转换算法 ==> plaintext(明文)

【公钥加密(非对称加密)】
加密和解密所使用的密钥是不同的,它所使用的密钥是一对儿,一个叫公钥,一个叫私钥。这对密钥不是独立的,公钥是从私钥中提炼出来,因此私钥一般很长的。
通常公钥是公开的,所有人都可以得到;私钥是不能公开的,只有自己才有。
用公钥机密的内容只能用与之对应的私钥才能解密,反之亦然,这个特点尤为重要。
常用加密算法:RSA,DSA

三、SSH工作原理

其实SSH是充分利用了公钥加密/非对称机密 、对称加密 和 单向加密 来实现数据安全登录的。在使用SSH进行通信时,通信过程分为以下几个步骤:

  • 1)生成会话密钥: 这个会话密钥,不是密钥对儿中公钥或私钥,而是通过密钥协商技术生成密钥。这个密钥会被通过被登录机器的密钥对进行加密后传输,用于后续所有(通过对称加密方式进行的)加密通信。
  • 2)用户身份认证(登录):* 这个对登录者进行身份验证的过程是通过登录者的密钥对儿对数据进行加解密验证实现的,这个过程中传输的所有数据都是通过上一步生成的密钥加密过的。
  • 3)数据加密通信: 后面就行基于第1步生成的密钥进行数据加密传输的通信过程了。

流程

  • 1)在主机A上向主机B发送连接请求;
  • 2)主机B在与用户建立连接后,把自己的公钥发送给主机A;
  • 3)主机A通过密钥协商技术产生一个随机密钥,然后使用主机B的公钥对这个随机密钥进行加密后发送给主机B;
  • 4) 主机B接收到主机A发送过来的密文形式的密钥后,通过自己的私钥进行解密,得到对称加密使用的密钥明文;至此,会话密钥已经生成完毕了;
  • 5)主机A通过生成的会话密钥对账号和密码等信息进行加密然后发送给主机B;
  • 6)主机B接收到加密信息后,使用会话密钥进行解密,从而得到明文的账号和密码进行账号验证;
  • 7)主机B在验证账号和密码后通知主机A是否登录成功;
    在这里插入图片描述

SSH免密钥登录过程

我们想在主机A上以root用户以SSH免密钥的方式登录主机B,登录验证过程是这样的:

  • 1)主机A与主机B协商产生会话密钥;
  • 2)主机A会向主机B发送一个登录请求(如:root@192.168.1.2),发送的信息包括用户名root和root的公钥指纹,且所有信息都是通过会话密钥加密过的。
  • 3)主机B通过会话密钥解密主机A发送的数据得到请求登录的用户名root和root的公钥指纹,然后读取root用户家目录下的所有公钥数据(/root/.ssh/autorized_keys文件中),并分别通过单向加密算法获取各公钥的数据指纹与主机A发送过来的数据指纹做对比,从而找到主机A上的root用户的公钥;
  • 4)主机B使用找到的root用户的公钥对一个随机数进行加密发送发送给主机A;
  • 5)主机A使用root用户的私钥对主机B发送的随机数密文进行解密,然后把解密结果发送给主机B;
  • 6)主机B验证主机A解密后的数据与自己发送的数据一致,则对root用户的身份验证成功;
    在这里插入图片描述

参考资料:

https://www.cnblogs.com/yyds/p/6992125.html

https://www.cnblogs.com/mujian/p/7665952.html

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值