首先有两类密码体制:
对称密钥密码体制
即加密密钥和解密密钥是相同的密码体制。
典型的DES属于分组加密。即将原文按64位长的二进制数据分组,对每一个分组分别加密。所有加密得到的密文再全部串联起来,得到整个密文。
使用的密钥也是64位。
DES的可靠性来自于密钥长度,而算法是公开的。因此密钥的保密是关键。64位密钥的可能组合是有限的,使用大型计算机在短时间内就可以用穷举法攻破。
因此后来又出现IDES,其不同仅仅是使用了128位长的密钥。理论上已经没有被攻破的可能。
公钥密码体制
IDES虽然在理论上无法用穷举法攻破,但是加密解密双方使用相同的密钥,一是事先双方都约定好,二是加密方通过网络告诉解密方。
第一种方式太麻烦,有时不可行。第二种方式不安全,因为密钥也许会在网络传播过程中被截获。这是对称密钥体制的致命缺陷。
因此出现了另一种体制,公钥密码体制。
RSA是公钥密码体制的一种。它也就是SSH所使用的加密解密方式。该体制的工作原理如下:
该方式需要一对密钥:public key和private key。public key是公开的,private key的保密的。
设定发送者A和接收者B。接收方B需要自己生成这对密钥,private key自己藏起来不让别人知道,public key告诉发送方。
1,A使用public key加密明文后,将密文传送给B。
3,B使用private key解密,得到明文。
结果是,只有B才能解密接收到的密文。
虽然很容易产生成对的public 和 private key,但是却不能用public key推算出private key,二者在数学上有某种关联,但是无法推导出来。
具体产生密钥对的算法可以参考:http://zh.wikipedia.org/wiki/RSA%E5%8A%A0%E5%AF%86%E6%BC%94%E7%AE%97%E6%B3%95
虽然public key可用来加密,但是却不能用来解密。
RSA的一个应用:
数字签名,就是我们在网上下载了比如一个程序,为了防止该程序是伪造的,就使用数字签名来认证真伪。
数字签名很有意思,正好和上面的过程反过来,发送方使用private key加密明文,接收者使用public key解密。
因为数字签名证明的是,该资源是真的而不是冒牌的。使用private key加密明文,因此只有发送方才能加密明文,而别人不能冒充。使用public key解密导致所有人都能解密明文,从而每个下载该程序的人都可以验证它的真伪。
如果有人想伪造一个签名,由于他没有private key,即使加密,B得到密文后,使用public key只能得到一个不可读的明文,从而知道是假冒的。
但是RSA的问题是,如果一个坏蛋自己产生了一对密钥,用其中的公钥,骗A说这就是B的公钥。A很开心的用公钥得到密文,传送给了B,同时也被坏蛋截获了密文。坏蛋就可以使用自己的私钥解密,然后偷看。然后坏蛋用B真正的公钥 (因为是public key所以大家都知道) 得到密文,再传送给B。
理论上A和B都不会知道有人在偷看。
因此密钥的管理和传送及其重要,并从而产生了密码学的另一个分支密钥管理。太复杂就不多说了,我也不懂。
而SSH是建立在RSA之上的。
SSH为Secure Shell的缩写。SSH为创建在应用层和传输层基础上的安全协议。除了SSH外还有其他在不用layer上的安全协议。
SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。通过SSH可以对所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。
SSH之另一项优点为其传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、POP、甚至为PPP提供一个安全的“通道”。注意并不包括http。http有专门的https作为安全协议 (超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Protocol Secure)是超文本传输协议和SSL/TLS的组合,用以提供加密通讯及对网络服务器身份的鉴定。)。
这点很重要:Users of telnet, rlogin, and ftp may not realize that their password is transmitted across the Internet unencrypted, but it is
因此SSH常常用于加密telnet和ftp:
例如用SSH替代telnet:
像我们在工作中经常会在unxi上使用的ssh命令,就是对ssh的应用:
bash-3.00$ ssh -l root 172.168.1.1
以上命令的意思是用root用户通过ssh连接IP为172.168.1.1的主机。登录后进入目标主机的某目录下,可进行任意操作。
但这种应用需要目标主机有ssh的服务,在linux,unix机器上已经默认安装了。如果是windows机器,则需要在windows主机上安装openSSH才能使用。
使用SSH加密FTP
用SSH封装过的FTP称为SFTP,现在已经有广泛的使用。我们还能见到一种加密的FTP称为FTPS,实际是用SSL封装过的FTP,实际的应用相对少一些。
如果要是用SFTP传输数据,也意味着网络必须打开SSH端口。
还有一种常见的加密ftp称为FTPS,其实是SSL封装过的FTP。Secure Sockets Layer (SSL)
但是目前使用的并不多。
在unix上通常默认安装了:
scp: secure copy。也就是ssh over rcp
sftp: secure file transfer program。 也就是ssh over ftp
sshd: is the daemon that listens for connections from clients. 也就是ssh的server side