针对题目对有限位数的密码解密仅是时间问题,iPhone表示压力不大。
一部锁屏密码未知的iPhone的手机,如何盲猜出其6位数的密码?
由于密码只有6位数,理论上最多需要106= 1000000次即可猜出正确的密码。概率意义上需要0.5 * 106= 500000次可以大概率盲猜出正确密码。按照题主的预设,盲猜出密码应该仅仅是时间问题。
可是,iPhone显然不给大家钻空子的时间!
6次盲猜密码错误,iPhone立马会警觉起来,不光记忆你错误了6次,而且还提示你,由于错误次数太多,请1分钟后再重试。
如果1分钟后又输错了,记录一共错了7次,同时提醒你5分钟后再试。
下次如果再错,会一直记录错误的次数,同时拉大重试的时间。
尽管时间越拉越长,如果一直可以这样重试,破解密码也仅仅是时间问题,不是嘛?
可是iPhone一旦发现错误到达10次,直接就永久锁屏了,不给你重试的机会了。
把iPhone手机重启,是否可以让iPhone忘记掉失败的次数?
重启无法抹掉iPhone的记忆,因为失败次数记录在非易失内存(NVRAM)里,即使掉电,也不会消失。
所以,只要iPhone手机的锁屏密码,不是特别简单,比如000000、111111,稍微复杂一点,只要10次盲猜猜不出就是安全的。
还有一个场景就是银行卡的密码,在ATM机上取款也是6位数。只要连续输错3次密码,就会吞卡,压根不给多次重试的机会。
换一个ATM机重试?
用户输错密码次数的记录,并不保存在ATM机上,而是中心服务器上,所以换ATM机器并没有用,只要累计输错3次密码就吞卡。除非用户能够将中心服务器上密码错误记录抹掉。
无论密码多么复杂、无论密码位数多长,盲猜正确的概率尽管小,但是并不为0。
所以,安全是相对的,绝对安全是永远不存在的!但是安全专家能做到的,就是让不安全的概率无限接近于0。
当前主流的加密密钥128 bit位长,盲猜出的概率= 1/2128 ,这个概率有多小呢?
大概就相当于全国福利彩票的一等奖获得者,连续玩5次33选7,每次都能押对数字的概率。
读者可能会说,尽管这个概率低,但是可以离线无限次重试,总能暴力破解正确的密钥的,对吗?
可是那仅仅停留在理论上,事实上你每次盲猜的密钥,并没有人告诉你是否猜对了。
如果用户每次盲猜的密钥(token),返回给服务器,服务器会告知正确或者错误,在这种场景下,服务器也会做重试次数的限制,不会允许你无限次的重试下去。
总结
- 凡是服务器提示密码正确与否的场合,会限制重试的次数。
- 凡是可以无限次重试的场合,会使用长密钥,无限拉长破解的时间成本。
- 密钥 + 随机盐确保一次一密,周期性refresh key。
作者|车小胖谈网络|公众号