从Github登录的双因子验证到基于时间戳的一次性密码:2FA、OTP与TOTP

Github于2023-03-09推出一项提高软件安全标准的措施,所有在Github上贡献过代码的开发人员在年底前必须完成 2FA(Two-factory authentication,双因子认证)。初听此事之时,不以为意,因为自己之前就知道双因子认证,就是说登录账号时,不仅需要密码,还需要额外的认证方式,我们熟知的短信验证码就是其中的一种方式。

2FA

但当我准备启用Github账号的2FA时,我却发现Github虽然提供了SMS/Text message的选项,但并不支持国内手机号码,也就是说大陆无法收到验证码。Github支持的二次验证方式如下

  • Authenticator app
  • SMS/Text message
  • Security keys
  • Github Mobile

移动端的Github应用也可以用来做二次验证,但是为了安全,我的手机通常没有搭载科学上网的软件,此项也被PASS。这时只能使用Authenticator app的方式,采用了 OTP(One Time Password,一次性密码) 算法。

蓝色表示首次注册或者登录,绿色表示后续登录

介绍完2FA场景,我们就知道OTP原理就是,用户在首次登录或者注册时,云端不仅保存用户的密码,还会生成一个密钥,服务器通常使用二维码的方式呈现给用户,这个密钥需要用户使用客户端保存,也就是需要支持OPT的程序去扫描二维码。这样云侧端侧拥有了同样的密钥,就可以基于相同的算法生成相同的一次性密码。通常这个算法就是TOTP(Time-based One-time Password,基于时间戳的一次性密码)。

TOTP

TOTP定义在 RFC 6238,附录给出了JAVA实现TOTP的代码,读者可以自取。其实现算法如下

TOTP=HMAC-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生成临时密码,给清洁工自行开门;工商银行网银的动态令牌生成器在离线场景下仍然可以生成动态密码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/202303.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

再探MDG cloud-ready模式!看未来MDG的发展路线

紧跟上一篇博客,我们将更加深入探讨一些MDG Cloud-Ready模式的相关内容。 背景 在2021年9月,Harald Kuck,SAP ABAP Platform老大,介绍了未来ABAP的发展路线,并最终在一年后正式推出了ABAP Cloud。他在会上是这么说的…

担忧CentOS停服?KeyarchOS系统来支撑

担忧CentOS停服?KeyarchOS系统来支撑 近年发生的“微软黑屏门”、“微软操作系统停更”等安全事件,敲响了我国 IT 产业的警钟,建立由我国主导的 IT 产业生态尤为迫切。对此,我国信息技术应用创新行业乘势而起,旨在通过…

基于单片机的光伏发电并网系统设计(论文+源码)

1.系统设计 片作为主控制器。由于太阳能板本身的能量输出受到负载影响,因此需要在太阳能板后面加入一级DC/DC电路,来实现最大功率跟踪,以提高整个系统的效率。接着,由于光伏逆变器需要产生220V的交流电给居民使用,因此…

子虔与罗克韦尔自动化合作 进博会签约自动化净零智造联创中心

11月6日进博会现场,漕河泾罗克韦尔自动化净零智造联创中心合作协议签约暨合作伙伴(第一批)授牌仪式举办,子虔科技作为联创中心合作伙伴签约,携手共建智能制造,引领行业可持续发展。 图示:子虔科…

BMS基础知识:BMS基本功能,铅酸和锂电池工作原理,电池系统的重要概念!

笔者有话说: 作为BMS从业者来讲,目前接触的BMS系统并不是很高大尚,但基础功能都是有的。 关于BMS的基本功能,工作原理,运行逻辑等,在此做一个梳理,讲一些最基础的扫盲知识,可以作为…

计算机网络:数据链路层

0 本节主要内容 问题描述 解决思路 1 问题描述 数据链路层主要面临四个问题: 封装成帧;透明传输;差错检测;实现相邻节点之间的可靠通信。 1.1 子问题1:封装成帧 怎么知道数据从哪里开始?到哪里结束&a…

校园圈子论坛,交友,帖子内短视频,二手市场,APP小程序H5三端交付,源码交付,支持二开

校园圈子论坛,交友频道,商城,二手市场,活动专区,短视频,从校园生活的方方面面展现出了充满活力和创造力的镜头。这个频道是一个让学生们相互交流、结识新朋友的平台,不仅有交友功能,…

如何使用无代码系统搭建软件平台?有哪些开源无代码开发平台?

