SSH协议的原理、组成、认证方法和过程

SSH是安全外壳协议的缩写,安全外壳协议(SSH)是一种在不安全的网络上提供安全远程登录和其他安全网络服务的协议。

OpenSSH是SSH(安全外壳)协议的免费开源实现。SSH协议系列可用于计算机之间的远程控制或文件传输。传统的实现该功能的方式,如telnet(终端模拟协议)、rcp ftp、rlogin、rsh等都是极不安全的,密码会以明文传输。OpenSSH提供了服务器端后台程序和客户端工具,对远程控制和文件传输过程中的数据进行加密,从而取代了原来的类似服务。

以前我们使用rsh和telnet,因为登录时包括ID和密码在内的数据都是不加密传输到网络上的,存在安全问题。即使是内网,也存在网络窃取、篡改等危险。SSH加密所有数据,包括密码,以实现更安全的远程操作。在SSH中,由于协议标准不同,有SSH1和SSH2两个不同的版本。开发SSH2是为了避免SSH1使用的加密算法的许可问题(现在这个许可问题已经不存在了)。作为安装SSH协议的应用程序,TLES 8采用了开源的OpenSSH。OpenSSH可以对应SSH1和SSH2的任何协议,但是默认使用SSH2。

SSH主要由三部分组成:

同时,SSH协议框架还为许多高级网络安全应用协议提供了扩展支持。它们之间的层级关系可以用下图来表示:

对于像SSH这样旨在提供安全通信的协议,完整的密钥机制是必不可少的。由于SSH协议面向Internet网络中主机之间的访问和信息交换,因此主机密钥成为基本的密钥机制。换句话说,SSH协议要求使用该协议的每台主机必须至少拥有一个自己的主机密钥对,服务提供商只有在对客户端的主机密钥进行身份验证后才能允许其连接请求。一个主机可以使用多个密钥,对于不同的密钥算法可以有不同的密钥,但至少需要一个,即DSS算法生成的密钥。关于DSS算法,请参考FIPS-186文件。SSH协议中主机密钥认证有两种管理方案,如下图所示:

每个主机必须有自己的主机密钥,并且可以有多对密钥。每对主机密钥对包括公钥和私钥。如何在实际应用中使用这些密钥并依靠它们实现安全特性?如上图所示,SSH协议框架中提出了两种方案。

在第一种方案中,主机将其公钥分发给相关的客户端,客户端在访问主机时使用主机的公钥加密数据,主机使用其私钥解密数据,从而实现对主机密钥的认证,确定客户端的可靠身份。从图2(a)可以看出,用户从主机A发起一个操作,访问主机B和主机C,此时A成为客户端,它必须事先配置好主机B和主机C的公钥,访问时根据主机名查找对应的公钥。对于被访问的主机(即服务器端),只需要保证自身私钥的安全存储即可。

第二种方案中,有一个密钥认证中心,系统中所有提供服务的主机都向认证中心提交自己的公钥,而任何主机作为客户端只需要保留一份认证中心的公钥。在这种模式下,在访问服务器主机之前,客户端还必须向密钥认证中心请求认证,然后才能正确连接到目的主机。

显然,第一种方法容易实现,但在客户端维护密钥是一件麻烦事,因为每一次更改都必须反映到客户端;第二种方法完美地解决了管理和维护问题。但这种模式对认证中心的要求很高。要在互联网上实现这样的集中认证,光是确定权限就麻烦大了。谁能决定一切?但从长远来看,在企业应用和商业应用领域采用集中认证的方案是必要的。

此外,SSH协议框架还允许主机密钥泄露,即未经身份验证的首次访问。免认证首次访问(Authentication-free first access)是指当客户端第一次访问主机时,主机不检查主机密钥,而是向客户端颁发一份公钥,这样在以后的访问中必须使用该密钥,否则将被视为非法,其访问将被拒绝。

在整个通信过程中,为了实现SSH的安全连接,服务器和客户端要经历以下五个阶段:

*版本号协商阶段,SSH目前包括SSH1和SSH2,双方通过版本协商确定要使用的版本。

*在密钥和算法协商阶段,SSH支持多种加密算法,双方根据本地端和对等端支持的算法协商最终的算法。

*认证阶段:SSH客户端向服务器发起认证请求,服务器对客户端进行认证。

*会话请求阶段,认证通过后,客户端向服务器发送会话请求。

*交互会话阶段,会话请求通过后,服务器和客户端交换信息。

q 1:SSH的版本和区别。

SSH2避免了RSA的专利问题,修复了CRC的缺陷。SSH2用数字签名算法(DSA)和Diffie-Hellman(DH)代替RSA完成对称密钥的交换,HMAC代替CRC。同时,SSH2增加了AES和Twofish等对称加密算法。

A1: SSH(安全外壳)到目前为止有两个不兼容的版本——SSH 1和SSH2。SSH1分为1.3和1.5两个版本。SSH1使用DES、3DES、Blowfish、RC4等对称加密算法保护数据安全传输,而对称加密算法的密钥通过非对称加密算法(RSA)进行交换。SSH1使用循环冗余校验码(CRC)来保证数据的完整性,但后来发现这种方法有缺陷。

有关更多信息,请参考SSHv1协议和SSHv2协议

Q2:HMAC是什么?

a2:HMAC(Hash Message authentic ation Code,哈希消息认证码),基于密钥的哈希算法的认证协议。消息认证码的原理是利用公共函数和密钥生成一个固定长度的值作为认证标识符,用这个标识符来认证消息的完整性。用一个密钥生成一个固定大小的小数据块,也就是MAC,添加到消息中,然后传输。接收者使用与发送者共享的密钥进行认证等等。

Q3:x 11转发是什么?

A3: sh的X11转发功能使X客户端和X服务器能够安全通信。使用X11转发后,X客户端到X服务器的数据先发送到ssh服务器,ssh服务器利用与ssh客户端的安全通道转发到ssh客户端,再由ssh客户端转发到X服务器。从X服务器到X客户端的数据流是相同的。这里,ssh服务器和ssh客户机充当X客户机和X服务器之间的数据中继器。由于ssh服务器和X客户端,ssh客户端和X服务器一般在同一台机器上,是一种安全的进程间通信,ssh服务器和ssh客户端之间的通信也是安全的,所以X客户端和X服务器之间的通信是安全的。

问题4:什么是TTY?

A4:终端是一种基于字符的设备,有多种类型。tty通常用来简称各种类型的终端设备。Tty是电传打字的缩写。电传打字机是最早的终端设备,很像电传打字机,是电传公司生产的。设备名放在特殊的文件目录/dev/中。

Q5:简单描述一下SSH操作的流程?