大家好,关于SSH 加密和连接的一些事情相信很多的网友都不是很明白,包括也是一样,不过没有关系,接下来就来为大家分享关于关于SSH 加密和连接的一些事情和的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!
为了保证信息的安全传输,SSH协议在连接发起到完成的各个环节使用了多种不同类型的数据加密技术,包括可逆对称加密、非对称加密、不可逆哈希等。
对称加密
加密和解密数据之间的对应关系决定了加密方案是对称加密还是非对称加密。
最常见的加密方法是对称加密,这是一种使用相同密钥进行加密和解密的加密类型。因此,在对称加密中,任何人都可以使用该密钥来加密消息并解密使用它加密的任何消息。这种加密方法通常也称为“共享密钥”加密或“密钥”加密。通常,所有加密和解密操作仅使用一个密钥,或者使用一对密钥,但这对密钥可以很容易地相互推导。
基本上SSH数据传输过程中的所有过程都是使用对称密钥进行加密的。非对称加密仅在初始连接创建阶段和身份验证握手阶段使用。
客户端和服务器均通过共识算法生成密钥,并通过可信通道相互交换密钥。这个过程称为密钥交换。通过密钥交换,服务器和客户端可以共享某些公共数据,并结合各自的私有数据,通过算法获得相同的共享密钥。冲冲会在后面的第二部分详细解释这个过程。此过程创建的对称加密密钥是基于会话的,然后通过该会话发送服务器和客户端之间发送的加密数据。创建会话后,此后的所有数据都将使用共享密钥进行加密。
对称加密过程中最重要的是加密算法。 SSH 支持各种加密算法,包括AES、Blowfish、3DES、CAST128、Arcfour 等。服务器和客户端可以根据优先顺序协商支持的密码列表。服务器上可用的客户端列表中的第一个选项是加密算法。
在冲冲的Centos中,openssh7.4是默认算法。在连接github的git服务过程中,ssh协商算法为:
chacha20-poly1305@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc,aes192-cbc,aes128-cbc
这样,连接协商的结果将使用chacha20-poly1305@openssh.com作为认证密码,共享的加密算法为aes256-ctr。
我们注意到,加密算法采用ChaCha20-Poly1305,这是Google推出的全新加密套件,具有以下优点:ChaCha20-Poly1305避免了目前发现的所有安全漏洞和攻击; Poly1305的输出为16字节,HMAC-SHA1为20字节,可以节省16%的开销消耗。
非对称加密
非对称加密与对称加密的不同之处在于,为了在单个方向上发送数据,需要两组相关的密钥。其中一个密钥称为私钥,另一个称为公钥。
公钥可以公开共享。私钥与之匹配,无法根据公钥计算出公钥。公钥和私钥之间的数学性质保证了公钥加密的信息只能用私钥解密,而私钥加密的信息不能用公钥解密。
非对称加密中应用最广泛的RSA算法使用大素数可以轻松生成大整数(2048),但大素数几乎无法分解。最近很火的Atiya教授公布了证明《黎曼猜想》,就是利用了大素数分布的规则。如果证明有效并且能够发现大素数的分布规律,可能会影响大素数的分解。阅读广泛使用的RSA算法可能会有影响。
有趣的是,RSA算法被曝出丑闻。数学家发现算法中使用的随机函数DUAL_EC_DRBG 被NSA 操纵,并被植入后门。该算法可用于计算密钥。 NSA 使用该算法来监控和窃取一些加密信息。
我们知道密钥对中的私钥是用于解密消息的唯一密钥,因此私钥必须绝对保密,不能泄露给任何人。在实际应用中,除了保证私钥的存储外,冲冲还建议为SSH中用于系统认证的私钥设置密码,防止泄露。没有密码其他人无法使用。如果是自动程序、系统间访问git操作的一键,则不需要设置密码,方便。
SSH 在初始密钥交换期间使用非对称加密来建立对称加密(用于加密会话)。在此阶段,双方生成临时密钥对并相互交换公钥,以生成用于对称加密的共享密钥。
SSH还通过非对称加密的方式来验证SSH密钥:客户端创建密钥对,然后将公钥配置到远程服务器,具体是用户帐户目录的~/.ssh目录下的一个名为authorized_keys的文件,每一行对应公钥。
服务器收到用户的请求后,使用authorized_keys中的公钥比对证书指纹,找到用户的公钥,对消息进行加密,生成消息的哈希字符串,附加到消息中,返回给客户端。如果客户端可以使用自己的私钥解密消息,并用自己手中的服务器公钥加密验证字符串,则服务将使用自己的私钥解密消息来完成身份验证。这样就完成了证书交换和身份认证过程(密钥交换过程是相互独立的)。计算对称加密的共享密钥)并开始加密数据传输。
散列散列
SSH 协议中也使用了加密哈希值。哈希算法是一种不可逆算法。除非知道生成哈希比较的原始值,否则永远无法通过哈希计算出原始值(但是可以使用哈希碰撞,即利用可能的字符串或构造彩虹表来生成大量的哈希比较,目前MD5 和SSA1 不再绝对安全)。哈希算法通常用于创建消息的“签名”或生成一组消息摘要,以确保消息在传输过程中不被篡改。因为对数据的任何修改都会导致其哈希完全不一致。
注意:目前MD5和SHA-1可以通过大量计算生成,并且可以使用仔细设置的数据来修改数据内容,但可以保证哈希值保持不变。下图是谷歌去年2月份的SHA-1碰撞实验。两个背景完全不同的PDF,但生成的哈希值完全相同。
SSH对称加密协商过程中,通过哈希算法来选择消息认证码(MAC)生成算法。通过协商发送的每个加密消息都会附加该消息的公共MAC 作为消息的一部分,以便另一方可以使用它来验证数据包的完整性。 MAC 是根据对称共享密钥、消息的数据包序列号和实际消息内容计算得出的。 MAC 作为数据包的最后一部分单独发送。
常见加密算法对比
下面参考网上资料,对比一下常见的加密算法图:
常用的对称加密算法:
常用非对称算法比较
常用哈希算法比较

