资讯专栏INFORMATION COLUMN

Python实现双因素验证2FA的示例代码

89542767 / 691人阅读


  小编写这篇文章的目的,主要是给大家讲解Python的一些内容,比如Python实现双因素验证2FA的示例代码,那么,具体的代码是什么呢?下面就给大家详细解答下。


  介绍


  传统的用户名密码方式,容易泄漏,并不安全。


  你说,加上短信验证码不就安全了,其实短信验证码也是不安全的,容易被拦截和伪造,SIM卡也可以克隆,已经有案例,先伪造身份证,再申请一模一样的手机号码,把钱转走。


  因此就有了Two-factor authentication,简称2FA,也就是双因素验证。最常见的就是用户名密码,再加一个动态码。动态码通常由随身携带的移动设备上生成,比如U盾、手机。


  动态码最常见的实现算法就是One-Time Password(OTP),是基于时间的一次性密码,它是公认的可靠解决方案,已经写入国际标准RFC6238。比如我们最常用的Google Authenticator,就是OTP。


  那么,知道了2FA,接下来应该考虑的事,就是如何让你用Python写的网站实现2FA。


  轮子其实已经有了,那就是PyOTP,结合自己的理解,分享一下它的用法。


  1.安装


  pip安装,不多说。

  pip install pyotp


  2.配对


  配对就是移动设备和我们的web服务器配对。


  首先,在服务器上使用如下代码生成一次性密钥:


    import pyotp
    pyotp.random_base32()
    'BZ4TOJD4JWWJWPQBKP23FA55EMHA25Y2'

  然后将这个密钥以二维码的形式让手机(移动设备)扫描,扫描之后,手机上的应用就保存了这个密钥。


  3.验证


  接下来,在手机上就可以使用下面这段逻辑产生动态密码了。


  totp=pyotp.TOTP('BZ4TOJD4JWWJWPQBKP23FA55EMHA25Y2')
  totp.now()
  '941782'


  现在,你有30秒的时间将这个6位数密码提交到服务器(输入到网页上),服务器服务器也使用同样的密钥和当前时间戳,生成一个动态码,跟用户提交的动态码比对。只要两者不一致,就验证失败,也就是下面这段逻辑,如果超过30秒,(当然,30秒可以自定义),也会失效:


  =pyotp.TOTP('BZ4TOJD4JWWJWPQBKP23FA55EMHA25Y2')
  totp.verify('941782')
  True
  time.sleep(30)
  totp.verify('941782')
  False
  totp=pyotp.TOTP('BZ4TOJD4JWWJWPQBKP23FA55EMHA25Y2')
  totp.verify('941782')
  True
  time.sleep(30)
  totp.verify('941782')
  False


  除了使用基于时间的动态密码,也可以用基于计数的动态密码,逻辑如下:


  hotp=pyotp.HOTP('base32secret3232')
  hotp.at(0)#=>'260182'
  hotp.at(1)#=>'055283'
  hotp.at(1401)#=>'316439'
  #OTP verified with a counter
  hotp.verify('316439',1401)#=>True
  hotp.verify('316439',1402)#=>False


  4.那是不是手机上还有开发个app


  不用,我们直接使用现成的Google Authenticator就可以了。


  如果你已安装了Google Authenticator,请点击:heavy_plus_sign:添加密钥,然后扫描下发的二维码,就可以生成动态码:


  然后你可以执行下面这段代码,就可以发现pyotp产生的动态码和Google Authenticator产生的是一致的:


  import pyotp
  totp=pyotp.TOTP("JBSWY3DPEHPK3PXP")
  print("Current OTP:",totp.now())


  其实二维码的信息就是JBSWY3DPEHPK3PXP。


  这样,我们用Google Authenticator来产生动态密码,网站上进行二次验证,就可以实现2FA了。


  知识点补充


  双因素认证的含义及工作原理


  双因素认证是-种账号验证过程,顾名思义,除用户名和密码之外还需要第二因素核验用户的登录凭证。第二因素很难被网络不法分子复制,例如个人安全问题戏发送到个人安全设备上的动态密码。


  双因索认证的步骤根据所选验证因素略有不同,比如设置成个人安全问题可能要回答母亲的婚前姓氏,或儿时居住的街道名称等,设置成动态密码就需要在登录界面输入发送到用户移动设备上的临时登录密码。但无论设置哪种第二因素,都要求用户在输入用户名和密码后提供额外的安全提示。


  对于最高级别的访问管理,大多数双因素认证工具会要求用户每次登录都出示安全提示。


  双因素认证在身份和访问管理中的作用


  身份和访问管理(IAM)是企业用来控制对IT资源和设备的访问权限及访问许可级别的总体策略。多因素认证(MFA)也属于IAM,但双因索认证本身并不是完整的IAM安全解决方案。比起IAM策略,双因索认证更像为补充完整解决方案的最终安全层。


  双因素认证的使用场景


  简单来说,双因索认证用于保护业务系统账号,否则业务系统很容易遭遇账号接管攻击。最终导致大规模的数据泄露。


  到此为止,这篇文章就为大家介绍到这里了,希望可以给大家带来一定的帮助。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/128060.html

