了解 SSH 加密和连接过程

介绍

_SSH,或安全壳,是一个安全的协议,是安全地管理远程服务器的最常见方式。使用一系列加密技术,SSH提供了建立两方之间加密安全连接的机制,对对方进行身份验证,并传输命令和输出。

在本指南中,我们将探讨SSH使用的潜在加密技术以及它用于建立安全连接的方法,这些信息可用于了解加密的不同层次以及形成连接和验证双方所需的不同步骤。

理解对称加密,不对称加密和哈希

为了确保信息的传输,SSH在交易的不同时刻使用了一系列不同类型的数据操纵技术,其中包括对称加密、不对称加密和哈希。

对称加密

加密和解密数据的组件的关系决定了加密方案是否对称或不对称。

对称加密是一种加密类型,其中一个密钥可以用来加密向对方发送的消息,以及解密从其他参与者收到的消息,这意味着持有密钥的任何人都可以加密和解密消息给持有密钥的其他任何人。

这种类型的加密方案通常被称为共享秘密加密,或秘密密密钥加密,通常只有一种用于所有操作的单一密钥或一对密钥,其中关系是可检测的,并且产生相反的密钥是微不足道的。

Symmetric keys 被 SSH 用来加密整个连接. 与一些用户假设相反,可以创建的公共/私人不对称密钥对仅用于身份验证,而不是加密连接。

客户端和服务器都为建立这个密钥做出贡献,由此产生的秘密永远不会被外部人知道。秘密密密钥是通过一个被称为 _key exchange 算法的过程创建的。

通过此过程创建的对称加密密钥基于会话,构成服务器和客户端之间发送的数据的实际加密。

SSH 可以配置以使用各种不同的对称加密系统,包括高级加密标准(AES)、Blowfish、3DES、CAST128 和 Arcfour. 服务器和客户端都可以决定他们所支持的加密的列表,按偏好排序。

在 Ubuntu 20.04 上,客户端和服务器的默认设置如下:

这意味着,如果两个Ubuntu 20.04 机器彼此连接(不通过配置选项超越默认加密器),它们将始终使用[email protected]加密器来加密他们的连接。

无对称加密

asymmetrical encryption 与对称加密不同,因为要将数据发送到一个方向,需要两个相关的密钥,其中一个被称为私钥,另一个被称为公共密钥。

公共密钥可以自由与任何一方共享,它与其配对密钥相关联,但私钥不能从公共密钥中衍生。公共密钥与私钥之间的数学关系允许公共密钥加密只能由私钥解密的消息。

private key 应保持完全保密,不应与其他方共享,这是公钥范式工作的关键要求。私钥是唯一能够解密使用相关公钥加密的消息的组件。

SSH在几个不同的地方使用非对称加密,在最初的密钥交换过程中,用于设置对称加密(用于加密会话),使用非对称加密,在这个阶段,双方都产生临时密钥对,并交换公共密钥,以产生用于对称加密的共享秘密。

与 SSH 相关的非对称加密的更广泛的用途来自于基于 SSH 密钥的身份验证。 SSH 密钥对可用于将客户端身份验证到服务器上。 客户端创建一个密钥对,然后将公共密钥上传到任何想要访问的远程服务器上。

在建立对称加密以确保服务器和客户端之间的通信后,客户端必须进行身份验证才能被允许访问。服务器可以使用该文件中的公共密钥来加密向客户端发送的挑战消息。

哈希

SSH利用的另一种形式的数据操纵是加密哈希。 _加密哈希函数_是创建简短的签名或一组信息的摘要的方法。

使用相同的哈希函数和消息应该产生相同的哈希;修改数据的任何部分应该产生完全不同的哈希。

鉴于这些属性,哈希主要用于数据完整性和验证通信的真实性。SSH的主要用途是使用 HMAC 或基于哈希的消息身份验证代码。

作为前面描述的对称加密谈判的一部分,选择了 _message authentication code (MAC) 算法。 该算法是通过通过客户端的可接受的 MAC 选择列表来选择的。

加密经过谈判后发送的每个消息都必须包含一个MAC,以便对方可以验证包的完整性。

MAC本身被发送到对称加密区域外,作为包的最后一部分,研究人员通常建议这种方法先加密数据,然后计算MAC。

了解SSH如何工作

SSH协议使用客户端服务器模型来验证两方并加密它们之间的数据。

