基于TOTP算法的Github两步验证2FA(双因子)机制Python3.10实现

这篇具有很好参考价值的文章主要介绍了基于TOTP算法的Github两步验证2FA(双因子)机制Python3.10实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

从今年(2023)三月份开始,Github开始强制用户开启两步验证2FA(双因子)登录验证,毫无疑问,是出于安全层面的考虑,毕竟Github账号一旦被盗,所有代码仓库都会毁于一旦,关于双因子登录的必要性请参见:别让你的服务器(vps)沦为肉鸡(ssh暴力破解),密钥验证、双向因子登录值得拥有。

双因子登录说白了就是通过第三方设备证明"你是你自己"的一个措施,Github官方推荐在移动端下载1Password、Authy、Microsoft Authenticator等APP来通过扫码进行验证,其实大可不必如此麻烦,本次我们通过Python/Golang代码来实现双因子登录验证。

TOTP算法

Time-based One-Time Password(TOTP)是一种基于时间的一次性密码算法,用于增强身份验证的安全性。

TOTP基于HMAC(Hash-based Message Authentication Code)算法和时间戳生成一次性密码。用户和服务器之间共享一个密钥,通常在初始化身份验证时交换。基于该密钥,服务器生成一个用于验证的初始值。

在每个时间步长(通常是30秒),基于当前时间戳和共享密钥,使用HMAC算法生成一个哈希值。然后,从哈希值中提取一个固定长度的动态密码。这个动态密码在设定的时间步长内有效,之后会自动失效。

用户在进行身份验证时,需要输入当前时间步长内生成的动态密码。服务器会使用相同的算法和共享密钥,验证用户提供的密码是否匹配。由于动态密码在时间步长过期后就会失效,即使被截获,也无法在下一个时间步长内重复使用。

TOTP广泛应用于双因素身份验证(2FA)和多因素身份验证(MFA)的实现中。通过结合用户的密码和每次生成的动态密码,TOTP提供了一层额外的安全保护,有效降低了密码被盗用或猜测的风险。

常见的TOTP应用包括Google Authenticator和Authy等身份验证应用程序,它们生成基于TOTP算法的动态密码,并与用户的在线账户相绑定,提供更安全的登录方式。

说白了,就是一个带生命周期的密钥,30秒之后这个密钥就会过期,客户端和服务端共享一个密钥,通过HMAC算法来验证密钥的合法性。

TOTP算法实现(Python3.10)

首先在服务端应该先生成一个密钥,该密钥在客户端和认证服务器之间共享。密钥可以是字符串,但Github官方把该密钥弄成了二维码,以方便用户在移动端扫码验证,打开Github账户,选择设置-》两步验证:

点击绿色按钮,选择开启两步验证。

此时系统会自动生成一个二维码,这就是我们共享的密钥:

该密钥的字符串形式可以通过点击setup key超链接来获取。

拿到系统密钥之后,我们安装基于Python的TOTP库:

pip3 install pyotp

随后编写代码生成当前时序的验证码:

import pyotp  
import time  
  
# 设置服务端密钥  
secret_key = "Github服务端生成的密钥(即二维码)"  
  
# 使用密钥和时间间隔(默认为 30 秒)创建一个 TOTP 对象  
totp = pyotp.TOTP(secret_key)  
  
# 生成当前的 OTP  
current_otp = totp.now()  
print(f"当前OTP: {current_otp}")

运行结果:

python -u "d:\jiyun\积云\boo3_public\test_totp.py"  
当前OTP: 809888

可以看到根据密钥我们生成了30秒以内有效期的验证码,随后将该验证码填入页面中的Verify the code from the app文本框即可。简单方便,并不需要移动端的参与。

Golang1.21实现TOTP算法

如果客户端的语言是Golang,也可以轻松实现TOTP算法,首先确保本机安装Golang1.18以上的版本,这里我们使用的是最新的Golang1.21:

PS C:\Users\zcxey> go version  
go version go1.21.1 windows/amd64

随后通过go get安装对应的totp包:

go get github.com/pquerna/otp  
go get github.com/pquerna/otp/totp

接着编写入口代码main.go文件:

package main  
  
import (  
	"encoding/base32"  
	"fmt"  
	"time"  
  
	"github.com/pquerna/otp"  
	"github.com/pquerna/otp/totp"  
)  
  
// Demo function, not used in main  
// Generates Passcode using a UTF-8 (not base32) secret and custom parameters  
func GeneratePassCode(utf8string string) string {  
	secret := base32.StdEncoding.EncodeToString([]byte(utf8string))  
	passcode, err := totp.GenerateCodeCustom(secret, time.Now(), totp.ValidateOpts{  
		Period:    30,  
		Skew:      1,  
		Digits:    otp.DigitsSix,  
		Algorithm: otp.AlgorithmSHA512,  
	})  
	if err != nil {  
		panic(err)  
	}  
	return passcode  
}  
  
func main() {  
  
	passcode := GeneratePassCode("Github官方生成的密钥")  
  
	fmt.Print(passcode)  
  
}

这里通过GeneratePassCode函数来生成验证码,默认有效期同样是30秒,算法基于otp.AlgorithmSHA512。

运行结果:

