今天说说SSH的原理,但是请原谅我的不好好说话。
一个警察(服务器)有好几个线人(客户端),他和他的线人们约好用特殊的电话(账号)来报告情况(登陆),其中贩毒的线人用110这个号码,贩卖军火的线人用119这个号码,杀手组织的线人用120这个号码。警察为了防止匪徒来刺探情报(权限管理),又按照电话号码分别定了不同的暗号(密码),并告诉了他的线人们。
但是好景不长,警察发现匪徒学会了窃听电话(拦截网络信息),同时有些线人反映暗号不太好记,而且他们有的时候不方便直接打电话,但是拜托别人打电话又有暴露暗号的可能(密码泄露)。于是警察就想编一个密码本(加密手段),大家都按照这个密码本来交流。考虑到匪徒很厉害,他们窃听时间长了之后就能推断出密码本的内容(暴力破解),于是警察考虑编一个每次打电话都不一样的密码本(动态密码)。
首先警察做了一个工具(openssh),用这个工具可以做两个小程序。一个叫加密器(公钥),一个解密器(私钥),用加密器加密后的信息,只能够被解密器解密,并且每个人都能拿这个工具做小程序。于是警察首先给自己来了一套小程序(我们称它们As和Bs)。接着呢,又把这个工具送给了每个线人一套。线人拿到工具后也给自己做了一套这个小程序(我们称它们Ac和Bc),然后把加密器程序(Ac)复制了一份发邮件给了警察。这样警察就有了自己的一套加密解密器,和每个线人的加密器。当然了,警察有个文件夹专门放这些东西,而且每个文件夹上面都加了备注,标明都是谁的加密器。
然后每次线人打电话的时候,都会先向警察要一个最新的As,这是因为警察心情一不好就会重新做个加密解密器。当然警察在给As的时候都会顺便把这次的通话ID(session id)告诉线人,不过告诉的时候会先用线人的加密器加个密,线人拿到之后用自己的解密器一解就知道了,然后线人再自己想了一个临时暗号(session key),把临时暗号和通话ID一混合,用As加密后给警察发了过去,警察拿到后用自己的解密器一解,然后在把临时暗号和通话ID已拆分。Duang,警察和线人有了一个大家都知道的东西,临时暗号!而且整个过程警察和线人都没有说出这个临时暗号,或者透露出这个可能破解这个临时暗号的信息。
到了这里其实已经很保密了,如果你认为这样就够了你就太年轻了。因为你现在是上帝视角啊,身为警察他哪知道自己解析出来的临时暗号就是线人定下的暗号啊,所以要核对(验证)啊。
于是更进一步的保(keng)密(die)行为又来了啊。首先警察想了一个更加碉堡的数字(随机数X),然后用Ac加密之后给线人发了过去。线人用自己的Bc解密之后就得到了辣个碉堡的数字。然后线人把这个碉堡的数字和之前碉堡的临时暗号加在一起用一种更加碉堡的加密方式(md5)进行加密,要问这个加密方式有多碉堡,他加密了就解不了了。。。。但是不要怕,警察也不需要解密,他只需要自己也用这种方式加个密,然后和线人发来的结果一比较(此时应有包青天背景音乐),就知道大家商量的暗号是不是一样了。
至此,警察和线人在谁都没好好说话的情况,定下了一个暗号,接着他们就可以尽情的用这个暗号更加不好好说话了。