服务器组件在指定端口上收听连接,负责谈判安全连接,验证连接方,并在接受凭证时生成正确的环境。

客户端负责与服务器开始初始传输控制协议(TCP)握手,谈判安全连接,验证服务器的身份匹配以前记录的信息,并提供身份验证。

SSH 会话分为两个不同的阶段,第一阶段是同意并建立加密,以保护未来的通信,第二阶段是验证用户并发现是否允许访问服务器。

谈判会议的加密

当客户端建立 TCP 连接时,服务器会用它支持的协议版本响应。如果客户端可以匹配可接受的协议版本之一,则连接会继续。

在此时,双方都使用一种叫做Diffie-Hellman算法的版本进行会话密钥的谈判,该算法(以及其变体)使每个方能够将自己的私人数据与来自对方系统的公共数据相结合,以获得相同的秘密会话密钥。

会话密钥将用于加密整个会话. 用于此程序部分的公钥和私钥对与用于验证客户端到服务器的 SSH 密钥完全分开。

经典Diffie-Hellman的这个程序的基础是:

  • 双方商定一个大质数,作为种子价值。 () ( )* 双方商定一个加密生成器(通常为AES),用于以预定义的方式操纵数值. ( ( )* 独立地说,每个政党都有另一个质数,这是对另一方保密的。 此数字被用作此交互的私钥( 不同于用于认证的私钥 SSH) 。 () ( )* 生成的私钥,加密生成器,和共享的质数用于生成从私钥衍生出来的公钥,但可以与对方共享. ( ( )* 双方随后交换各自产生的公用钥匙。
  • 接收实体使用自己的私钥,对方的公钥,以及原共享素数来计算共享密钥. 虽然这由各方独立计算,使用相反的私钥和公钥,但将产生共享密钥。 (_ ( )* 然后使用共享的密钥加密所有随后的通信( _) 。 (英语)

这个过程允许各方平等地参与生成共享秘密,这不允许一个端控制秘密,它还完成了生成相同的共享秘密的任务,而无需通过不安全的渠道发送该信息。

生成的秘密是一个对称的密钥,这意味着用于加密消息的同一个密钥可以用来解密它在另一边。

设置会话加密后,用户身份验证阶段开始。

验证用户访问服务器的权限

下一步涉及验证用户并决定访问,根据服务器接受的内容,可以使用几种方法进行身份验证。

一般的方法是 password authentication,这是当服务器要求客户端提供他们试图登录的帐户密码时。

尽管密码将被加密,但由于密码复杂性的限制,这种方法通常不建议使用,自动脚本可以与其他身份验证方法相比轻松破解正常长度的密码。

最流行的和推荐的替代方案是使用 _SSH 密钥对。SSH 密钥对是不对称的密钥,这意味着两个关联的密钥提供不同的功能。

公共密钥可以自由共享,因为虽然它可以对私钥进行加密,但没有方法从公共密钥中提取私钥。

使用 SSH 密钥对的身份验证开始后,如前一节所述,对称加密已建立。

  • 联合国 客户端开始为它想要认证的密钥对发送ID到服务器. () ( )* 服务器检查客户端试图登录密钥ID的账户的 授权_ keys 文件 。 ( ) ( )* 如果在文件中找到匹配ID的公钥,服务器会生成随机数字并使用公钥加密数字. ( ( )* 服务器向客户端发送此加密消息 。 () ( )* 如果客户端实际拥有关联的私人密钥,它将能够使用该密钥解密消息,并揭示出原始数字. (_ ( )* 客户端将解密后的数字和用于加密通信的共享会话密钥合并,并计算出此值的_MD5 hash_. MD5是一个消息-digest算法,使用散列函数生成128位散列值. (_ ( )* 然后客户端将这个 MD5 散列发送回服务器,作为加密数字消息的答案. (_) ( )* 服务器使用相同的共享会话密钥和它发送给客户端的原始编号,以便自己计算出MD5值. 它将自己的计算与客户寄回的计算作比较. 如果这两个值相匹配,则证明了客户端拥有私钥,且客户端被认证. (单位:千美元) (英语)

总之,密钥的不对称性允许服务器使用公共密钥来加密消息,然后客户端可以通过正确解密消息来证明其持有私钥。

结论

了解在 SSH 中工作的连接谈判步骤和加密层可以帮助您更好地了解当您登录远程服务器时会发生什么。

Published At
Categories with 技术
comments powered by Disqus