SSH 原理和公匙私匙

先主要介绍了Telnet、SSH 的通信原理,分析了其通信时的工作流程。

Telnet

无论Telnet协议连接的是什么类型终端,都会转换为NVT(Net Virtual Terminal)格式进行通信。网络虚拟终端NVT是Telnet异构跨平台的基础。

Telnet 的工作进程是这样的

  1. 本地与远程主机建立连接,该过程实际上是建立一个TCP 连接,用户必须知道远程主机的 IP 地址或域名
  2. 将本地终端上输入的用户名和口令及以后输入的任何命令或字符以NVT格式传送到远程主机。该过程实际上是从本地主机向远程主机发送一个IP 数据报
  3. 将远程主机输出的 NVT格式的数据转化为本地所接受的格式送回本地终端,包括输入命令回显和命令执行结果
  4. 最后,本地终端对远程主机撤消TCP 连接

这里,telnet协议的客户机和服务器端的数据交互都是以明文的方式来进行的。通过抓包工具很容易获取到这些数据,对网络设备进行攻击。

常见的Telnet攻击手段

  1. 密码窃取:通过抓包等方式窃取到用户帐号和密码
  2. 中间人攻击:“中间人”冒充真正的服务器接收到客户端传给服务器的数据,然后再冒充你把数据传给真正的服务器
  3. 伪服务器:攻击者冒充服务器与客户端进行交互,骗取客户端的帐号信息

SSH,Secure Shell

一、什么是SSH?

简单说,SSH是一种网络协议,用于计算机之间的加密登录。

如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。

最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。

需要指出的是,SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。本文针对的实现是OpenSSH,它是自由软件,应用非常广泛。

把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止 DNS 和IP 欺骗,这就是SSH。

二、中间人攻击

SSH之所以能够保证安全,原因在于它采用了公钥加密。

