分享好友 最新资讯首页 最新资讯分类 切换频道
两步验证: 使用Python接入Google Authentiator
2024-12-29 02:01

用户常常会在不同的网站使用相同的密码,一但一个网站账户的密码泄露,就会危及到其它使用相同密码的账户。为了解决这个问题,一些网站在登录时除了要求输入账户密码之外,还需要输入另一个一次性密码。例如银行常用的动态口令卡。

两步验证: 使用Python接入Google Authentiator

目前,大部分应用采用 Google Authenticator(谷歌身份认证)来生成认证令牌,只需要手机上安装一个APP,就可以生成一个不断变化的一次性密码,用于账户验证,而这个 APP 无需联网即可工作。

Google的两步验证算法源自 算法,简称 HOTP。工作原理如下:

  1. 客户端和服务器事先协商好一个密钥 K,用于标识用户;计数器 C,用于生成动态密码

  2. 进行验证时,客户端对密钥和计数器的组合 使用 HMAC 算法计算一次性密码,公式如下:

      

由于 HMAC 算法得出的值位数比较多,不方便用户输入,因此需要截短(truncate)成为一组不太长的十进制数(例如 6 位)。计算完成之后客户端计数器 C 计数值加 1,服务器端进行同样的计算,并与用户提交的数值进行比较,若一致则通过,服务器端将计数值增加 1。若不相同,则验证失败。

这里有一个问题,如果验证失败或者客户端不小心多进行了一次生成密码操作,那么服务器和客户端之间的计数器 C 将不再同步,因此需要有一个重新同步(Resynchronization)的机制。详情可参考 RFC 4226

介绍完 HOTP, 就容易理解了。TOTP 将 HOTP 中的计数器 C 用当前时间 T 来替代,于是就得到了随着时间变化的一次性密码。

虽然原理很简单,但是用时间来替代计数器会有一些特殊的问题,例如:

  1. 时间 T 的值怎么选取?

    时间每时每刻都在变化,如果选择一个变化太快的 T ,那么用户来不及输入密码;如果选择一个变化太慢的 T ,那么第三方就有充足的时间来爆破一次性密码(6 位数字的密码仅有 10^6 种组合);综合以上考虑,Google 采用了 30 秒作为时间片,T 的数组为从 Unix epoch(1990年 1 月 1 日 00:00:00)来经历的 30 秒的个数

  2. 网络延时,用户输入延迟

    由于网络延时,用户输入延迟等因素,可能当服务器端接受到一次性密码时,T 的数值已经改变,这样就会导致验证失败。一个办法是,服务器计算当前时间片以及前面的 n 个时间片内的一次性密码值,只要其中有一个与用户输入的密码相同,则验证通过。当然,n 不能太大,否则会降低安全性。

    此外,如果我们知道客户端和服务器的时钟有所偏差,当服务器通过计算前 n 个时间片的密码并成功验证后,服务器就知道了客户端的时钟偏差。因此,下一次验证时,服务器就可以直接将偏差考虑在内进行计算。

    
    
    
    
  • 在线校验: https://rootprojects.org/authenticator/
  • APP 校验:
    • Android: https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=en_US&gl=US
    • Ios: https://apps.apple.com/cn/app/google-authenticator/id388497605

项目源码: https://github.com/zzzzls/python_authentiator

  1. 使用 pip 安装

       
  2. 使用

      
  1. HOTP: An HMAC-Based One-Time Password Algorithm,

    RFC 4226: https://datatracker.ietf.org/doc/html/rfc4226

  2. TOTP: Time-based One-time Password Algorithm,

    RFC Draft: https://tools.ietf.org/id/draft-mraihi-totp-timebased-06.html

  3. Google Authenticator project: https://github.com/google/google-authenticator

  4. Google账户两步验证的工作原理:

    IMCT: https://blog.seetee.me/post/2011/google-two-step-verification/

  5. Google Authenticator TOTP原理详解

最新文章
[其他原创]【免下载全平台支持】无损一键双层PDF制作工具
在线使用:https://kazutoiris.github.io/generate-searchable-pdf/GitHub 源代码仓库:kazutoiris/generate-searchable-pdf,欢
乌兰察布到白山白县物流公司--货运专线每天发车「-「市县派送」」2025排名一览
乌兰察布到白山白县物流公司--货运专线每天发车「-「市县派送」」2025排名一览乌兰察布到白山白县物流公司--货运专线每天发车「-
全面预算管理不会做?四大方法破解全面预算管理难题!
点击上方卡片,关注大数据分析与应用!
新版全开源短剧软件快速搭建,带支付收益模式,支持IAA广告付费模式
随着互联网的迅速发展,短视频已成为现代人生活中不可或缺的一部分。越来越多的创作者和企业希望通过短剧平台展示才华、分享故事
OPPO A59s 刷入奇兔recovery及root权限刷机教程
一键root教程2.0(现已全新支持magisk25以上)近期更新,强烈推荐oppoa37m系列 需要先刷入解bl锁底包 再刷入第三方奇兔recovery然
[招生] [教授本人] Arizona State University招2025年半导体器件/电路方向全奖研究生
导师简介:Dr. Kexin Li 于2023年8月加入Arizona State University (ECEE)担任助理教授。 她曾在Columbia University 从事基于氮
wordpress缓存插件使用提高网站速度
WordPress是世界上使用量最多的CMS,由于程序非常吃主机性能,正常情况下当页面被访问时,使用php和mysql。 因此,系统需要消耗R
QuestMobile 2024中国互联网核心趋势报告:稳中有升 DoNews12月17日消息,QuestMobile数据显示,截止到9月份, 移动互联网 总体规模已经接近12.5亿,月...
来源:雪球App,作者: DoNews,(https://xueqiu.com/5133207869/317132700)DoNews12月17日消息,QuestMobile数据显示,截止到
PC微信逆向:两种姿势教你解密数据库文件
                                                                       
安信可分享 | 分享一个基于airkiss协议的配网小程序,实现小程序一键配网安信可ESP32C3\ESP8266\ESP32\ESP32S2系列的模组。(附带源码)
开源项目地址开源时间微信小程序连接mqtt服务器,控制esp8266智能硬件https://github.com/xuhongv/WeChatMiniEsp82662018.