热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

了解SSH加密和连接过程

2019独角兽企业重金招聘Python工程师标准介绍SSH或安全shell是安全协议,也是安全管理远程服务器的最常用方式。通过使用多种加密技术,S

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

介绍

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的工作原理有了基本的了解。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://my.oschina.net/wuweixiang/blog/1833260



推荐阅读
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
  • 2018年9月21日,Destoon官方发布了安全更新,修复了一个由用户“索马里的海贼”报告的前端GETShell漏洞。该漏洞存在于20180827版本的某CMS中,攻击者可以通过构造特定的HTTP请求,利用该漏洞在服务器上执行任意代码,从而获得对系统的控制权。此次更新建议所有用户尽快升级至最新版本,以确保系统的安全性。 ... [详细]
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • 本文详细介绍了在 Ubuntu 系统上搭建 Hadoop 集群时遇到的 SSH 密钥认证问题及其解决方案。通过本文,读者可以了解如何在多台虚拟机之间实现无密码 SSH 登录,从而顺利启动 Hadoop 集群。 ... [详细]
  • 微信小程序详解:概念、功能与优势
    微信公众平台近期向200位开发者发送了小程序的内测邀请。许多人对微信小程序的概念还不是很清楚。本文将详细介绍微信小程序的定义、功能及其独特优势。 ... [详细]
  • 河北省工业和信息化厅公文收发管理系统
    河北省工业和信息化厅及其下属各地市工信管理部门之间的文件传输主要依赖于纸质或电子邮件方式,这种方式存在效率低下、安全性差等问题。为了解决这些问题,省工信厅计划开发一套公文收发管理系统,实现文件的电子化和统一管理。 ... [详细]
  • 本文详细介绍了如何在 Django 项目中使用 Admin 管理后台,包括创建超级用户、启动项目、管理数据模型和修改用户密码等步骤。 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 本文深入解析了Linux系统中常用的文件和目录操作命令,包括但不限于`ls`、`cd`等。通过详细讲解每个命令的功能、语法及应用场景,帮助读者掌握这些基本工具的使用方法,提升在Linux环境下的操作效率。此外,文章还介绍了如何结合选项和参数来实现更复杂的文件管理任务,为初学者提供了丰富的实践示例和技巧。 ... [详细]
  • 体积小巧的vsftpd与pureftpd Docker镜像在Unraid系统中的详细配置指南:支持TLS加密及IPv6协议
    本文详细介绍了如何在Unraid系统中配置体积小巧的vsftpd和Pure-FTPd Docker镜像,以支持TLS加密和IPv6协议。通过这些配置,用户可以实现安全、高效的文件传输服务,适用于各种网络环境。配置过程包括镜像的选择、环境变量的设置以及必要的安全措施,确保了系统的稳定性和数据的安全性。 ... [详细]
  • 深入解析 OpenSSL 生成 SM2 证书:非对称加密技术与数字证书、数字签名的关联分析
    本文深入探讨了 OpenSSL 在生成 SM2 证书过程中的技术细节,重点分析了非对称加密技术在数字证书和数字签名中的应用。非对称加密通过使用公钥和私钥对数据进行加解密,确保了信息传输的安全性。公钥可以公开分发,用于加密数据或验证签名,而私钥则需严格保密,用于解密数据或生成签名。文章详细介绍了 OpenSSL 如何利用这些原理生成 SM2 证书,并讨论了其在实际应用中的安全性和有效性。 ... [详细]
  • CTF竞赛中文件上传技巧与安全绕过方法深入解析
    CTF竞赛中文件上传技巧与安全绕过方法深入解析 ... [详细]
  • 本文深入探讨了 Git 与 SVN 的高效使用技巧,旨在帮助开发者轻松应对版本控制中的各种挑战。通过详细解析两种工具的核心功能与最佳实践,读者将能够更好地掌握版本管理的精髓,提高开发效率。 ... [详细]
  • 2016-2017学年《网络安全实战》第三次作业
    2016-2017学年《网络安全实战》第三次作业总结了教材中关于网络信息收集技术的内容。本章主要探讨了网络踩点、网络扫描和网络查点三个关键步骤。其中,网络踩点旨在通过公开渠道收集目标信息,为后续的安全测试奠定基础,而不涉及实际的入侵行为。 ... [详细]
author-avatar
夕阳红梅乎
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有