SSH为一项创建在应用层和传输层基础上的安全协议。最早的时候,互联网通信都是明文通信,一但被截获,内容就暴露无遗,之后在1995年,芬兰学者Tatu Ylonen设计了SSH协议,将信息加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广。当然需要指出的是,SSH只是一种协议,存在着很多实现,著名的有OpenSSH以及PuTTY。
在客户端来看,SSH提供了两种级别的安全验证:
第一种级别(基于密码的安全验证),即账号+密码,但是可能有别的服务器在冒充真正的服务器,无法避免被“中间人”攻击(man-in-the-middle);
第二种级别(基于密钥的安全验证),这里的密钥即包括公钥、私钥。这些都属于密码学的概念,容易混淆。接下来阐述下加密、认证、公钥、私钥的概念和关系。
首先明确加密、认证两个概念:
加密是将数据资料加密,使得非法用户即使截获到加密过的资料,也无法获取正确的内容,所以数据加密可以保护数据,它的重点在于数据的安全性。身份认证是用来判断某个身份的真实性,其重点在于用户的真实性。两者的侧重点是不同的。
其次了解公钥和私钥的概念:
现代密码体制中加密盒解密采用不同的密钥(公钥和私钥),也就是非对称密钥密码系统,是从前对称加密方式的提高与增强。每个通信方均需两个密钥:公钥和私钥。公钥用来加密/验章用的,私钥用来解密/签章。
1,公钥和私钥成对出现
2,公开的密钥叫公钥,只有自己知道的叫私钥
3,用公钥加密的数据只有对应的私钥可以解密
4,用私钥加密的数据只有对应的公钥可以解密
5,如果可以用公钥解密,则必然是对应的私钥加的密
6,如果可以用私钥解密,则必然是对应的公钥加的密
接下来用电子邮件的方式说明一下原理。收发邮件需实现如下目的:
1. A发送给B的内容必须加密,在邮件的传输过程中不能被别人看到。(加密)
2. 必须保证是A发送的邮件,不是别人冒充我的。(认证)
要达到发送一个加密邮件的目标,必须发送邮件的双方都有公钥和私钥,且A必须拥有B的公钥,B也必须拥有A的公钥。
当A->B资料时,A会使用B的公钥加密,这样才能确保只有B能解密查看真实内容,即加密机制。
验证方面则是使用签/验章的机制,A传资料给B(当然不只是B,所有有A公钥的人都可以)时,会以A的私钥做签章,因为私钥只有A手里有,如此所有收到讯息的人都可以用A的公钥进行验章,便可确认讯息是由 A 发出来的了,即认证机制。
接下来把wikipedia上关于SSH第二种级别的解释补上:
第二种级别(基于密钥的安全验证),需要依靠密钥,也就是你必须为自己创建一对密钥,并有公有密钥放在需要访问的服务器上。客户端软件会向服务器发出请求,请求用你的密钥进行安全验证。服务器收到请求之后,先在你在该服务器的用户根目录下寻找你的公钥,然后将它和你发送过来的公钥进行比较。如果两个密钥一致,服务器就用公钥加密“质询”(challenge),并把它发送给客户端软件,从而避免被“中间人”攻击。
在服务器端,SSH也提供安全验证。在第一种方案中,主机将自己的公钥分发给相关的客户端,客户端在访问主机时则使用该主机的公钥加密数据,主机则使用自己的私钥来解密数据,从而保证数据的保密性。
第二种方案中,存在一个密钥认证中心(CA),所有提供服务的主机(客户端也可以)都将自己的公钥以及身份信息交给认证中心,当然该认证中心是权威机构,担保证书信息的有效性。认证中心在核实身份后,发给服务器一个数字证书,该证书是认证中心用自己的私钥对服务器的一些相关信息和公钥一起进行加密的,自此,服务端就可以使用自己的数字证书进行相关活动。服务端用客户端的公钥将内容加密后,用自身的私钥签章,连同数字证书,一同发给客户端。客户端收到服务端发来的信息时,用CA的公钥解开数字证书,就可以拿到服务端的真实公钥以及加密信息了。当然数字证书只在特定时间段内有效。
好了,把SSH以及公钥、私钥的概念基本理顺了,具体的原理只能说还有待进一步的学习了。