网站google搜索优化,网站建设高端定制,网页设计实训报告设计图,河南平台网站建设制作Github于2023-03-09推出一项提高软件安全标准的措施#xff0c;所有在Github上贡献过代码的开发人员在年底前必须完成 2FA#xff08;Two-factory authentication#xff0c;双因子认证#xff09;。初听此事之时#xff0c;不以为意#xff0c;因为自己之前就知道双因子…Github于2023-03-09推出一项提高软件安全标准的措施所有在Github上贡献过代码的开发人员在年底前必须完成 2FATwo-factory authentication双因子认证。初听此事之时不以为意因为自己之前就知道双因子认证就是说登录账号时不仅需要密码还需要额外的认证方式我们熟知的短信验证码就是其中的一种方式。
2FA
但当我准备启用Github账号的2FA时我却发现Github虽然提供了SMS/Text message的选项但并不支持国内手机号码也就是说大陆无法收到验证码。Github支持的二次验证方式如下
Authenticator appSMS/Text messageSecurity keysGithub Mobile
移动端的Github应用也可以用来做二次验证但是为了安全我的手机通常没有搭载科学上网的软件此项也被PASS。这时只能使用Authenticator app的方式采用了 OTPOne Time Password一次性密码 算法。 介绍完2FA场景我们就知道OTP原理就是用户在首次登录或者注册时云端不仅保存用户的密码还会生成一个密钥服务器通常使用二维码的方式呈现给用户这个密钥需要用户使用客户端保存也就是需要支持OPT的程序去扫描二维码。这样云侧端侧拥有了同样的密钥就可以基于相同的算法生成相同的一次性密码。通常这个算法就是TOTPTime-based One-time Password基于时间戳的一次性密码。
TOTP
TOTP定义在 RFC 6238附录给出了JAVA实现TOTP的代码读者可以自取。其实现算法如下 TOTPHMAC-SHA-1(K, (T - T0)/X) TOTP基于具有时间戳计数器的OTP一次性密码其中K为共享密钥T为当前时间戳T0为开始的时间戳X为时间步长。
密钥生成在为帐户设置TOTP时将生成一个唯一的密钥。该密钥在用户设备和认证服务器之间共享。时间同步用户设备和认证服务器需要同步到相同的时间源。TOTP算法依赖于当前时间来生成一次性密码。OTP生成TOTP算法将密钥和当前时间结合起来应用Hash函数生成一次性密码。此密码通常包含6-8位数字并具有有限的有效期例如30或60秒。OTP验证当用户尝试登录时输入常规密码以及由TOTP应用程序或设备生成的一次性密码。然后认证服务器根据共享密钥和当前时间独立生成预期的OTP。如果用户输入的OTP与服务器生成的OTP匹配则授权访问。
2FA/OTP客户端
Github推荐的都是付费客户端例如authy如果你是土豪请随意。很显然本人不是所以花费了一些时间收集一些比较好用的工具包括浏览器插件、APP以及桌面客户端很多密码管理器都有计算OTP验证码的功能在使用的同时我们也要考虑安全性。
神锁离线版十年前的国内一家创业公司转型期间的作品我看了一些他们开发的技术博客还是很懂安全和客户隐私的并且隐私声明中声称未收集任何个人数据。微信小程序Authly安全性未知好处是可以绑定微信账号管理多个密码。身份验证器-Chrome插件离线运行想在多个设备上登录Github可能就犯难了。Microsoft Authenticator微软官方出品的身份验证器可账号同步如果你相信大厂的实力和安全性不二之选缺点是过于臃肿278.89MB。Google Authenticator谷歌官方出品的身份验证器可账号同步相比于微软没有科学上网的话不建议使用Google的产品。
总结
客户端在离线情况下仍然可以生成与服务器一致的一次性密码这是由于他们最初都约定好了一个共享密钥由此密钥时间戳经过相同的算法计算而来。一次性密码是双因子验证的有力补充当然一次性密码也可以用在其他领域不仅仅是2FA。例如针对智能门锁我们可以利用TOTP生成临时密码给清洁工自行开门工商银行网银的动态令牌生成器在离线场景下仍然可以生成动态密码。