了解SSH加密和连接过程 转

介绍

SSH或安全shell是安全协议,也是安全管理远程服务器的最常用方式。通过使用多种加密技术,SSH提供了一种机制,用于在双方之间建立加密安全连接,对彼此进行身份验证,以及来回传递命令和输出。

在其他指南中,我们讨论了如何配置基于SSH密钥的访问如何使用SSH进行连接,以及一些SSH提示和技巧

在本指南中,我们将研究SSH采用的底层加密技术及其用于建立安全连接的方法。这些信息可用于理解加密的各个层次以及形成连接和验证双方所需的不同步骤。

对称加密,非对称加密和哈希

为了确保信息的传输,SSH在交易的各个阶段采用了多种不同类型的数据处理技术。这些包括对称加密,不对称加密和哈希的形式。

对称加密

加密和解密数据的组件之间的关系确定加密方案是对称还是不对称。

对称加密是一种加密类型,其中一个密钥可用于加密到对方的消息,并且还用于解密从另一个参与者接收到的消息。这意味着持有密钥的任何人都可以将消息加密和解密给持有该密钥的其他人。

这种类型的加密方案通常称为“共享秘密”加密或“秘密密钥”加密。通常只有一个键用于所有操作,或者一对键容易发现关系,并且导出相反键是微不足道的。

对称密钥由SSH用于加密整个连接。与某些用户所设想的相反,可以创建的公钥/私钥不对称密钥对仅用于身份验证,而不用于对连接进行加密。对称加密甚至可以保护密码认证免受窥探。

客户端和服务器都为建立这个密钥做出了贡献,并且由此产生的秘密从未被外界知晓。秘密密钥是通过称为密钥交换算法的过程创建的。这种交换导致服务器和客户端通过共享某些公共数据并使用某些秘密数据操纵它们而独立地到达相同的密钥。这个过程在稍后更详细地解释。

此过程创建的对称加密密钥是基于会话的,并构成了在服务器和客户端之间发送的数据的实际加密。一旦建立,其余数据必须使用此共享密钥加密。这在验证客户端之前完成。

SSH可以配置为使用各种不同的对称密码系统,包括AES,Blowfish,3DES,CAST128和Arcfour。服务器和客户端都可以决定他们支持的密码列表,按照优先顺序排列。服务器上可用的客户端列表中的第一个选项用作双向密码算法。

在Ubuntu 14.04中,客户端和服务器都默认这样的:aes128-ctraes192-ctraes256-ctrarcfour256arcfour128aes128-gcm@openssh.comaes256-gcm@openssh.comchacha20-poly1305@openssh.comaes128-cbcblowfish-cbccast128-cbcaes192-cbcaes256-cbcarcfour

这意味着如果两台Ubuntu 14.04机器相互连接(不通过配置选项覆盖默认密码),它们将始终使用aes128-ctr密码来加密其连接。

非对称加密

不对称加密与对称加密不同之处在于,要以单一方向发送数据,需要两个相关联的密钥。其中一个密钥称为私钥,另一个称为公钥

公共密钥可以与任何一方自由共享。它与其配对的密钥相关联,但私钥不能从公钥中派生。公钥和私钥之间的数学关系允许公钥对只能由私钥解密的消息进行加密。这是一种单向能力,这意味着公共密钥无法解密其写入的消息,也不能解密私钥可能发送的任何内容。

私钥应完全保密,绝不应与另一方共享。这是公钥模式工作的关键要求。私钥是唯一能够解密使用相关公钥加密的消息的组件。由于这个事实,任何能够解密这些消息的实体都证明它们在控制私钥。

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

有关SSH非对称加密的更多讨论使用来自SSH密钥认证。SSH密钥对可以用来认证客户端到服务器。客户端创建密钥对,然后将公钥上传到任何希望访问的远程服务器。它放置在远程服务器上用户帐户主目录中authorized_keys~/.ssh目录中调用的文件中。

在建立对称加密以保护服务器和客户端之间的通信之后,客户端必须进行身份验证才能被允许访问。服务器可以使用该文件中的公钥来加密到客户端的质询消息。如果客户可以证明它能够解密这个消息,它已经证明它拥有相关的私钥。服务器然后可以为客户端设置环境。

