双因素认证(2FA)教程

所谓认证(authentication)就是确认用户的身份,是网站登录必不可少的步骤。

密码是最常见的认证方法,但是不安全,容易泄露和冒充。

越来越多的地方,要求启用双因素认证(Two-factor authentication,简称 2FA)。本文介绍它的概念和实现方法。

文章结尾有一则活动消息,优达学城(Udacity)的"双十一优惠",课程最高减免1111元。

一、双因素认证的概念

一般来说,三种不同类型的证据,可以证明一个人的身份。

  • 秘密信息:只有该用户知道、其他人不知道的某种信息,比如密码。
  • 个人物品:该用户的私人物品,比如身份证、钥匙。
  • 生理特征:该用户的遗传特征,比如指纹、相貌、虹膜等等。

这些证据就称为三种"因素"(factor)。因素越多,证明力就越强,身份就越可靠。

双因素认证就是指,通过认证同时需要两个因素的证据。

银行卡就是最常见的双因素认证。用户必须同时提供银行卡和密码,才能取到现金。

二、双因素认证方案

常用的双因素组合是密码 + 某种个人物品,比如网上银行的 U 盾。用户插上 U 盾,再输入密码,才能登录网上银行。

但是,用户不可能随时携带 U 盾,手机才是最好的替代品。密码 + 手机就成了最佳的双因素认证方案。

国内的很多网站要求,用户输入密码时,还要提供短消息发送的验证码,以证明用户确实拥有该手机。

但是,短消息是不安全的,容易被拦截和伪造,SIM 卡也可以克隆。已经有案例,先伪造身份证,再申请一模一样的手机号码,把钱转走。

因此,安全的双因素认证不是密码 + 短消息,而是下面要介绍的 TOTP。

三、TOTP 的概念

TOTP 的全称是"基于时间的一次性密码"(Time-based One-time Password)。它是公认的可靠解决方案,已经写入国际标准 RFC6238。

它的步骤如下。

第一步,用户开启双因素认证后,服务器生成一个密钥。

第二步:服务器提示用户扫描二维码(或者使用其他方式),把密钥保存到用户的手机。也就是说,服务器和用户的手机,现在都有了同一把密钥。

注意,密钥必须跟手机绑定。一旦用户更换手机,就必须生成全新的密钥。

第三步,用户登录时,手机客户端使用这个密钥和当前时间戳,生成一个哈希,有效期默认为30秒。用户在有效期内,把这个哈希提交给服务器。

第四步,服务器也使用密钥和当前时间戳,生成一个哈希,跟用户提交的哈希比对。只要两者不一致,就拒绝登录。

五、TOTP 的算法

仔细看上面的步骤,你可能会有一个问题:手机客户端和服务器,如何保证30秒期间都得到同一个哈希呢?

答案就是下面的公式。


TC = floor((unixtime(now)unixtime(T0)) / TS)

上面的公式中,TC 表示一个时间计数器,unixtime(now)是当前 Unix 时间戳,unixtime(T0)是约定的起始时间点的时间戳,默认是0,也就是1970年1月1日。TS 则是哈希有效期的时间长度,默认是30秒。因此,上面的公式就变成下面的形式。


TC = floor(unixtime(now) / 30)

所以,只要在 30 秒以内,TC 的值都是一样的。前提是服务器和手机的时间必须同步。

接下来,就可以算出哈希了。


TOTP = HASH(SecretKey, TC)

上面代码中,HASH就是约定的哈希函数,默认是 SHA-1。

TOTP 有硬件生成器和软件生成器之分,都是采用上面的算法。

(说明:TOTP 硬件生成器)

(说明:Google Authenticator 是一个生成 TOTP 的手机 App)

五、TOTP 的实现

TOTP 很容易写,各个语言都有实现。下面我用 JavaScript 实现2fa来演示一下真实代码。

首先,安装这个模块。


$ npm install --save 2fa

然后,生成一个32位字符的密钥。


var tfa = require('2fa');tfa.generateKey(32, function(err, key) {console.log(key);
});
// b5jjo0cz87d66mhwa9azplhxiao18zlx

现在就可以生成哈希了。


var tc = Math.floor(Date.now() / 1000 / 30);
var totp = tfa.generateCode(key, tc);
console.log(totp); // 683464

