热门标签 | 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



推荐阅读
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • Tomcat安装与配置教程及常见问题解决方法
    本文介绍了Tomcat的安装与配置教程,包括jdk版本的选择、域名解析、war文件的部署和访问、常见问题的解决方法等。其中涉及到的问题包括403问题、数据库连接问题、1130错误、2003错误、Java Runtime版本不兼容问题以及502错误等。最后还提到了项目的前后端连接代码的配置。通过本文的指导,读者可以顺利完成Tomcat的安装与配置,并解决常见的问题。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • 腾讯安全平台部招聘安全工程师和数据分析工程师
    腾讯安全平台部正在招聘安全工程师和数据分析工程师。安全工程师负责安全问题和安全事件的跟踪和分析,提供安全测试技术支持;数据分析工程师负责安全产品相关系统数据统计和分析挖掘,通过用户行为数据建模为业务决策提供参考。招聘要求包括熟悉渗透测试和常见安全工具原理,精通Web漏洞,熟练使用多门编程语言等。有相关工作经验和在安全站点发表作品的候选人优先考虑。 ... [详细]
  • Windows7企业版怎样存储安全新功能详解
    本文介绍了电脑公司发布的GHOST WIN7 SP1 X64 通用特别版 V2019.12,软件大小为5.71 GB,支持简体中文,属于国产软件,免费使用。文章还提到了用户评分和软件分类为Win7系统,运行环境为Windows。同时,文章还介绍了平台检测结果,无插件,通过了360、腾讯、金山和瑞星的检测。此外,文章还提到了本地下载文件大小为5.71 GB,需要先下载高速下载器才能进行高速下载。最后,文章详细解释了Windows7企业版的存储安全新功能。 ... [详细]
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社区 版权所有