两步验证
现在越来越多的网站开始使用两步验证(Two Factor Authentication)帮助用户加强安全保护,Google Authenticator 是其中比较常见的一种。
一般使用 Google Authenticator 作为两步验证的时候,网站会提供一串密钥(Secret Key)以便后期恢复。很多用户会根据网站提示开启 2FA,但是却并不会备份密钥。直到有一天手机丢失或是重新刷机后,才发现被永远地拒在门外。
而 GitHub 账号在设置 2FA 的时候并不会提供密钥,但是会教你去下载一个 recovery_codes.txt,里面存着一批 code。这些 code 的作用跟 2FA code 是一样的,只是它永远不会过期。
意外事故
因为手机空间不够,我给手机做了一次扩容。虽然有提前给 APP 备份,恢复后却发现 Google Authenticator 里面什么都没有。加上一段时间没有重新登入 Github,就忘了通过 recovery code 重置 2FA。
不幸的是, 刚好在那段时间里,我的 Macbook Pro 经历了一次硬盘故障,显示器直接蓝屏,因为没来得及备份 recovery_codes.txt,最后就导致我有两年多的时间无法登入我的个人 GitHub 账号。
在那之后,每次提交账号密码后,只能傻傻地中 2FA 页面徘徊…(欲哭无泪)
失而复得
最近,我尝试给 Github Support 写了一封信,倾诉了我遇到的问题。没想到,很快就收到回复了。
客服丢给了我一行代码,建议我通过 SSH Key 来确认账号所有权。幸运的是我的 SSH Key 之前有用 TimeMachine 做备份。
按照指示,我把代码执行结果发了过去,一个小时后,账号的 2FA 被人工解除了!历时两年多时间的账号终于解封了,好激动 !
数字签名
开心之余,思考了一下为什么 SSH Key 可以确认账号所有权。其实也很简单,就是公钥加密,也叫非对称加密。
SSH Key 产生的时候有两把钥匙,一把私钥,一把公钥。私钥在我电脑上,公钥曾经在 Github 网站上设置过。当我通过 SSH向 Github 服务器发送请求后,GitHub 服务器会丢给我一串信息,我拿到信息后,通过私钥进行加密,得到一串密文(上面提到我发给 GitHub 客服的东西就是这串密文)。客服拿到密文后,会用我放到 Github 网站上的公钥解密,如果解密成功并正确,就可以确认我的身份了。这跟数字签名其实是一个道理。
总结
1. 备份这个事情要尽早做,不要嫌麻烦。
2. 碰到问题,不要轻言放弃。多尝试一些思路,或许就可以解决了。
(完)
领取专属 10元无门槛券
私享最新 技术干货