昨天看了一点关于身份验证的东西,记录下来,以便查阅与学习
一般我们使用本地的电脑的时候,输入用户名与密码,系统直接在自己的一个特有的数据库里面验证一下这个用户的用户与密码是否正确,在网络上面的话,有诸多的不安因素,就比如说我登陆一远程的服务器,我在本地机上面打开“远程连接桌面”,远程系统要我提交用户名和密码来进行验证,如果验证的这个程序设计成:本地输入用户名与密码,然后系统将这个用户名与密码传到远程系统,远程系统到自己的用户目录里面去验证这个用户的用户名与密码是否正确;这个过程是不安全的,就算用户名和密码是加了密的也不安全,用一个sniffer就可以将这些数据全部搞下来,然后就可以入侵远程的系统,当然了,如果系统真的做成了这个样子,也不会今天的信息时代了
上面说的那个过程,加密的用户名和密码都被窃听走了,用那个登陆远程的系统,远程的系统认为它是一个“合法的用户”,下面再说一个流程,相对于上面那个就安全了很多了,流程是酱紫滴:本地系统要登陆远程系统,发出一个申请,如,用户名为9527的用户请求登陆系统,系统收到这个请求,产生一个字符串(primaryString),然后远程系统用9527的密码和这个primaryString混合生成一个新的字符串(encryptString),至于生成encryptString的规则,双方都是知道的,这样,远程系统将这个encryptString传给本地系统,本地系统使用用户输入的密码来解开encryptString,还原出一个string,如果密码正确,还原出来的string就是远程系统生成的primaryString,当然了,本地系统是不知道的,它只知道使用用户输入的密码还原出一个string然后再将这个string传给远程系统,远程系统用这个string和它生成的string对比一下,一样的,就表示,“嗯,你真的知道密码,最起码我是这样认为的”,然后,通道为您打开
这个过程中,没有出现过用户的密码,还有一个重要的东西,就是生成密码的规则和解密的规则,这样就算在网络上窃听到什么东西,也没有关系,因为每次的primaryString是不一样的