哈希

SSH利用的另一种数据操作形式是加密哈希。加密散列函数是创建一个简洁的“签名”或一组信息摘要的方法。他们的主要区别特征是他们永远不会被颠倒过来,他们实际上不可能产生可预测的影响,而且他们实际上是独一无二的。

使用相同的散列函数和消息应该产生相同的散列; 修改数据的任何部分应该产生完全不同的散列。用户应该能够从给定的散列产生原始消息,但他们应该能够判断给定的消息是否产生给定的散列。

鉴于这些属性,散列主要用于数据完整性目的并验证通信的真实性。SSH中的主要用途是使用HMAC或基于散列的消息认证代码。这些用于确保收到的消息文本完好无损。

作为上述对称加密协商的一部分,选择消息认证码(MAC)算法。该算法通过处理客户端可接受的MAC选择列表来选择。将使用服务器支持的第一个列表。

在加密之后发送的每条消息都必须包含一个MAC,这样对方才能验证数据包的完整性。MAC由对称共享密钥,消息的数据包序列号和实际消息内容计算而得。

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

SSH如何工作?

您可能已经对SSH的工作原理有了基本的了解。SSH协议使用客户端 - 服务器模型来认证双方并对它们之间的数据进行加密。

服务器组件在指定的端口上侦听连接。它负责协商安全连接,验证连接方,并在证书被接受时产生正确的环境。

客户端负责开始与服务器的初始TCP握手,协商安全连接,验证服务器的身份是否匹配先前记录的信息,并提供凭证进行身份验证。

SSH会话分两个阶段建立。首先是同意并建立加密以保护未来的通信。第二阶段是验证用户并发现是否应该授予对服务器的访问权限。

协商会话的加密

当客户端进行TCP连接时,服务器会使用其支持的协议版本进行响应。如果客户端可以匹配其中一个可接受的协议版本,则连接将继续。服务器还提供其公共主机密钥,客户可以使用该密钥来检查这是否是预期的主机。

此时,双方使用一种称为Diffie-Hellman算法的版本来协商会话密钥。该算法(及其变体)使每个参与方都可以将他们自己的私人数据与来自其他系统的公共数据结合起来,以获得相同的秘密会话密钥。

会话密钥将用于加密整个会话。用于这部分过程的公钥和私钥对完全独立于用于向服务器验证客户端的SSH密钥。

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

  1. 双方就一个大的素数达成一致,这将作为种子价值。
  2. 双方就加密生成器(通常是AES)达成一致,该加密生成器将用于以预定义的方式处理这些值。
  3. 独立地,每一方都提出另一个对另一方保密的素数。此号码用作此交互的私钥(与用于身份验证的私有SSH密钥不同)。
  4. 生成的私钥,加密生成器和共享素数用于生成从私钥导出但可与另一方共享的公钥。
  5. 两位参与者然后交换他们生成的公钥。
  6. 接收实体使用自己的私钥,对方的公钥和原始共享素数来计算共享密钥。虽然这是由各方独立计算的,但使用相反的私钥和公钥,它将导致相同的共享密钥。
  7. 共享密钥然后用于加密后面的所有通信。

用于其余连接的共享秘密加密称为二进制数据包协议。上述过程允许每一方平等参与生成共享秘密,这不允许一端控制秘密。它还可以完成生成相同共享密钥的任务,而无需通过不安全的通道发送该信息。

生成的密钥是一个对称密钥,这意味着用于加密消息的相同密钥可用于解密另一端的密钥。这样做的目的是将所有进一步的通信封装在一个不能被外人解密的加密隧道中。

会话加密建立后,用户认证阶段开始。

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

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

最简单的可能是密码认证,其中服务器只是提示客户端输入他们试图登录的帐户的密码。密码是通过协商加密发送的,所以它是安全的,不受外界影响。

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

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

公钥用于加密只能用私钥解密的数据。公钥可以自由共享,因为虽然它可以对私钥进行加密,但没有从公钥中派生私钥的方法。

