3.1 数据传输安全性 SSH协议需要解决Telnet协议明文传输的缺陷,它通过以下两方面保证数据传输的机密性: 在通信双方之间建立加密通道,保证传输的数据不被切听; 使用密钥交换算法保证密钥本身的安全。 所谓加密通道,是指发送方在发送数据前,使用加密密钥对数据进行加密,然后将数据发送给对方;接收方接收到数据后,利用解密密钥从密文中获取明文。 加解密算法分为两类: 对称密钥算法:数据加密和解密时使用相同的密钥和相同的算法。 非对称密钥算法:数据加密和解密时使用不同的密钥,一个是公开的公钥,一个是由用户秘密保存的私钥。 由于非对称密钥算法比较耗时,一般多用于数字签名以及身份认证。SSH加密通道上的数据加解密使用对称密钥算法,目前主要支持的算法有DES、3DES、AES等,这些算法都可以有效地防止交互数据被切听,而且由于采用了初始化向量保护,可以防止类似于密码流复用等密码分析工具的攻击。 对称密钥算法要求解密密钥和加密密钥完全一 致,才能顺利从密文中解密得到明文。因此,要建立加密通道,必须先在通信双方部署一致的加解密密钥。部署加解密密钥的方式有多种:手工配置和第三方机构分 配等。手工配置的方式扩展性差,只适合一些小型的本地网络;使用第三方机构分配密钥的方式,需要额外的第三方服务器,而且密钥在网络中传输容易被切听。 SSH协议使用一种安全的方式在通信双方部署密钥:密钥交换算法。利用密钥交换算法可以在通信双方动态地产生密钥,这个密钥只能被通信的双方获得,任何第三者都无法切听,这就在源头上保证了加解密使用密钥的安全性,很好地解决了密钥分发问题。 密钥交换算法的基本原理是: (1) 客户端随机选择一个私钥Xc,1<Xc<p-1,计算出Yc=g^Xc mod p,将计算出的Yc发送给服务器端。其中,p是一个很大的素数,g是p的素根。p和g是双方共有的一对参数,协议允许双方通过协商获得相同的p和g参数。 (2) 服务器也随机生成一个私钥Xs,1<Xs<p-1,计算出Ys=g^Xs mod p,也将计算出的Ys发送给客户端。 (3) 服务器接收到客户端发送过来的Yc,按照下面的公式计算出密钥: K = (Yc)^Xs mod p (4) 客户端收到服务器端发送过来的Ys,同样按照下面的公式计算出密钥: K = (Ys)^Xc mod p 通过上面的方法,客户端和服务器端就可以获得相同的密钥。 由上面的分析可以看出,密钥交换算法的安全性建立在计算离散对数的难度之上。算式Y=g^x mod p中,由X计算Y是很容易的,但是要由Y计算X是非常困难的。在密钥交换算法中对外公开的只有p、g、Yc和Ys,私钥Xc和Xs是保密的,其他用户即便获取了p、g、Yc和Ys也很难推断出私钥Xc和Xs,从而保证了密钥的安全性。 密钥交换算法具有如下优势: 扩展性更好,不需要网络管理员的多余配置; 交换得到的密钥是保存在内存中,不易被读取和篡改; 每个连接都会动态生成一次新的密钥,安全性更高。