-
我们来思考一下用户名+密码的本质,通过用户名和密码我们可以去获取服务器上的资源,也就是用户名密码是获取资源的钥匙。
-
如果我们需要去获取这份资源,只要拿到钥匙就行了,按理说钥匙一把就够了,也就是只要一个密码,或者说只要一个用户名就能取到资源。
-
如果用户名不被泄漏,我们其实不需要密码。毕竟用户名和密码一样都可能被别人获取.假设我们只有用户名就能登录,并且获取资源。
-
如果用户名被人获取了,我们只能改变用户名,然后我们和服务器约定,我用一个新的用户来访问我的资源,这样和服务器沟通成本太大,服务器和我们关系没那么近,不会轻易的相信我们,所以用户名可以一半是固定的,一半是变化的,固定的部分用来标识用户和资源的对应关系,或者说识别用户的,变的部分就是应对密码可能被泄露,用来修改的。变得部分我们把它叫做密码。
-
考虑一下,不用密码,只要用户名的情况下,如果这个用户名足够复杂,不容易被猜到,我们认为他是安全的,比如比特币的私钥,有了私钥就拥有了对应账户里面的余额,并且这个私钥可以通过算法产生,只要你随机产生的私钥能和有余额的私钥一样,那么这个账户里面的钱就都是你的了。
-
如果你的账号足够复杂,我们认为只要账号不要密码也是安全的,两个系统之间通信如果都是公司内部系统,一个我们通过一个密钥来加密解密数据,保证交互的安全是可行的,如果泄露,两边同时更换就行了。
-
如果公司两个系统之间的通信,比如你和游戏公司,如果只有一个账号,那么要改动的时候,需要你和游戏公司同时改,明显游戏公司不认识你,所以这时候把账号的一半固定,让游戏公司认识你,另外一半变化可以定期修改,这就是密码,这样一个过程就是账号密码存在的意义,
-
账号密码存在的意义就是如果标志资源的Id有被泄露的风险,然后需要更换资源和Id绑定关系的一种解决方案。如果更换这种绑定关系是容易的,那么用户名就够了,或者说一个Id就够了,如果两边不能完全信任,才有了一般固定一般变化的Id。如果ID足够复杂,并且不容易被替换,也不容易被泄露,密码就没有存在的必要。