小辣椒今天登陆 Twitter 的时候,跳出来这么一条信息。
难道说,我的密码未经加密处理就被 Twitter 赤果果的记录下来了?那 Twitter 不是知道我的账户密码了么?
随后,Twitter 密码存储出现 bug 的新闻果然迅速传开。
“ 重大安全漏洞 ”、“ 3.3亿用户 ”,事情被各大新闻媒体形容的还真挺严重的。。。很容易就让人忽视了 Twitter 官方消息的后半部分 —— bug 已经被修复,且目前没有查出泄露、盗用的迹象。
不过这次到底是个什么 bug ?真的会让用户的密码被轻易查看到么?
这要从事件的起因说起 —— 密码储存。
现在的科技互联网公司,用户量动不动就过亿,储存每一个用户的密码,并且不把他们相互混淆可不是件容易事,而 哈希算法( Hashing,又称散列算法 )能近乎完美的解决这些风险。
听上去高大上,其实一点不复杂!
哈希算法里有几个关键的组成部分:Key( 密匙 )、Value( 存储信息 )、Table( 检索表 )、Index( 编号 )。
我们把整个验证登录的过程想象成去银行取钱的步骤就很好理解了。
登录密码( 即 Value )就是用户的存款,这些钱随时可能被用户要求核实,并且不能被搞混。
而我们的登录密码( 即 Value )被算法加密后,会被存储到一个类似于保险柜的地方,这个保险柜就被称为哈希检索表 ( Hash Table ),每个保险柜都会用数字进行编码 ( 即 Index )。
唯一不同的地方在于,因为被加密过,所以 “ 银行 ” 并不知道用户 “ 存款 ” ( 即 Value )的具体情况。
这就是为什么在我们注册账户时,需要用独一无二的用户名、或者注册邮箱、电话号码。
这些独一无二的注册信息就是我们的 Key,只有有了这个 Key 我们才有权利进到自己的保险柜。
密码验证流程
但因为经过了加密, 所以存储的密码具体是什么并不会被系统记录,验证时更多的是验证吻合度。
在哈希算法里,密码经过加密后,会变成一个 Hash
但 Hash 是无法逆向变回密码的,所以系统并不知道用户的密码具体是什么
用户在登录时,系统只需要验证被输入的 Hash 是否和保险柜中的 Hash 吻合就可以了
这也是为什么,我们在忘记密码后,系统并不能提供原密码给我们,因为系统也不知道密码到底是什么。
系统能做的只有提供一些列验证方法,先通过 Key 验证出你就是账户的拥有者,然后让你重置密码。把保险柜里的东西全部都换咯。
以 QQ 邮箱的找回方式为例
因为运用了加密算法,每个用户的保险柜内部情况系统都无法获取。也就是说,每个用户的登录密码都是受到保护的,连系统都不知道。
但这次 Twitter 的事件中,很有可能是保险柜里出了问题,所有保险柜里的密码情况都被直接、未加密的写进了系统编程日志中,只要日志被黑,密码就处于没有保护的状态,随时被黑客获取。
说白了,还真是你的密码真的会被直接看到。
这问题就很特么严重了。不过好在,官方说并没有发生安全问题。就好比一个人裸体梦游,突然惊醒发现自己没有穿衣服,不幸中的万幸是,没有任何人看到他裸过。
不过话说回来,遇到这种比较容易引起用户恐慌,并且已经得到解决的 bug,有些公司会当什么都没发生悄咪咪的混过去。
Twitter 这次不但没隐瞒,还出来自曝,不管是不是被最近 Facebook 的事情搞怕了,在小辣椒看来还真是挺聪明的。