现在各个网站,工具都采用密码方式登录,我觉得很不方便,同时安全性也不能得到保障, 这里我提出一种更安全更易用的权限验证方式,彻底解决这些问题。
首先我们看密码验证的缺点,从易用性和安全性来考虑。
密码的长度取决于人类记忆力。如果是随机密码,人类很难记住,最长大概8位,而现在云计算情况下,10位以下暴力破解并不是很困难的事情。 如果是非随机密码(比如一句话),单词的概率空间也和随机密码差不多甚至更少。 为了获得更可靠的安全性,密码必须设置得更长一些,对人的负担更重。 随着现在计算力的增长,为了安全,密码必须越设越长,而人的记忆能力是很难增长的。
从使用方式上,密码会传播到远端平台,在本地/网络/远端任何一个节点被监听到,用户的密码和信息就会被泄漏掉。
对于不同的网站或者应用,应该采用不同的密码,不然一个网站的信息泄漏了,就会影响到其他网站的安全性。 但是对于普通人而言,记忆超过3个复杂密码是很困难的。这也是为什么普通人往往通用一个常用密码, 然后现在各大网站很多的用户密码信息是泄漏的,对于普通人而言,常用密码已经被泄漏出去了。
现在有第三方的密码记录工具,比如lastpass,但是它增加了单点失效的风险:如果lastpass被攻克了,用户的所有密码都会被泄漏。
综上所述,密码验证方式缺陷很多,并不能很好地保障易用性和安全性。
从原理上面思考,借鉴现成的一些安全领域经验,我觉得更好的验证方式如下:
采用RSA方式生成公钥和私钥,私钥保存在一个绝对安全的单独硬件设备上,只提供解密服务。比如做成一个芯片,挂在脖子上或者植入皮下组织。 本地电脑能够访问该设备。
网站登录和验证过程采用和SSH协议一样的方式,基本上就是用户提供公钥给网站,网站通过公钥加密共享密钥过来,建立安全通讯频道。
这种方式的好处:
- 易用性:用户只要输入网站,在本地电脑上面刷一下芯片就可以登录了,无须繁琐的密码输入。
- 秘密信息(私钥)保证安全,第三方除了偷窃芯片设备,没有任何办法获得私钥。
- 本地/网络/远端通讯模型中,网络没有办法窃听通讯。就算在本地或者远端设置了木马窃听信息,也不会丢失私钥。
- 一个网站被攻破,只代表这个网站的用户数据泄漏了,不影响该用户其他网站的安全性。
一些我还没有想明白的问题:
- 如何保证密钥设备被电脑读取的时候不开放给不相关的网站?这样当本地电脑中了木马的时候,也不会泄漏远端网站的信息?
- 密钥设备丢失了怎么办?可以在家里备份保存一个。如果真的全部丢失了,只有一个个通知网站更换该用户的公钥,更换协议需要思考如何保证安全同时又能够做到替换。
难点:
- 因为涉及到硬件,比较难部署开,需要用户购买一个安全芯片,以及读取和烧录设备。
- 需要改变用户习惯,随身携带一个安全芯片。
- 需要各大网站支持这种登录方式。
我觉得可能布开的方式是这样:首先要有一个大公司推动(比如苹果或者谷歌),在一个销量很大的设备上(比如手机), 这个芯片也还是要做到设备独立,不能做到手机里面。后面要有一个所有大公司参与的标准化组织制定规则。 感觉难度挺大的。不过这是更安全的做法,以后应该路径到达这种方式。