六、总结

双因素认证的优点在于,比单纯的密码登录安全得多。就算密码泄露,只要手机还在,账户就是安全的。各种密码破解方法,都对双因素认证无效。

缺点在于,登录多了一步,费时且麻烦,用户会感到不耐烦。而且,它也不意味着账户的绝对安全,入侵者依然可以通过盗取 cookie 或 token,劫持整个对话(session)。

双因素认证还有一个最大的问题,那就是帐户的恢复。

一旦忘记密码或者遗失手机,想要恢复登录,势必就要绕过双因素认证,这就形成了一个安全漏洞。除非准备两套双因素认证,一套用来登录,另一套用来恢复账户。

七、参考链接

  • Multi-factor authentication, by Wikipedia
  • Time-based One-time Password Algorithm, by Wikipedia
  • Enabling Two-Factor Authentication For Your Web Application, by Bozhidar Bozhanov
  • simontabor/2fa, by Simon Tabor

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

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

相关文章

如何实现双因素认证?

增强数字安全的愿望引起了世界各国政府的关注,所有政府都希望保护消费者和企业。因此,许多人提出了立法,将两因素身份验证 (2FA) 作为 IT 系统的强制性要求。其实,在我国等级保护制度中等级保护第三级以上都要求完成双因素认证的&…

网络安全合规-Tisax(汽车安全评估讯息交换平台)一

**TISAX(汽车安全评估讯息交换平台(可信信息安全评估交换平台))**是2017年由德国汽车工业联合会(VDA) 联合欧洲网络交换所(ENX) 所推出的资讯交换平台,通过应用欧洲网络交换协会(ENX)和德国汽车…

从医疗保健攻击到HIPAA 合规性

医疗机构无疑是网络攻击的热门目标。攻击者因在暗网上出售一条健康记录而获取高额 佣金,在各行业网络安全报告中医疗保健行业的攻击事件占比居高不下,这有什么奇怪的吗? 根据2022 年 SonicWall 网络威胁报告,医疗保健行业&#x…

漫话:如何给女朋友解释鸿蒙OS是怎样实现跨平台的?

周末在家休息,女朋友在刷朋友圈,突然她问我: 鸿蒙OS回顾 2019年8月9日华为开发者大会上,华为消费者业务CEO余承东正式宣布发布自有操作系统鸿蒙,内核为Linux内核、鸿蒙微内核和LiteOS。未来将摆脱Linux内核和LiteOS&am…

腾讯研发动画组件,以后动画制作用PAG

你好,我是tiantian。 我们知道,动画特效可以辅助视觉制作焦点,引导注意力的方向,越来越为广大视觉设计师青睐,并广泛应用于各类场景开发。 关于动画设计工具,既有 Framer.js、Origami, 也有交互…

能直接修复代码 BUG,比 ChatGPT 还厉害

【公众号回复 “1024”,免费领取程序员赚钱实操经验】 大家好,又见面了,我是章鱼猫! 最近 ChatGPT 非常的火,而且是火出圈的那种,各个领域的人都知道。但是不得不说程序员做的工具,对程序员还是…

chatgpt赋能Python-ipv4地址python

IPv4地址 Python编程介绍 IPv4地址在互联网中扮演着非常重要的角色,英文名称为 Internet Protocol Version 4 Address。每一个连接到互联网上的设备都会被分配一个唯一的IPv4地址,它由32位二进制数以点分十进制的形式呈现出来。在Python编程中&#xff…

chatgpt赋能Python-pythonip地址是否合法

Python中如何判断IP地址是否合法 在网络中,IP地址是非常重要的概念。它用来标识网络中每个设备的唯一地址。IP地址通常分为IPv4和IPv6两种类型。在Python中,有多种方法可以判断IP地址是否合法。在本文中,我们将介绍如何使用Python编程语言来…

可喜可贺,暴雪即将收购第一家工作室Proletariat,魔法吃鸡停运

暴雪娱乐在超过15年的时间里收购了第一家工作室。在VentureBeat的一份报告中,该公司收购了总部位于波士顿的工作室Proletariat。 “经过四年多的元素魔法和咒语组合,我们决定结束Spellbreak的研发,”该公司在其网站上写道。“这些服务器将于2…