go run "d:\jiyun\积云\boo3_public\main.go"  
692540

随后同样将该验证码填入页面中的Verify the code from the app文本框即可。和Python不同的是,Golang直接编译好以后可以在任意平台直接运行,理论上要比Python要方便的多。

结语

总体而言,GitHub的双因子登录提供了更高的账户安全性,保护用户免受未经授权的访问和潜在的数据泄露。它是一种简单而有效的安全措施,值得用户采取以保护他们的GitHub账户和相关代码资产,不过话说回来,Github官方力推收费的1Password软件,应该是有一些利益上的绑定,但对于会代码的我们来说,这都不算事儿。文章来源地址https://www.toymoban.com/news/detail-711859.html

到了这里,关于基于TOTP算法的Github两步验证2FA(双因子)机制Python3.10实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • GitHub验证的2FA

    一、 起因: GitHub需要双重身份验证 (2FA) 是登录网站或应用时使用的额外保护层。启用 2FA 时,必须使用您的用户名和密码登录,并提供另一种只有您知道或可以访问的身份验证形式。 二、解决: 2.1 这里使用chrome的身份验证插件进行扫描,地址如下: 添加扩张后,如下将身份

    2024年02月07日
    浏览(41)
  • Github 2FA验证的解决方法

    当前使用GitHub需要启用 2FA 验证,也就是除了账号密码外还有一个实时码,需要额外输入这个正确的实时码才能开启 2FA 验证和后续登陆。 这是目前我在使用的方法。在浏览器中添加一个叫做Authenticator的插件,传送地址: 开源地址:https://github.com/Authenticator-Extension/Authentica

    2024年01月17日
    浏览(54)
  • 【GitHub】2FA认证(双重身份验证)

    🌈你好呀!我是 是Yu欸 🌌 2024每日百字篆刻时光,感谢你的陪伴与支持 ~ 🚀 欢迎一起踏上探险之旅,挖掘无限可能,共同成长! 中国+86手机号验证不可行,笔者使用 TOTP 应用程序配置双2FA(双因素身份验证)。 官方列举了这几种方式,看自己方便使用哪种 如果登录GitHu

    2024年04月25日
    浏览(45)
  • GitHub的2FA验证问题解决工具

    打开GitHub跳出来这个提示,需要进行验证: 如何解决呢?方案有很多,我们可以使用开源的一个工具:AuthenticatorPro,包含有安卓版等,免费。 2FA 中文名称:双因素认证。直观的来说就是我们在普通输入用户名、密码之后还需要进行的第二次校验。 2FA包含有硬件版本和软件

    2024年01月21日
    浏览(59)
  • 完美解决Github 2fa二次验证问题

    https://onedayxyy.cn/docs/github-2fa 你的 Github 账户可能被封禁! 教你应对 Github 最新的 2FA 二次验证! 无地区限制, 无额外设备的全网最完美方案 双因素身份验证 (2FA) 是一种身份和访管理安全方法,需要经过两种形式的身份验证才能访河资源和数据,2FA 使企业能够监视和帮助保护其最

    2024年03月21日
    浏览(81)
  • GitHub 开启 2FA 双重身份验证的方法

    自2023年3月13日起,我们登录 GitHub 都会看到一个要求 Enable 2FA 的重要提示,具体如下: GitHub users are now required to enable two-factor authentication as an additional security measure. Your activity on GitHub includes you in this requirement. You will need to enable two-factor authentication on your account before May 04, 2023,

    2024年02月15日
    浏览(54)
  • 不用下载APP!三行代码解决Github的2FA验证!

    一定要保存好你的secret和恢复码!!登录的时候会用到!!!! 一定要保存好你的secret和恢复码!!登录的时候会用到!!!! 一定要保存好你的secret和恢复码!!登录的时候会用到!!!! 1.取到密钥  2.       将代码中secret部分替成刚刚取到的密钥,生成code!  一定要

    2024年02月11日
    浏览(41)
  • GitHub如何验证2FA,烦人的认证,看完几分钟解锁

    今天需要使用GitHub,还是不能用,需要2FA认证,没办法,还是让2FA认证流程来,一一解决,在解决这认证问题之前,先说说2FA认证是什么? 2FA 是指两步验证(Two-Factor Authentication)的缩写。它是一种用于增强账户安全性的身份验证方法。传统的身份验证通常只需要输入用户名

    2024年04月23日
    浏览(38)
  • Github的2FA验证问题的丝滑解决方案 ||(Verify your two-factor authentication (2FA) settings)

    Github的2FA验证问题的丝滑解决方案 ||(Verify your two-factor authentication (2FA) settings)_哔哩哔哩_bilibili

    2024年02月08日
    浏览(47)
  • 你的Github账户可能被封禁!教你应对Github最新的2FA二次验证! 无地区限制, 无额外设备的全网最完美方案

    双因素身份验证 (2FA) 是一种身份和访管理安全方法,需要经过两种形式的身份验证才能访河资源和数据,2FA使企业能够监视和帮助保护其最易受攻击的信息和网络。 使用双因素身份验证时有不同的身份验证方法。此处列出了一些最受欢迎的选项。 企业可以以密钥卡的形式向

    2024年02月08日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包