专栏名称: BNB48Club
世界充满Bug,【往南么】为你指出方向。
目录
相关文章推荐
洞见  ·  读书越多的人,内耗就越少 ·  昨天  
青年文摘  ·  面试时被问能否接受加班,怎么回答? ·  昨天  
青年文摘  ·  认真吃饭的人,其实最不简单 ·  2 天前  
青年文摘  ·  谢谢你,我的浪漫战衣! ·  2 天前  
51好读  ›  专栏  ›  BNB48Club

怎么妥善保存Google Auth验证码

BNB48Club  · 公众号  ·  · 2018-03-05 01:14

正文

  1. 什么是2FA

  2. Google Auth的原理

  3. 安全原则

  4. 易用原则


什么是2FA

2FA, 2 Factor Authentication,字面直译是有两个要素的验证。一般是在用户名密码之外进行的第二次验证,所以中文环境有时直接用“二次认证”的称呼。

使用2FA的原因很简单:用户名密码这种基础验证方法安全程度不高。弱密码的问题还在其次,更主要的安全隐患是密码的使用过程需要传递密码本身,一旦由于被窃听等原因导致泄露,这层防线就立刻失效。

知道该用户密码的操作者 = 该用户本人? 这个等式并不十分可靠。

如何提高操作者 = 用户本人的概率呢?最简单的方法就是进行多次验证,如果一层验证被破解的概率是 n%,那么两次独立验证被破解的概率就是n%的平方,更小。次数越多越安全。

多出来的这一(几)次验证,有很多种方法可选。有直接用另一个密码的,“支付密码”;有用手机号码接受短信验证码的,有接受电话语音验证码的;有用硬件U盾或口令卡的;有用软件口令卡的;有需要提供第三方证明的(政府证件);极端情况下还有大杀器:指纹、虹膜、DNA鉴定。

无论是哪一种,鉴权都离不开你与服务方实现交流过的:

  1. 你知道什么

  2. 你拥有什么

  3. 你是什么

    密码就是一种典型的“ 你知道什么 ”鉴权,安全级别不够高。

    政府证明、指纹、DNA这类是典型的“ 你是什么 ”鉴权,缺点是鉴权成本高。

    左右权衡后,现实中被大量采用的二次验证密码都是" 你有什么 "鉴权。


Google Auth的原理

Google Auth的本名其实应该叫Time-based One-Time Password,基于时间的一次性密码( 下面我们会用OTP代替) 。对此,IETF有一个详细的标准文档:

http://www.ietf.org/rfc/rfc4226.txt

市面上能够见到的所有类似的软件实现的2FA验证码几乎都遵守这个标准,只不过Google Authenticator是较早实现并推广了,因此也在一定程度上成为了代名词。

原理其实也并不复杂,就是用一个约定好的秘钥与当前时间一起算一个散列,映射到一个比较简单的密码,一般是6位数字。这里的当前时间,一般精确到半分钟,也就是说按照这个算法,用同样的一个秘钥,每半分钟按照标准产生的简单密码就会发生变化。

由秘钥根据时间通过散列计算简单密码是一个比较简单的过程,而从简单密码倒推秘钥就比较困难,秘钥的原始长度越大就越困难。秘钥只在建立OTP的首次发布, 由于 在真正鉴权的过程中不传送秘钥只传送简单密码,所以即使偶发几次简单密码泄露也几乎不会造成秘钥的泄露。这样,安全级别就大大得到了提升。

因此 OTP 的使用逻辑就是: 给需要鉴权的用户一个秘钥,并在服务端保留。需要鉴权的时候,客户与服务器各自生成简单密码,理论上来说只要双方时间误差小于30秒,得到的简单密码应该是一致的,这样就可以认为当前操作者就是最初得到秘钥的那个用户。


安全原则

反过来说,只要掌握了秘钥,由于算法是公开的,任何人都能够轻易使用工具得到你需要提供的简单密码,任意时间的简单密码。

因此, 保护秘钥是非常重要的!

OTP私钥是服务方颁发的,在服务方处一定是有备份的。换句话说,要进行这样一个“你拥有什么”的鉴权,其实你甚至是不需要知道你所拥有的内容的,不记得也不会丢( 事实上,所有使用OTP的地方无一例外都可以使用 有效的 老的OTP来停用、更换OTP,就是这个道理)。

Google是个实心眼,他是这么想的,也是这么做的。我们知道, OTP秘钥通常是用二维码来分发的,扫描以后才得到真正的秘钥。如果你使用Google Authenticator这个程序,程序是开源的,使用过程中Google Authenticator并不会告诉你某个正在工作的OTP对应秘钥是多少,也无法导出导入,甚至你把整个手机加密备份再还原也会清零Google Authenticator里面的OTP记录。

安全,安全倒是他妈的挺安全。


易用原则

就是容易丢。

Google的这个用户交互逻辑是基于我们前面的假设,也就是用户无需得知OTP的秘钥内容。 理论上确实如此,但除非老的OTP仍然有效,否则更换OTP的难度——虽然不是不可以—— 往往比重新开设账户还要麻烦。

让Google Authenticator失效又有很多种办法:手机丢了,不小心删了,还原备份了……

我们需要备份。备份那个秘钥。

这个秘钥的重要性不亚于区块链钱包的私钥。







请到「今天看啥」查看全文