唠唠闲话
最近登录 GitHub 一直提示设置双重验证。除此之外,开发 Python 包常用的平台—— PyPI ,也宣布从今年开始强制启用双因素认证(2FA)。这一变化虽然在提高安全性方面起到了积极作用,但也给日常工作带来了麻烦。本篇将介绍如何管理和配置 PyPI 和 GitHub 的 2FA,并使用 Python 脚本简化验证过程。
参考链接:
- Python: 代码打成pip包并发布到 PyPi
- 什么是双因素验证 2FA,如何用 Python 实现?
PyPI 双重验证
我们先讲讲配置方法,然后再介绍 2FA 的原理。
配置恢复代码
在 PyPI 上,首先要做的是设置恢复代码。这些代码在你无法使用常规 2FA 方法时至关重要。
-
打开 Account settings 页面。
-
在 2FA 设置区域,生成并下载恢复代码。
重要事情说三遍:
请妥善保存这些代码,它们是你在遇到问题时重置 2FA 的关键!
请妥善保存这些代码,它们是你在遇到问题时重置 2FA 的关键!
请妥善保存这些代码,它们是你在遇到问题时重置 2FA 的关键!
添加 2FA
接下来,将添加 2FA 到你的 PyPI 账户。
-
点击使用身份验证程序添加 2FA。
-
你会看到一个弹出的二维码和应用代码。
-
安装 Python 包
pyotp
来生成 2FA 验证码。pip install pyotp
-
复制应用代码,并使用以下 Python 脚本获取验证码。
import pyotpkey = '粘贴 2FA 代码' totp = pyotp.TOTP(key) print(totp.now())
-
将脚本保存为
get2fa.py
,在需要用时运行脚本。#!/usr/bin/env python3 import pyotpkey = '粘贴 2FA 代码' totp = pyotp.TOTP(key) print(totp.now())
-
此外,对于 Mac/Ubuntu 用户,有一个更简洁的方案,使用
mintotp
。pip install mintotp mintotp <<< "粘贴 2FA 代码"
创建一个别名:
alias py2fa="mintotp <<< '粘贴 2FA 代码'"
这样每次在终端运行
py2fa
就能获取 2FA 验证码。
GitHub 2FA
从去年(2023)3 月开始,GitHub 将逐步要求所有用户在提交代码时启用 2FA。下面是如何在 GitHub 上设置 2FA 的步骤。
-
在 密码和安全性 页面开启 2FA。
-
你将看到一个提供 2FA 的二维码。
-
使用二维码识别器获取其中的链接,其中
secret=
后的内容为 2FA 密钥 -
后续步骤与 PyPI 类似,可以用同样的脚本或
mintotp
获取验证码。
此外,GitHub 还支持一些选项,比如 passkey 可以将当前设备的指纹功能作为验证因素:
2FA 的原理介绍
最后,简单聊聊双因素认证(2FA)的工作原理。
什么是双因素认证(2FA)
双因素认证(2FA)是一种安全机制,它要求用户在登录过程中提供两种不同类型的认证信息。通常包括:
- 知识因素(Something You Know):比如密码、PIN 码或安全问题的答案。
- 拥有因素(Something You Have):通常是手机应用生成的一次性代码,或者是硬件令牌,比如银行的 U 盾。
通过结合这两种因素,即使其中一个因素(如密码)被泄露,账户仍然安全,因为非法用户缺少第二个必要的认证信息。
一次性密码(OTP)
在 2FA 中,经常使用的“拥有因素”是一次性密码(One-Time Password)。OTP 的生成可以基于时间(TOTP)或事件(HOTP)。
- 时间基准的一次性密码(TOTP):依据当前时间和一个秘钥生成 OTP。由于时间在不断变化,生成的 OTP 也会在一定时间间隔后失效,通常是30秒。
- 事件基准的一次性密码(HOTP):基于一个计数器和一个秘钥生成 OTP。每次使用后,计数器增加,生成新的 OTP。
这些一次性密码通常通过哈希算法(如 HMAC)生成的。HMAC(Hash-based Message Authentication Code)结合了一个加密密钥(我们前边复制的代码)和一个加密哈希函数(如SHA-1),以产生功能强大的认证标记。
2FA 密钥
由于 TOTP 和 HOTP 标准的算法是公开和标准化的,不同的应用和工具(如 Google Authenticator, Authy, pyotp 等)在实现时遵循相同的算法和标准,因此用不同的工具使用相同的秘钥能生成相同的 OTP。秘钥的共享通常是通过扫描二维码实现的,这个二维码实际上包含了秘钥和账户信息。
简言之,通过使用 2FA,特别是基于时间或事件的一次性密码(TOTP/HOTP),可以增强账户的安全性。这种方法的关键在于使用一个秘钥生成一次性密码,这个密码对外部攻击者来说几乎不可能预测或复制,除非他们获得了秘钥本身。因此,即使你的主密码泄露,只要 2FA 保持安全,你的账户仍然是安全的。
以上,如果遇到问题,欢迎在评论区留言。