安全开发:身份认证方案之 Google 身份验证器和基于时间的一次性密码 TOTP 算法

这篇具有很好参考价值的文章主要介绍了安全开发:身份认证方案之 Google 身份验证器和基于时间的一次性密码 TOTP 算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • 参考资料在文末注明,如本文有错漏欢迎评论区指出👏

目前很多应用都逐步采用了双因子认证或者说MFA认证方案,因此本文介绍一下背后的机制和TOTP算法原理。使用TOTP算法,只要满足两个条件:1)基于相同的密钥;2)时钟同步;只需要事先约定好密钥,TOTP算法就可以保证校验段和被校验端具有相同的输出。

OTP

在介绍 TOTP 算法前,先介绍一下 OTP 算法。OTP,One Time Password,又称一次性口令、一次性密码、动态密码、单次有效密码。OTP 基于专门的算法每隔一定的时间间隔生成一个不可预测的随机数字组合。OTP密码有效期仅在一次会话或者交易过程中,因此不容易受到重放攻击。OTP分为计次使用和计时使用两种,计次使用的OTP产出后,可在不限时间内使用。计时使用的 OTP 需要设置密码有效时间,从30秒到两分钟不等,而 OTP 在进行认证之后即废弃不用,下次认证必须使用新的密码,降低了不经授权访问限制资源可能性。

OTP密码进一步分为:

  • HOTP:HMAC-based One-Time Password ,基于 HMAC 算法的一次性密码。事件同步,通过某一特定的事件次序及相同的种子值作为输入,通过 HASH 算法运算出一致的密码。
  • TOTP:Time-based One-Time Password写,基于时间戳算法的一次性密码。 时间同步,基于客户端的动态口令和动态口令验证服务器的时间比对,一般每 30 秒产生一个新口令,要求客户端和服务器能够十分精确的保持正确的时钟,客户端和服务端基于时间计算的动态口令才能一致。

计算 OTP 串的公式:OTP(K,C) = Truncate(HMAC-SHA-1(K,C))
K 表示秘钥串;C 为随机数;HMAC-SHA-1 表示使用 SHA-1 做 HMAC;Truncate 表示怎么截取加密后的串,并取加密后串的哪些字段组成一个数字;

对 HMAC-SHA-1 方式加密来说,Truncate 实现如下:
HMAC-SHA-1 加密后的长度得到一个 20 字节的密串;取这个 20 字节的密串的最后一个字节,取这字节的低 4 位,作为截取加密串的下标偏移量;按照下标偏移量开始,获取4个字节,按照大端方式(符合人类习惯的形式,比如 0x12 34 , 0x12 存放在低地址,大端即大端在前/高位在低地址存放的意思)组成一个整数;截取这个整数的后 6 位或者 8 位转成字符串返回。

TOTP 将其中的参数 C 变成了由时间戳产生的数字:C = (T - T0) / X; T 表示当前 Unix 时间戳:T0 一般取值为 0,也就是 1970 年 1 月 1 日。X 表示时间步数,也就是说多长时间产生一个动态密码,这个时间间隔就是时间步数 X,系统默认是 30 秒;

一个信息系统要集成 OTP 的认证方式,需要完成以下的工作:
1、开发手机令牌
2、开发认证的服务端,服务端需要完成令牌种子生成、令牌种子分发、动态口令生成等功能。
3、在OTP认证的服务端需要将业务系统的用户与分发的令牌建立关联,这样才能完成最终的登录验证。

TOTP

安全开发:身份认证方案之 Google 身份验证器和基于时间的一次性密码 TOTP 算法,后端开发,TOTP,OTP,MFA,2FA
TOTP 算法(Time-based One-time Password algorithm) 即基于具有时间戳计数器的 OTP。通过定义纪元(T0)的开始并以时间间隔(TI)为单位计数,将当前时间戳变为整数时间计数器(TC)。TOTP 实现可以使用 HMAC-SHA-256 或HMAC-SHA-512 (基于 SHA-256 或 SHA-512)函数来实现,而不是 HOTP 计算中的 HMAC-SHA-1 函数【注:SHA1 存在 HASH 碰撞】。

TOTP 密码生成过程文章来源地址https://www.toymoban.com/news/detail-762722.html

  1. 初始化:用户在服务提供商(如 Google 等)注册账户时,服务提供商(服务器)会为用户生成一个 密钥(Secret Key) 并保存在数据中。然后把这个密钥会以某种方式(通常是 二维码 )分享给用户,用户将其添加到(通过扫码)自己的身份验证器应用(如 Google Authenticator、Microsoft Authenticator)中。
  2. 生成 TOTP:身份验证器应用会按照固定的时间间隔(常见的是 30 秒)使用 HMAC-SHA1 算法,使用当前的时间戳和在初始化步骤中获取的密钥,生成一个新的一次性密码,这个密码通常是一个 6 位数字(但也可能更长或更短)。
  3. 验证 TOTP:当用户尝试登录或执行需要验证的操作时,会被要求提供当前的一次性密码。用户从自己的身份验证器应用中获取这个密码,并输入到服务提供商的网站或应用中。服务提供商会使用同样的算法和密钥,以及当前的时间戳,生成一个一次性密码,并将其与用户提供的密码进行比较。如果两个密码匹配,那么用户的身份就被认为已经验证。

基于 Node.js 实现支持 Google 身份验证器的 TOTP 算法

import { Secret, TOTP } from 'otpauth';

// 生成密钥
const secret = Secret.fromUTF8('your_secret_key'); 

// 生成TOTP实例
const totp = new TOTP({
  secret,
  issuer: 'Example',
  label: 'alice@example.com'  
});