整个过程是这样的:(1)远程主机收到用户的登录请求,把自己的公钥发给用户。(2)用户使用这个公钥,将登录密码加密后,发送回来。(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。

这个过程本身是安全的,但是实施的时候存在一个风险:如果有人截获了登录请求,然后冒充远程主机,将伪造的公钥发给用户,那么用户很难辨别真伪。因为不像https协议,SSH协议的公钥是没有证书中心(CA)公证的,也就是说,都是自己签发的。

可以设想,如果攻击者插在用户与远程主机之间(比如在公共的wifi区域),用伪造的公钥,获取用户的登录密码。再用这个密码登录远程主机,那么SSH的安全机制就荡然无存了。这种风险就是著名的"中间人攻击"(Man-in-the-middle attack)。

它有自己的公匙登录和口令登录来应对。

SSH登录过程:

  1. 版本号协商。服务器打开22端口,等待客户端连接,连接后,服务器与客户端协商协议版本。
  2. 密钥和算法协商阶段。服务端和客户端分别发送算法协商报文给对方,报文中包含支持的各种协议的算法列表。根据协商服务器端和客户端选定使用的算法。服务端和客户端利用DH交换算法、主机密钥对等参数,生成会话密钥和会话ID。
  3. 认证阶段。客户端使用密钥和算法协商阶段生成的会话密钥加密账号、认证方法、口令,将结果发送给服务器。服务端使用获得的会话密钥解密报文,得到账号和口令,进行认证。SSH提供两种认证方式(2.0版本还支持password-publickey和any认证):
    • 密码认证。客户端将用户名和密码加密后发送给服务器,服务器解密后进行比对认证。
    • 数字签名认证。设备上利用RSA或者DSA公共秘钥算法实现数字签名,生成public和key,然后将public上传到服务器。登录认证时,服务器端向客户端发送随机字符串,用户用自己的私钥加密后,再发回来。服务器用储存的公钥进行解密认证。

熟悉Linux的朋友经常使 用到一 个SSH Secure Shell Cilent的工具,本文也是基于此工具加密原理的学习,在SSH的加密原理中,使用到了RSA非对称加密算法,本文也一并做了学习和了解。

非对称加密算法

在日常的工作生产中, 我们经常需要进行数据的通讯,开发人员经常需要对数据进行加解密操作,以保证数据的安全。数据的加密算法非为对称加密和非对称加密两种,常用的DES、三 重DES、AES等都属于对称加密,即通过一个密钥可以进行数据的加解密,密钥一旦泄漏,传输的数据则不安全。

非对称加密算法的核心源于数学问题,它存在公钥和私钥的概念,要完成加解密操作,需要两个密钥同时参与。我们常说的“公钥加密,私钥加密”或“私钥加密, 公钥解密”都属于非对称加密的范畴,后文中讲到的RSA算法也一种典型的非对称加密算法。公钥加密的数据必须使用私钥才可以解密,同样,私钥加密的数据也 只能通过公钥进行解密。

相比对称加密,非对称加密的安全性得到了提升,但是也存在明显的缺点,非对称加解密的效率要远远小于对称加解密。所以非对称加密往往被用在一些安全性要求比较高的应用或领域中。

    典型的RSA非对称加密

RSA加密算法是一种典型的非对称加密算法,它基于大数的因式分解数学难题,它也是应用最广泛的非对称加密算法,于1978年由美国麻省理工学院(MIT)的三位学着:Ron Rivest、Adi Shamir 和 Leonard Adleman 共同提出。

它的原理较为简单,我们假设有消息发送方A和消息接收方B,通过下面的几个步骤,我们就可以完成消息的加密传递:

  1. 消息发送方A在本地构建密钥对,公钥和私钥;
  2. 消息发送方A将产生的公钥发送给消息接收方B;
  3. B向A发送数据时,通过公钥进行加密,A接收到数据后通过私钥进行解密,完成一次通信;
  4. 反之,A向B发送数据时,通过私钥对数据进行加密,B接收到数据后通过公钥进行解密。

由于公钥是消息发送方A暴露给消息接收方B的,所以这种方式也存在一定的安全隐患,如果公钥在数据传输过程中泄漏,则A通过私钥加密的数据就可能被解密。

如果要建立更安全的加密消息传递模型,需要消息发送方和消息接收方各构建一套密钥对,并分别将各自的公钥暴露给对方,在进行消息传递时,A通过B的公钥对数据加密,B接收到消息通过B的私钥进行解密,反之,B通过A的公钥进行加密,A接收到消息后通过A的私钥进行解密。

当然,这种方式可能存在数据传递被模拟的隐患,我们可以通过数字签名等技术进行安全性的进一步提升。由于存在多次的非对称加解密,这种方式带来的效率问题也更加严重。

    SSH加密原理

在SSH安全协议的原理中, 是一种非对称加密与对称加密算法的结合,先看下图:

这里进行一下说明:

  1. 首先服务端会通过非对称加密,产生一个公钥私钥
  2. 在客户端发起请求时,服务端将公钥暴露给客户端,这个公钥可以被任意暴露;
  3. 客户端在获取公钥后,会先产生一个由256位随机数字组成的会话密钥,这里称为口令;
  4. 客户端通过公钥将这个口令加密,发送给服务器端;
  5. 服务器端通过私钥进行解密,获取到通讯口令;
  6. 之后,客户端和服务端的信息传递,都通过这个口令进行对称的加密。

个人感觉,这样的设计在一定程度上提高了加解密的效率,不过,与客户端服务端各构建一套密钥对的加解密方式相比,在安全性上可能有所下降。在上面所述的通过口令进行加密的过程中,数据也是可以被窃听的,不过由于密钥是256个随机数字,有10的256次方中组合方式,所以破解难度也很大。相对还是比较安全的。服务端和客户端都提前知道了密钥,SSH的这种方式,服务端是通过解密获取到了密钥。

DH密钥交换算法

SSH的原理,是基于RSA非对称加密,RSA是基于大数的因式分解数学难题,下面要提到的DH密钥交换算法则是基于有限域上的离散对数难题。

DH算法是一种密钥协商算法,只用于密钥的分配,不用于消息的加解密。它提供了一种安全的交换密钥的方式,通过交换的密钥进行数据的加解密。就像SSH原理中,口令的交换,不过DH算法更安全。

我们举个例子来进行说明,假设有A、B两方,A作为发送者,B作为接收者。通过下面的几个步骤就可以构建出一个只属于双方的密钥口令,如下:

  1. 首先A、B双方,在通信前构建专属于自己的密钥对,假设分别是公钥A,私钥A,公钥B,私钥B;
  2. A将自己的公钥A暴露给B,B通过私钥B公钥A经过一定的运算产生出本地的密钥B;
  3. 同样,B将自己的公钥B暴露给A,A通过私钥A公钥B经过一定的运算产生出本地的密钥A;
  4. 最后,这个算法有意思的一点就是,密钥A密钥B是一致的,这样A、B双方就拥有了一个属于双方的“秘密”口令;

DH算法的产生是,对称加密向非对称加密的过度,为后续非对称加密的产生和发展奠定了基础。

时间: 2024-11-05 20:30:04

SSH 原理和公匙私匙的相关文章

彻底玩转比特币地址和私匙

转自:http://www.8btc.com/privkey 比特币地址和私匙是所有比特币初学者面对的一大难题,再加上那一串超长的字符串,让人更是摸不到头脑.现在编者以问答的形式,带你一步步的揭开比特币地址和私匙的面纱. 还不知道什么是比特币地址和私匙的同学请点这里问题一.比特币钱包由什么组成? 答 我们知道,比特币地址和私匙组成了比特币钱包,而私匙则决定了比特币地址上比特币的归属. 地址和私匙 问题二.如果只记得私匙我们还能还原比特币地址么?答完全可以的,在Bitcoin-qt客户端中,点击d

Open SSH原理

OpenSSH(免费的 SSH 的实现)类似于 telnet 或rsh,ssh 客户程序也可以用于登录到远程机器.所要求的只是该远程机器正在运行 sshd,即 ssh 服务器进程.但是,与 telnet 不同的是,ssh 协议非常安全.加密数据流,确保数据流的完整性,甚至安全可靠的进行认证它都使用了专门的算法. SSH原理 1.服务器建立公钥每一次启动sshd服务时,该服务会主动去找/etc/ssh/ssh_host* 的文件.系统刚刚安装完成时,由于没有这些公钥,sshd会主动去计算出这些需要

SSH原理与运用(二):远程操作与端口转发

本问转载自  http://www.ruanyifeng.com/blog/2011/12/ssh_port_forwarding.html SSH原理与运用(二):远程操作与端口转发 作者: 阮一峰 日期: 2011年12月23日 接着前一次的文章,继续介绍SSH的用法. ======================================= 作者:阮一峰 (Image credit: Tony Narlock) 七.远程操作 SSH不仅可以用于远程主机登录,还可以直接在远程主机上执行

SSH原理与应用(一):远程登录

转载自http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html SSH原理与应用(一):远程登录 作者: 阮一峰 日期: 2011年12月21日 SSH是每一台Linux电脑的标准配置. 随着Linux设备从电脑逐渐扩展到手机.外设和家用电器,SSH的使用范围也越来越广.不仅程序员离不开它,很多普通用户也每天使用. SSH具备多种功能,可以用于很多场合.有些事情,没有它就是办不成.本文是我的学习笔记,总结和解释了SSH的常见用法,希

SSH原理与运用一:远程登录(转)

原文:http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html 作者: 阮一峰 SSH是每一台Linux电脑的标准配置. 随着Linux设备从电脑逐渐扩展到手机.外设和家用电器,SSH的使用范围也越来越广.不仅程序员离不开它,很多普通用户也每天使用. SSH具备多种功能,可以用于很多场合.有些事情,没有它就是办不成.本文是我的学习笔记,总结和解释了SSH的常见用法,希望对大家有用. 虽然本文内容只涉及初级应用,较为简单,但是需要读者

ssh原理

SSH是每一台Linux电脑的标准配置. 随着Linux设备从电脑逐渐扩展到手机.外设和家用电器,SSH的使用范围也越来越广.不仅程序员离不开它,很多普通用户也每天使用. SSH具备多种功能,可以用于很多场合.有些事情,没有它就是办不成.本文是我的学习笔记,总结和解释了SSH的常见用法,希望对大家有用. 虽然本文内容只涉及初级应用,较为简单,但是需要读者具备最基本的"Shell知识"和了解"公钥加密"的概念.如果你对它们不熟悉,我推荐先阅读<UNIX / Li

SSH原理与运用(一):远程登录(转)

SSH是每一台Linux电脑的标准配置. 随着Linux设备从电脑逐渐扩展到手机.外设和家用电器,SSH的使用范围也越来越广.不仅程序员离不开它,很多普通用户也每天使用. SSH具备多种功能,可以用于很多场合.有些事情,没有它就是办不成.本文是我的学习笔记,总结和解释了SSH的常见用法,希望对大家有用. 虽然本文内容只涉及初级应用,较为简单,但是需要读者具备最基本的"Shell知识"和了解"公钥加密"的概念.如果你对它们不熟悉,我推荐先阅读<UNIX / Li

SSH原理和使用

在Linux上工作,ssh是必须要了解的技术方法.它可以建立起多台主机之间的安全的加密传输,以进行远程的访问.操控.传输数据. ssh是什么? SSH為Secure Shell的縮寫.為建立在应用层和传输层基础上的安全协议. 传统的网络服务程序,如FTP.POP和Telnet其本质上都是不安全的:因为它们在网络上用明文传送数据.用户帐号和用户口令,很容易受到中间人(man-in-the-middle)攻击方式的攻击.就是存在另一个人或者一台机器冒充真正的服务器接收用户传给服务器的数据,然后再冒充

SSH原理与运用(一)和(二):远程登录 RSA算法原理(一)和(二)

SSH原理与运用(一)和(二):远程登录  RSA算法原理(一)和(二) http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html http://www.ruanyifeng.com/blog/2011/12/ssh_port_forwarding.html RSA算法原理(一) http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html RSA算法原理(二)