无代码是什么 无代码开发,也称为零代码(Zero Code)开发,是一种技术概念。无代码开发无需代码基础,适合业务人员、IT开发及其他各类人员使用。他们通过无代码开发平台快速构建应用,并适应各种需求变化&#…

抖音汽车租赁小程序技术指南:开发高效便捷的租赁系统

为了更好地满足用户需求,抖音汽车租赁小程序成为一个备受关注的技术解决方案。本文将深入探讨开发高效便捷的汽车租赁系统所需的技术要点,为开发者提供一份实用的技术指南。 小程序架构选择 在搭建抖音汽车租赁小程序时,选择合适的小程序架构…

Arthas 监听 Docker 部署的java项目CPU占比高的信息

1、Linux上安装Arthas wget https://alibaba.github.io/arthas/arthas-boot.jar2、docker ps 查看目标项目的容器ID 3、copy Arthas 到目标容器中 (注意有 😕 ) docker cp arthas-boot.jar d97e8666666:/4、进入到目标容器目录中 docker exec -it d97e8666666 /b…

根据商品链接获取拼多多商品详情数据接口|拼多多商品详情价格数据接口|拼多多API接口

拼多多,作为中国最大的社交电商之一,为卖家提供了丰富的商品详情接口。这些接口可以帮助卖家快速获取商品信息,提高销售效率。本文将详细介绍如何使用拼多多商品详情接口,以及它的优势和注意事项。 一、拼多多商品详情接口概述 …

centos7中通过minikube安装Kubernetes

minikube是一款开源的Kubernetes集群管理器,它可以帮助您在本地计算机上轻松部署和管理Kubernetes集群。以下是minikube的安装和使用步骤: 安装Docker:如果您还没有安装Docker,可以从Docker官方网站上下载并安装适合您操作系统的…

分类预测 | Matlab实现基于DBN-SVM深度置信网络-支持向量机的数据分类预测

分类预测 | Matlab实现基于DBN-SVM深度置信网络-支持向量机的数据分类预测 目录 分类预测 | Matlab实现基于DBN-SVM深度置信网络-支持向量机的数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.利用DBN进行特征提取,将提取后的特征放入SVM进行分类…

Java基础(程序控制结构篇)

Java的程序控制结构与C语言一致,分为顺序结构、选择结构(分支结构)和循环结构三种。 一、顺序结构 如果程序不包含选择结构或是循环结构,那么程序中的语句就是顺序的逐条执行,这就是顺序结构。 import java.util.Sc…

QT mysql 数据库线程池 与数据库操作封装

最近事情比较多很久没有写学习笔记了,数据库线程池, 数据库封装,虽说数据库操作有很多不需要写sql 的,ORM 封装的方式去操作数据库。但是从业这些年一直是自己动手写sql ,还是改不了这个习惯。不说了直接上代码。 数据…

【C语言】数据结构——栈和队列实例探究

💗个人主页💗 ⭐个人专栏——数据结构学习⭐ 💫点击关注🤩一起学习C语言💯💫 目录 导读:一、 栈1. 栈的概念及结构2. 栈的实现3. 实现代码3.1 定义结构体3.2 初始化栈3.3 销毁栈3.4 入栈3.5 出栈…

Rust生态系统:探索常用的库和框架

大家好!我是lincyang。 今天我们来探索Rust的生态系统,特别是其中的一些常用库和框架。 Rust生态系统虽然相比于一些更成熟的语言还在成长阶段,但已经有很多强大的工具和库支持各种应用的开发。 常用的Rust库和框架 Serde:一个…

python pymodbus库使用教程(以Modbus RTU为例)

文档: https://pymodbus.readthedocs.io/en/latest/ 源码: https://github.com/riptideio/pymodbus/ 文章目录 Python PyModbus库使用教程:以Modbus RTU为例介绍安装PyModbus配置串行连接导入必要的模块创建Modbus客户端实例 建立连接连接…

CQ 社区版 V2.6.0 发布 | SQL闪回、权限看板、新增数据源人大金仓等

前言 HELLO,大家好,又到了 CloudQuery 社区版发版时间!本次更新版本为 v2.6.0,亮点多多,我们直入主题一起来看! 一、本期亮点 新增 3 种数据源支持 V2.6.0,新增三种国产数据源支持&#xff…

【广州华锐互动】VR溺水预防教育:在虚拟世界中学会自救!

在现代社会中,水上安全和救援行动的重要性不言而喻。尤其在自然灾害、游泳事故或航海事故中,有效的救援行动可以挽救许多生命。然而,传统的救援训练往往存在成本高、风险大、效率低等问题。在这样的背景下,虚拟现实(VR…