修改战网昵称服务器错误,暴雪又改了游戏平台名字 暴雪战网回来了

暴雪一定是个纠结的处女座,距离上一次更改游戏平台名称之后,8月15日早上6点,暴雪中国又一次在微博上发表公告称“暴雪战网品牌名称更新”,名字从上一次的暴雪游戏平台改成了暴雪战网。 按暴雪的意思来看,之所以玩这么一…

暴雪战网服务器维护,炉石无法通过暴雪战网服务进行登录

有很多玩家常常遇到战网无法登陆、炉石传说无法登陆至战网服务等问题。那么下面就告诉大家这种解决办法,希望对你有帮助! 1、关闭游戏或安装程序,打开任务管理器,终止以下进程:Agent.exe,Blizzard Launcher…

【吴恩达deeplearning.ai】基于ChatGPT API打造应用系统(上)

以下内容均整理来自deeplearning.ai的同名课程 Location 课程访问地址 DLAI - Learning Platform Beta (deeplearning.ai) 一、大语言模型基础知识 本篇内容将围绕api接口的调用、token的介绍、定义角色场景 调用api接口 import os import openai import tiktoken from dote…

ChatGPT讲故事,DALLE-2负责画出来!两大AI合作出绘本!

点击下方卡片,关注“CVer”公众号 AI/CV重磅干货,第一时间送达 点击进入—>CV微信技术交流群 转载自:机器之心 | 编辑:张倩、袁铭怿 生成式 AI 正在变革内容的生产方式。 在过去的一周,相信大家都被 ChatGPT 刷了屏…

ChatGPT绘本故事,引领孩子探索神奇世界!

现在很多家长忙于工作,无暇陪伴孩子,老人或者身边的带小孩的家人不会给孩子读绘本故事怎么办? 这时ChatGPT的出现就派上大用场了,只要有手机,不会读绘本的大人们及孩子们都可以轻轻松松地进入童话世界,同时…

iPhone、Mac上都能跑,刷屏的Llama 2究竟性能如何?

来自:机器之心 进NLP群—>加入大模型与NLP交流群 虽然性能仍不及ChatGPT 3.5,但开源的力量是无法估量的。 昨天凌晨,相信很多人都被 Meta 发布的 Llama 2 刷了屏。OpenAI 研究科学家 Andrej Karpathy 在推特上表示,「对于人工智…

谜题科技发布Enigma Alpha平台,开启AI生成决策动作篇章!

近日,上海数字大脑研究院孵化的独立初创企业谜题科技(Enigma Tech)发布了 AIGA(人工智能生成动作)系统 Enigma Alpha,实现了自然语言对话交互、工具增强的自然语言对话交互、以自然语言为接口的物理/虚拟世…

马斯克:用AI干掉AI

数据观 2023-04-17 14:48 发表于贵州 ❑ 导 读 马斯克呼吁暂停人工智能开发!然后,他成立了一家人工智能公司... 全文共计3189字,预计阅读时间7分钟 来源 | 数据观综合(转载请注明来源) 编辑 | 蒲蒲 OpenAI大型预训练人…

阿里开业项目chat2DB-人工智能SQL分析介绍

1. chat2DB简介 1-1. 简介 ​ chat2DB是一款有开源免费的多数据库客户端工具,支持windows、mac本地安装,也支持服务器端部署,web网页访问。和传统的数据库客户端软件Navicat、DBeaver 相比Chat2DB集成了AIGC的能力,能够将自然语…

探索AI对话技术的未来发展趋势

文章目录 一、chatgpt是什么?二、世界对于chatgpt的看法三、chatgpt会是拉普拉斯妖么?四、革命?现实意义存在么?五、人工智能总结 一、chatgpt是什么? 我们来看看其它人工智能给它的定义 在我看来chatgpt是一种对话方…

GPT 应该存在吗?

GPT是否应该存在呢?Scott Aaronson 认为在掌握更多信息之前,我们应该按兵不动。 作者 | Scott Aaronson 译者 | 弯月 出品 | CSDN(ID:CSDNnews) 我记得90年代,关于 AI 哲学的讨论无休无止,图…