相关文章

  • 云应用服务到底有多安全?

    摘要:民主化和的广泛应用意味着每个人都需要了解云计算应用程序的安全性。以下将提出一些关于应用程序安全性的基本问题。实际上,在年弃用了,其中采用传输层安全替代了。更智能的应用程序或管理覆盖可以帮助标记和安全锁定。IT民主化和SaaS的广泛应用意味着每个人都需要了解SaaS云计算应用程序的安全性。人们可以想象一下没有软件即服务(SaaS)的场景,这真的很难做到,因为很多企业、组织和个人几乎每天都依赖这...

    Enlightenment 评论0 收藏0
  • PHP如何使用比特币Coinbase钱包库开发应用

    摘要:比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储去中心化共识机制密钥与脚本交易与等,同时也详细讲解如何在代码中集成比特币支持功能,例如创建地址管理钱包构造裸交易等,是工程师不可多得的比特币开发学习课程。 这是Coinbase Wallet API v2的官方客户端库。我们提供直观,稳定的界面,将Coinbase Wallet集成到的PHP项目中。 重要提示:...

    Kosmos 评论0 收藏0
  • PHP如何使用比特币Coinbase钱包库开发应用

    摘要:比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储去中心化共识机制密钥与脚本交易与等,同时也详细讲解如何在代码中集成比特币支持功能,例如创建地址管理钱包构造裸交易等,是工程师不可多得的比特币开发学习课程。 这是Coinbase Wallet API v2的官方客户端库。我们提供直观,稳定的界面,将Coinbase Wallet集成到的PHP项目中。 重要提示:...

    eccozhou 评论0 收藏0
  • 总下载量超4万次!PyPI发现11个恶意Python包窃取敏感信息

    摘要:表示,这是首次在上传至的恶意软件中发现这种技术。软件开发和版本控制平台还透露,它解决了注册表中的多个缺陷,这些缺陷可能会泄露私有包的名称,并允许攻击者绕过身份验证,在不需要任何授权的情况下发布任何包的版本。 .markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:15px;overflo...

    不知名网友 评论0 收藏0
  • namecheap:网络安全销售,SSL 证书、高级dns等,最高优惠65%

    摘要:官网促销套餐证书可节省高达和高级节省高达域名托管和电子邮件可节省高达免费安全功能不要忘记激活一流的安全功能,这些功能作为您的帐户的标准配置。确保您的帐户与双因素身份验证绝对免费,并确保您的个人信息保持前目录与免费域名隐私终身 官网:https://www.namecheap.com/ 促销套餐: SSL 证书可节省高达 56% CDN 和高级DNS节省高达 65%...

    mating 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<