SSH或安全shell是一种安全协议,是安全管理远程服务器的最常用方法。使用多种加密技术,SSH提供了一种机制,用于在双方之间建立加密安全连接,向另一方验证每一方,以及来回传递命令和输出。
在其他指南中,我们讨论了如何配置基于SSH密钥的访问,如何使用SSH进行连接以及一些SSH提示和技巧。
在本指南中,我们将研究SSH采用的基础加密技术以及它用于建立安全连接的方法。此信息可用于了解各种加密层以及形成连接和验证双方所需的不同步骤。
为了确保信息的传输,SSH在事务中的各个点采用了许多不同类型的数据操作技术。这些包括对称加密形式,非对称加密和散列。
加密和解密数据的组件的关系确定加密方案是对称的还是非对称的。
对称加密是一种加密类型,其中一个密钥可用于加密对方的消息,也可用于解密从另一个参与者接收的消息。这意味着拥有密钥的任何人都可以加密和解密持有该密钥的任何其他人的消息。
这种类型的加密方案通常称为“共享秘密”加密或“秘密密钥”加密。通常只有一个密钥用于所有操作,或者一对密钥,其中关系易于发现,并且导出相反的密钥是微不足道的。
SSH使用对称密钥来加密整个连接。与某些用户假设的相反,可以创建的公共/私有非对称密钥对仅用于身份验证,而不是用于加密连接。对称加密允许对密码认证进行保护以防止窥探。
客户端和服务器都有助于建立此密钥,并且外部各方从不知道所产生的秘密。密钥是通过称为密钥交换算法的过程创建的。这种交换导致服务器和客户端通过共享某些公共数据并用某些秘密数据操纵它们而独立地到达相同的密钥。稍后将更详细地解释该过程。
此过程创建的对称加密密钥是基于会话的,并构成服务器和客户端之间发送的数据的实际加密。一旦建立,其余数据必须使用此共享密钥进行加密。这是在验证客户端之前完成的。
SSH可以配置为使用各种不同的对称密码系统,包括AES,Blowfish,3DES,CAST128和Arcfour。服务器和客户端都可以根据优先顺序决定其支持的密码列表。服务器上可用的客户端列表中的第一个选项用作两个方向的密码算法。
在Ubuntu 14.04中,客户端和服务器都默认这样的:aes128-ctr
,aes192-ctr
,aes256-ctr
,arcfour256
,arcfour128
,aes128-gcm@openssh.com
,aes256-gcm@openssh.com
,chacha20-poly1305@openssh.com
,aes128-cbc
,blowfish-cbc
,cast128-cbc
,aes192-cbc
,aes256-cbc
,arcfour
。
这意味着如果两台Ubuntu 14.04计算机相互连接(不通过配置选项覆盖默认密码),它们将始终使用aes128-ctr
密码加密其连接。
非对称加密与对称加密的不同之处在于,为了在单个方向上发送数据,需要两个相关的密钥。其中一个密钥称为私钥,而另一个称为公钥。
公钥可以与任何一方自由共享。它与其配对密钥相关联,但私钥不能从公钥中派生。公钥和私钥之间的数学关系允许公钥加密只能由私钥解密的消息。这是一种单向能力,这意味着公钥无法解密它写入的消息,也无法解密私钥可能发送的任何内容。
私钥应保密,绝不应与另一方共享。这是公钥范式的关键要求。私钥是唯一能够解密使用关联公钥加密的消息的组件。凭借这一事实,任何能够解密这些消息的实体已经证明它们可以控制私钥。
SSH在几个不同的地方使用非对称加密。在用于建立对称加密(用于加密会话)的初始密钥交换过程中,使用非对称加密。在这个阶段,双方都生成临时密钥对并交换公钥,以便产生将用于对称加密的共享密钥。
使用SSH进行非对称加密的更好讨论来自基于SSH密钥的身份验证。SSH密钥对可用于向服务器验证客户端。客户端创建密钥对,然后将公钥上载到其希望访问的任何远程服务器。它位于远程服务器上用户帐户主目录中authorized_keys
的~/.ssh
目录中调用的文件中。
在建立对称加密以保护服务器和客户端之间的通信之后,客户端必须进行身份验证以允许访问。服务器可以使用此文件中的公钥来加密到客户端的质询消息。如果客户端可以证明它能够解密此消息,则表明它拥有相关的私钥。然后,服务器可以为客户端设置环境。
SSH利用的另一种形式的数据操作是加密散列。加密散列函数是创建简洁“签名”或一组信息摘要的方法。它们的主要区别在于它们永远不会被逆转,它们几乎不可能以可预测的方式影响,它们实际上是独一无二的。
使用相同的散列函数和消息应该产生相同的散列; 修改数据的任何部分应该产生完全不同的哈希。用户不应该能够从给定的哈希生成原始消息,但是他们应该能够判断给定的消息是否产生给定的哈希。
鉴于这些属性,散列主要用于数据完整性目的并验证通信的真实性。SSH中的主要用途是使用HMAC或基于散列的消息验证代码。这些用于确保收到的消息文本完整且未经修改。
作为上面概述的对称加密协商的一部分,选择消息认证码(MAC)算法。通过完成客户端可接受的MAC选择列表来选择算法。将使用服务器支持的列表中的第一个。
协商加密后发送的每条消息都必须包含MAC,以便对方可以验证数据包的完整性。MAC根据对称共享密钥,消息的分组序列号和实际消息内容计算。
MAC本身作为数据包的最后部分发送到对称加密区域之外。研究人员通常建议首先加密数据,然后计算MAC。
您可能已经基本了解SSH的工作原理。SSH协议使用客户端 - 服务器模型来验证双方并加密它们之间的数据。
服务器组件侦听指定的端口以进行连接。它负责协商安全连接,验证连接方,并在接受凭证时生成正确的环境。
客户端负责开始与服务器的初始TCP握手,协商安全连接,验证服务器的身份是否与先前记录的信息匹配,以及提供身份验证的凭据。
SSH会话分两个阶段建立。首先是同意并建立加密以保护未来的通信。第二阶段是对用户进行身份验证,并发现是否应授予对服务器的访问权限。
当客户端建立TCP连接时,服务器会使用它支持的协议版本进行响应。如果客户端可以匹配其中一个可接受的协议版本,则继续连接。服务器还提供其公共主机密钥,客户端可以使用它来检查这是否是预期的主机。
此时,双方使用称为Diffie-Hellman算法的某种版本协商会话密钥。该算法(及其变体)使得每一方能够将他们自己的私有数据与来自另一系统的公共数据组合以得到相同的秘密会话密钥。
会话密钥将用于加密整个会话。用于此部分过程的公钥和私钥对与用于向客户端验证客户端的SSH密钥完全分开。
经典Diffie-Hellman的这个程序的基础是:
用于其余连接的共享秘密加密称为二进制数据包协议。上述过程允许每一方平等地参与生成共享秘密,这不允许一端控制秘密。它还完成了生成相同的共享秘密的任务,而无需通过不安全的通道发送该信息。
生成的秘密是对称密钥,这意味着用于加密消息的相同密钥可用于在另一侧解密它。这样做的目的是将所有进一步的通信包装在一个无法被外人破译的加密隧道中。
建立会话加密后,用户身份验证阶段开始。
下一阶段涉及验证用户和决定访问权限。根据服务器接受的内容,可以使用几种不同的方法进行身份验证。
最简单的可能是密码验证,其中服务器只是提示客户端输入他们尝试登录的帐户的密码。密码通过协商加密发送,因此对外方是安全的。
即使密码将被加密,由于密码复杂性的限制,通常不建议使用此方法。与其他身份验证方法相比,自动脚本可以非常轻松地破坏正常长度的密码。
最受欢迎和推荐的替代方案是使用SSH密钥对。SSH密钥对是非对称密钥,这意味着两个关联密钥服务于不同的功能。
公钥用于加密只能使用私钥解密的数据。公钥可以自由共享,因为尽管它可以加密私钥,但是没有从公钥导出私钥的方法。
在建立对称加密之后,使用SSH密钥对进行身份验证,如上一节所述。程序如下:
authorized_keys
客户端尝试登录密钥ID的帐户的文件。如您所见,密钥的不对称性允许服务器使用公钥加密到客户端的消息。然后,客户端可以通过正确解密消息来证明它拥有私钥。使用的两种类型的加密(对称共享密钥和非对称公钥 - 私钥)都能够利用它们在此模型中的特定优势。
了解SSH中的连接协商步骤和加密层可以帮助您更好地了解登录到远程服务器时发生的情况。希望您现在能够更好地了解各种组件和算法之间的关系,并了解所有这些组件如何组合在一起。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有