文章将分为几个部分,将尽量以简单易懂的方式表达,如有疏漏,请不吝指正,谢谢
- 前言
- 简介
- 安全性
- 结论
- 感言
- 补充
之所以会发这篇文章,是看到板上有许多玩家对 OTP 抱有疑惑,想透过此文章,简单的介绍一下什幺是 OTP,以及一些相关的资讯,本人所学尚为疏浅,如果错误之处,请不吝指正。
OTP 全名为 One-time password,也就是一次性密码,通常用于帐号安全相关的部分,如许多银行在登入时,即需额外输入此密码方可登入,游戏中也不例外,那幺,他的运作原理是什幺呢?
首先将简单说明此密码的产生方式,可能是依据时间,可能是某些参数,也可能是一个函式,但最终目的,即是希望所产生的密码,是可以有随机性的,因为如果是能被预测的,那幺就没有意义了呀。
接着,假设密码产生已经是具有随机性的,那如果可以被重複使用,不就等于没用吗,所以,每次产生的密码,都只能被使用一次,也就是说,如果这次期间内产生的密码是 123456,只要在这期间内被用过后(登入),那幺此组密码就会失效,即须等到下个密码的产生,不然他就不叫一次性密码了。
最后,每组密码都是有週期的,过了这段时间就会失效,如果有注意到的话,Garena APP 锁左上方会有个圈圈在跑,週期是 180 秒(注1),也就是说,每组密码的有效时限为 180 秒,过了即失效,必须使用下一组密码方可通过验证。
以上即为 OTP 的简介,虽然不是很详细,但应该可以有个初步的了解。
注1:週期并非所有 OTP 都为 180 秒,如 Google 的 Authenticator 应用程式的週期是 30 秒。
接着,就是大家最注重的安全性了,我们可以看到,每组密码是由 6 个数字所组成,也就是说,可能的组合有1百万组,那幺,假设盗帐者现在要来破解此密码,他是否有可能成功呢?
首先,时限有 180 秒,也就是说,每秒钟需要尝试 5555 次,以现在电脑的效能要处理这些资料是没问题的,所以,需要考虑的是网路速度(无奈),假设每笔资料的大小约 128 bytes(
接着,需特别注意的是 延迟 的问题,因为不可能一传出去伺服器就立刻接收到,也不可能伺服器一传回来,就马上收到,以现在 Garena 高品质的网路服务,假设延迟时间是 50 ms(毫秒),也就是 0.05 秒,那幺所代表的意思是就是,每传一次资料,我们需花费 0.05 秒在等待,那幺,1百万笔资料需的等待时间为多久呢,50000 秒(约 13 个小时),也就是说,如果要在 180 秒内尝试完这 1百万 组的可能,是不可能的,此外,如果伺服器在短时间内收到大量的尝试却没有做出对应的处理,我想这也让人很傻眼,因此,以目前来看,OTP 是可靠的。
综合第二和第三节的说明,我们可以知道,以目前的技术来说,要破解 OTP 几乎是不可能的,但不代表完全不可能,如产生密码的方是被知道了、或是未来科技的进步都有可能让 OTP 面临挑战,世上没有绝对安全的东西,但我们可以藉由许多方法降低风险,多一层保护就是多一层保障,共勉之。
这篇文章挣扎了很久才打算写的,因为很懒呀,也不知道会不会有帮助,不过看到板上有许多玩家被盗,也让我开始怀疑官方的资安问题,但在没有证据的状况下,也不能乱说话。
最后,还没申请 OTP 的玩家要赶快去申请呦,多一层保护,多一层保障。
有鉴于板上有玩家反应即使使用 OTP 后仍被盗帐号,因此即去测试了第二项所提到的一次性,而进行测试对象有:Garena、Google、Dropbox、Github 这四项较着名的服务,方法和结果如下,
测试方法:
首先,当一组新的密码产生后,立即登入,此时会需要输入密码验正,而当成功后,理应此组密码即立刻失效,因此,立刻重新登入并输入刚刚的密码,来确认是否已失效。
测试结果:
密码被使用后未失效:Garena、Github
密码被使用后有失效:Google、Dropbox
这就代表,当你电脑是不安全时,如果盗帐者盯上你的帐号,那幺此服务有等于无,关于有这样的结果,有点出乎意料。
Q1:电脑被留后门,是否就没用了? - tcss0612 (秘罗地圣战军-光山)
A1:
我们可以用这张图来简单的说明,首先可以看到三个圈圈,分别代表了 使用者、伺服器、以及骇客,那幺,假设今天电脑被留了后门,把我们输入的验证码传给盗帐者,是否有可能成功呢?
由图中可知,每一段的传输都会有延迟时间,因此,如果验证码从使用者端传到盗帐者端,再传到伺服器,途中将会有两段的延迟,因此,使用者端到伺服器端的延迟时间,要大于另一方的时间的机率微乎其微,因此,除非是三生的福气,不然要透过此方法窃取验证码,理应是不可能的。
Q2:手机被植入后门,是否就没用了? - tcss0612 (秘罗地圣战军-光山)
A2:
手机被植入后门,可以分为两种状况,使用简讯传递验证码和使用APP产生验证码,但这两种状况是不需分开釐清的。
首先,要如何将使用者的帐号和手机配对起来,这就已经是一个难题了,除非伺服器被入侵,否则理应是无法配对了。接着,如果伺服器真的被入侵,那幺问题点已经不是在 OTP 有没有效的层级了,因此是不用考虑这状况的。
Q3:钓鱼网站是否可以骗取验证码? - tcss0612 (秘罗地圣战军-光山)
A3:
首先,要如何让使用者进入钓鱼网站,这就已经是一个难题,在正常的访问下,理应是不可能会进入钓鱼网站的,如果是网站被入侵,那幺这也不是该关注在 OTP 的层级了,因此,此问题如同 Q2 一样,是不用考虑这问题的。
Q4:是否可以透过记录历史样本,推算出密码产生的演算法? - rex898975 (绍)
A4:
根据上面简介的说明,理论上来说,产生的验证码会是随机或伪随机的,因此,要从已知的结果逆推回去,理论上是不可能的,但如果产生器是有问题的,那幺则反之。
Q5:两步骤验证是什幺?
A5:
以最简单的方式来说明,两步骤验正即是在输入帐号密码外,多了一层验证的手续,可能是 OTP,可能是电话锁,最终目的是让帐号更安全,更不容易被入侵。