// 生成token
const token = totp.generate();  // 30s
console.log('totp token:')
console.log(token);

// 验证token
const isValid = totp.validate({
  token,
  window: 1  // 一个窗口为一个 period
});

if(isValid !== null) {
  console.log('Valid token'); 
} else {
  console.log('Invalid token');
}

// 转成uri格式
const uri = totp.toString(); 
console.log(uri);

Reference

  1. Google身份验证器、基于时间的一次性密码 (TOTP)算法
  2. OTP概念及实现原理简析
  3. 基于时间的一次性密码 TOTP 详解
  4. 密码学I:密码系统、OTP密码和密码的安全性
  5. 一文搞懂 OTP 双因素认证
  6. 使用 Golang 实现基于时间的一次性密码 TOTP
  7. 基于 Node 实现 TOTP:Otplib

到了这里,关于安全开发:身份认证方案之 Google 身份验证器和基于时间的一次性密码 TOTP 算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 指纹统一身份认证系统系统安全设计

    2.10.1 身份认证 系统是为广大工作人员提供服务的,为了区分各个用户以及不同级别的用户,需要对他们的 身份和操作的合法性进行检查。体系应该规定实现身份认证与权限检查的方式、方法以及对 这些用户的管理要求。 2.10.2 权限管理 权限管理系统是保证业务系统安全的一

    2024年02月10日
    浏览(52)
  • 【网络安全】图解 Kerberos:身份认证

    Kerberos 是一种身份认证协议,被广泛运用在大数据生态中,甚至可以说是大数据身份认证的事实标准。本文将详细说明 Kerberos 原理。 Kerberos 一词来源于古希腊神话中的 Cerberus —— 守护地狱之门的三头犬。下图是 Kerberos 的 LOGO。 一句话来说,Kerberos 是一种基于加密 Ticket 的身

    2024年02月06日
    浏览(55)
  • 基于token的身份认证及自动续期的解决方案

        B/S架构大家应该都不陌生,web1.0时代,用户通过个人电脑浏览网站,单项获取信息,比如我们浏览新闻,查阅资料等。web2.0很快就到来,和1.0相比,用户可以随时随地分享自己的信息。这个时候就涉及到了我们的身份认证。当我们使用http无状态请求访问资源服务的时候,

    2023年04月16日
    浏览(57)
  • 2023身份识别技术大会 | 安全证件 | 数字认证 | 生物识别 | 公共安全安防身份技术展览会

    展会名称:  2023身份识别技术大会 | 安全证件 | 数字认证 | 生物识别 | 公共安全安防身份技术展览会 举办时间: 2023年5月17-18日 举办地点:  北京 国家会议中心 指导单位:  公安部科技信息化局 主办单位:  多维身份识别与可信认证技术国家工程研究中心 中国国际科技促

    2024年02月07日
    浏览(56)
  • 【安全】简单解析统一身份认证:介绍、原理和实现方法

    随着互联网的发展和各种在线服务的普及,用户在不同的应用和平台上需要进行多次身份验证。为了简化用户的登录和减少重复操作,统一身份认证(Single Sign-On,简称SSO)技术应运而生。本文将简单介绍统一身份认证的概念、原理和实现方法,希望能帮助你更好地理解和应

    2024年02月15日
    浏览(50)
  • 多因素认证与身份验证:分析不同类型的多因素认证方法,介绍如何在访问控制中使用身份验证以增强安全性

    随着数字化时代的到来,信息安全问题变得愈发重要。在网络世界中,用户的身份往往是保护敏感数据和系统免受未经授权访问的第一道防线。单一的密码已经不再足够,多因素认证(MFA)应运而生,成为提升身份验证安全性的重要工具之一。本文将深入探讨不同类型的多因

    2024年02月10日
    浏览(51)
  • AI 欺诈事件频出,如何重塑身份认证的安全性?

    据报告表示,生成式人工智能每年可为世界经济注入相当于 4.4 万亿美元的资金。预计到 2030 年,人工智能对全球财政的潜在贡献将达到 15.7 万亿美元。人们惊叹于 AI 强大工作效率,期待能帮忙节省不必要的劳动力,但事实上 AI 出现之后,AI 造假的恐慌也随之不断蔓延。 借

    2024年02月19日
    浏览(40)
  • 信息安全概论复习笔记 第九章 身份认证(不是重点,做了解吧)

    身份认证(Authentication)的定义: 宣称者向验证方出示证据,证明其身份的交互过程 至少涉及两个参与者,是一种协议 分为双向认证和单向认证 身份认证并不是一种静态的加密,而是一个 协议过程 区分两个概念 身份认证和报文鉴别 区别: ①报文鉴别是静态附加在报文之

    2024年02月02日
    浏览(36)
  • Java中JWT技术解析与实践:安全高效的身份认证

    什么是JWT(JSON Web Token)? JWT是一种用于身份验证和授权的开放标准(RFC 7519),它是基于JSON格式的轻量级安全令牌。JWT由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。通常,JWT被用于在不同的系统之间传递安全性的声明信息,以便用户在跨域应用中进行身

    2024年02月05日
    浏览(59)
  • 【安全】探索统一身份认证:OAuth 2.0的介绍、原理和实现方法

    在现代互联网应用中,用户需要在多个应用程序之间共享身份验证和授权信息。OAuth 2.0作为一种流行的统一身份认证解决方案,通过简化和安全地授权第三方应用程序访问用户资源,为用户提供了更好的体验。本文将深入介绍OAuth 2.0的概念、原理和实现方法,帮助读者更好地

    2024年02月11日
    浏览(62)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包