SSH 的工作原理
我们在上面的SSH算法的第二部分中简单提到了SSH的工作原理。这一部分,冲冲就来详细介绍一下。
SSH 协议使用客户端/服务器(CS) 模型来验证双方身份并为彼此加密数据。服务器组件侦听指定端口(默认为22)并接受连接。服务器端(SSHD)负责协商安全连接、对客户端进行身份验证,并在完成身份验证后初始化shell环境。
客户端负责启动与服务器的初始TCP握手,协商安全连接,并验证服务器的身份(记录的信息与~/.ssh/known_hosts中保存的证书匹配。期间需要手动输入Yes)第一次连接确认连接到服务器并记录域名、端口、IP和公钥),以及提供认证密码(key)。
SSH会话的建立分两个阶段:基于Diffie-Hellman算法的密钥交换过程和用户认证阶段。
密钥交换(Diffie-Hellman)
当客户端建立TCP 连接时,服务器会以其支持的协议版本进行响应。如果客户端可以匹配接受的协议版本之一,则连接将继续。服务器还提供其公共主机密钥,客户端可以使用该密钥来检查这是否是其想要访问的主机。
双方使用所谓的Diffie-Hellman 算法协商会话密钥。该算法使各方能够将自己的私有数据与来自其他系统的公共数据相结合,以计算相同的共享会话密钥。
密钥交换过程步骤如下:
1. 双方商定一个大素数,作为随机。。。
2、双方约定一种加密算法(通常是AES),然后用这个算法对数据进行加密。
3. 对话双方独立生成另一个素数,该素数是保密的。该素数用作双向交互的临时私钥。
4. 使用每个私钥共享大素数和加密算法生成公钥,并与对方交换公钥。
5. 接收方使用自己的私钥、对方的公钥和原始共享素数计算出共享密钥。虽然这个过程是独立的,但双方都使用自己的私钥和对方的公钥,因此可以生成相同的共享密钥。
7. 然后使用共享密钥加密此后的所有通信。
生成的秘密是对称密钥,因此双方都可以解密该消息。此过程确保后续数据通信在加密隧道中进行。
用户认证
会话加密通道建立后,SSH开始进入用户认证阶段。至此,用户验证和访问权限确定完成。根据服务器配置(sshd_config),可以使用多种身份验证方法:
1、密码验证:服务器提示客户端输入用户名和密码。密码通过加密隧道发送,这对外部各方来说是安全的。
由于这种方法涉及。。最新,泄密的可能性较大,所以虫虫不建议使用这种方法,尤其是直接用root登录,危害更大。
2.使用openssh密钥对认证:
具体步骤如下:
(1).客户端首先将需要认证的密钥对的用户名发送给服务器。
(2) 服务器检查客户端尝试登录的用户帐户下的authorized_keys文件。
(3) 如果在文件中找到匹配的公钥,则服务器生成一个随机数,并使用公钥对该随机数进行加密。并将加密后的消息发送给客户端。
(4) 如果客户端使用自己的私钥解密消息(如果可能),则将显示原始号码。
(5) 客户端将解密后的原始数字与用于加密通信的共享会话密钥相结合,并计算它们的哈希值。客户端将该哈希值发送回服务器作为响应。
(6)。服务器使用相同的共享会话密钥和先前发送给客户端的原始数字自行计算哈希值(步骤4)。将计算结果与客户端发回的哈希值进行比较。如果这两个值匹配,则证明客户端拥有私钥并且客户端通过了身份验证。
3、它的认证方式:比如结合ldap认证、二因素认证、以及更安全的Kerberos地狱狗认证,以后有机会再介绍,这里就不赘述了。
标题:关于SSH 加密和连接的一些事情
链接:https://www.ltthb.com/news/xydt/127557.html
版权:文章转载自网络,如有侵权,请联系删除!
用户评论
今天刚学了点SSH加密和连接的基本知识,感觉挺神奇的!以前没意识到这么安全的传输方式是远程工作不可或缺的一部分!这篇博文写的详细又通俗易懂,对新手学习者很有帮助!
有19位网友表示赞同!
虽然我一直在用SSH连接服务器,但对于具体的加密原理一直不太清楚。这篇文章讲解得很好,终于明白SSH是如何保障数据传输安全的了!建议可以再补充一些关于不同密钥类型和算法的介绍
有17位网友表示赞同!
最近工作需要经常远程访问公司服务器,感觉SSH真是太方便了!而且不用担心身份信息泄露,安全性真的很高。这篇博文很实用,帮了我不少忙!
有16位网友表示赞同!
讲真,我一直觉得SSH加密就只是一些复杂的代码设置,并没有实际意义啊!直到看了这篇文章我才明白它的重要性,原来是保护我们数据安全的重要武器啊!
有13位网友表示赞同!
我比较好奇这篇文章提到的一些高级配置,比如密钥管理和端口转发,什么时候可以用到呢? 可以在后面加几句说明,更容易理解。
有7位网友表示赞同!
感觉这篇博文的例子描述得不太具体,对于新手来说理解起来还是有难度。希望能用更多的实际案例来帮助我们更好地掌握SSH的应用场景!
有7位网友表示赞同!
我对SSH协议一直了解不多,这次读了这篇文章后收获不少。最让我感兴趣的是对不同SSH版本安全性的对比分析,很有启发意义!
有20位网友表示赞同!
这篇博文虽然很全面,但是有些地方还是比较专业,对于没有接触过网络安全的同学来说可能有点理解困难啊!建议可以添加一些更通俗易懂的解释。
有14位网友表示赞同!
我之前就用SSH连接服务器操作命令,感觉蛮方便的。不过这篇文章让我对SSH背后的原理有了更深刻的认识,原来有很多细节之处需要注意!
有20位网友表示赞同!
这篇博文写的真棒!通俗易懂的同时又讲解得很仔细,对我学习SSH加密和连接非常有帮助!以后我肯定还会再来参考!
有14位网友表示赞同!
最近在学习Linux系统管理,发现SSH加密连接对服务器安全至关重要。可惜我的理解能力有限,这篇文章能解释得那么清楚,真是太棒了!
有12位网友表示赞同!
说实话,我对网络安全方面不太了解。这篇博文用通俗易懂的语言讲解SSH加密和连接,让我更容易理解。以后学习相关知识的时候可以经常参考!
有19位网友表示赞同!
我觉得这篇文章对于刚入门Linux的人来说太复杂了,应该把一些技术细节压缩一下,以更加简洁明了的语言进行解释。
有10位网友表示赞同!
我个人觉得SSH加密和连接还是比较容易理解的,这篇博文有些内容有点重复。建议可以缩短文章长度,把重点部分再详细解释一下。
有20位网友表示赞同!
这篇博文确实写的很不错,特别是对SSH的不同应用场景进行分类讲解,非常实用! 以后学习SSH的时候可以作为参考教材!
有18位网友表示赞同!
我觉得这篇文章的标题有点过于笼统,建议可以更具体一些,例如“深入理解SSH加密原理”,这样才能吸引更多读者关注。
有9位网友表示赞同!
我一直在使用SSH连接服务器操作数据,但对于安全性我一直心存疑问。这篇博文帮我解决了疑惑,让我对SSH的加密机制有了更加清晰的认识!
有18位网友表示赞同!