如上一节所述,在建立对称加密之后,使用SSH密钥对进行身份验证。过程如下所示:

  1. 客户端首先发送一个想要认证的密钥对的ID给服务器。
  2. 服务器检查authorized_keys客户端尝试登录的密钥ID的帐户文件。
  3. 如果在文件中找到具有匹配ID的公钥,服务器将生成一个随机数并使用公钥对数字进行加密。
  4. 服务器向客户端发送此加密消息。
  5. 如果客户端实际上拥有关联的私钥,则它将能够使用该密钥对消息进行解密,从而显示原始号码。
  6. 客户端将解密的数字与用于加密通信的共享会话密钥相结合,并计算该值的MD5哈希值。
  7. 然后客户端将此MD5散列发送回服务器,作为加密号码消息的答案。
  8. 服务器使用相同的共享会话密钥和它发送给客户端的原始号码自行计算MD5值。它将自己的计算与客户发回的计算进行比较。如果这两个值匹配,则证明客户端拥有私钥并且客户端已被认证。

如您所见,密钥的不对称性使服务器可以使用公钥将消息加密到客户端。然后客户端可以通过正确解密消息来证明它拥有私钥。所使用的两种加密类型(对称共享密钥和不对称公私钥)都可以在这种模式中利用其特定的优势。

结论

了解连接协商步骤和SSH工作中的加密层可帮助您更好地了解登录到远程服务器时发生的情况。希望你现在对各种组件和算法之间的关系有更好的了解,并且理解所有这些组件如何组合在一起。

本文转载自:https://www.digitalocean.com/community/tutorials/understanding-the-ssh-encryption-and-connection-...

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java技术栈

干货 | 图解 https 单向认证和双向认证!

HyperText Transfer Protocol,超文本传输协议,是互联网上使用最广泛的一种协议,所有WWW文件必须遵循的标准。HTTP协议传输的数据都是...

3012
来自专栏草根博客站长有话说

HTTPS 要比 HTTP 多用多少服务器资源?

HTTP 访问,用户只需要完成 TCP 三次握手,建立 TCP 连接就能够直接发送 HTTP 请求,获取应用层数据。而 HTTPS=HTTP+SSL,也就是说 ...

1174
来自专栏腾讯Bugly的专栏

全站 HTTPS 来了

阅读提示:全文较长,预计阅读时长:20分钟 各位使用百度、谷歌或淘宝的时候,有没有注意浏览器左上角已经全部出现了一把绿色锁,这把锁表明该网站已经使用了 HTTP...

2884
来自专栏网络

通过CURL请求示例详解HTTPS协议

基于HTTPS通信是当前互联网最通用便捷的通信方式,简单理解来看可以视为HTTP协议 + SSL/TLS协议,通过一个curl的示例阐述一下HTTPS协议。 特...

28310
来自专栏惨绿少年

HTTPS 原理与证书实践

1.1 网络安全知识 1.1.1 网结安全出现背景 网络就是实现不同主机之间的通讯,网络出现之初利用TCP/IP协议簇的相关协议概念,已经满足了互连两台主机之间...

6877
来自专栏派森公园

SSH的工作原理

2374
来自专栏腾讯Bugly的专栏

iOS 中 HTTPS 证书验证浅析

导语 在 WWDC 16 中,Apple 表示, 从 2017年1月1日起(最新消息, 实施时间已延期),所有新提交的 App 使用系统组件进行的 HTTP 网...

5608
来自专栏java一日一条

HTTPS 原理剖析与项目场景

最近手头有两个项目,XX导航和XX产业平台,都需要使用HTTPS协议,因此,这次对HTTPS协议做一次整理与分享。

1181
来自专栏java思维导图

【思维导图】深入理解HTTPS原理、过程

我们经常会遇到页面被运营商插入小广告这种事情(数据被篡改),可想而知,HTTP是有多么不安全。 如何做到的? 答:只需要设定相应的DNS,做一个中间人攻击,再...

3705
来自专栏信安之路

SSL_TLS 攻击原理解析

本文主要描述 HTTPS 中对于 ssl/tls 加密的攻击手法,什么是 HTTPS 呢?百度百科的解释如下:

1740

扫码关注云+社区