首页 » 谷歌 » 谷歌验证器的原理是什么,我能实现一个类似的验证器吗

谷歌验证器的原理是什么,我能实现一个类似的验证器吗

 

谷歌锁区号/谷歌邮箱老号-购买商城
谷歌play地区代改
Google Voice号码支持自助购买
谷歌锁区号购买商城]
美区VISA卡代开-可以用于aws,azure,FB,谷歌,亚马逊,速卖通,eBay,独立站,paypal等支付
如果您还有其他问题可以加我电报交流。
电报号:telegram:@tianmeiapp

阅读本篇文章你可以了解到谷歌验证器的实现原理,并且可以自己使用node.js实现支持谷歌验证器的两步验证。

这两年发现身边很多应用和网站都支持两步验证,号召用户使用两步验证。

发现除了Apple ID的两步验证,其他很多两步验证都可以看到 ( )。

这让我很感兴趣, 的原理到底是什么,我可以自己实现一个类似的吗?

什么是两步验证

两步验证是指当用户输入账号密码且验证成功后,需要额外输入一串一次性随机密码(一般为4-6位),服务器确认登录为用户本人。

两步验证的类型

短信验证

短信验证也是我们最熟悉和最常用的两步验证,但我认为短信验证有以下缺点:需要支付运营商短信费用,短信到达延迟,短信根本没有到达并且网站不允许您立即重新发送。相信你也有过等短信让你发疯的经历。

动态密码

玩过网易游戏的同学应该知道网易通用指令,以及部分银行提供的动态密码器。记得第一次看到这个东西的时候,很神奇,这个东西不用联网就可以认证用户。其实它的实现原理和类似,后面我们会详细讨论。

密码卡

在我看来,密码卡是最反人类的设计。我以前做工行网上银行的时候有一个。它有几个字符以矩阵的形式排列。系统会给你一些坐标,让你找出对应的字符,根据坐标输入到系统中。 ?%&¥#...(*#) 我没用过。不可能,这辈子都不可能用密码卡了。 .

两步验证的重要性

两步验证从用户体验的角度来看肯定是不友好的,因为当用户登录或操作启用了两步验证的网站时,用户需要额外输入一个随机密码来确认用户是自己经营。对于大多数人来说,这个操作可能会觉得多余和繁琐。关掉太麻烦了。

我建议对于比较重要的账户,如果应用提供两步验证,最好开启。安全第一。

我可以举起我身边的栗子吗?

2016 年左右,我女朋友的 Apple ID 被盗。黑客解开她的邮箱并切换到黑客的邮箱,导致她的女朋友被锁定。黑客还发邮件勒索500元解锁。我还加了黑客电报,和他讨价还价,砍到200块钱。最后当然是去苹果客服解锁了谷歌验证器怎么用,提供了各种照片、文件和电话确认,花了2天时间才解锁。一般没有损失,但是给我的生活带来了一些不便。看看知乎被黑,刷信用卡、刷支付宝的人,太惨了。

如果被盗者开启了两步验证,即使别人知道你Apple ID的账号密码,也无法登录你的账号。

此外,许多用户可能喜欢在多个网站上使用相同的密码,这是非常危险的。如果一个网站上的用户帐户被盗用,其他平台上的帐户也可能受到影响。毕竟,“某平台账号系统被盗”也时有发生。在这种情况下,开启两步验证也可以保护其他平台的账号不被不法分子利用。

HOTP 和

两步验证使用的密码为一次性密码(One-Time OTP),也称为动态密码。它是一种强大的身份验证技术,它使用加密技术在客户端和服务器之间共享密钥。增强目前的静态密码认证是一种非常方便的技术手段。它是一种重要的两步验证认证技术。解释

HOTP(基于 HMAC 的一次性)

HOTP是基于HMAC算法生成的一次性密码,也称为事件同步的动态密码。它是ITEF RFC 4226中公开的算法规范。伪代码如下:

HOTP(K,C) = (HMAC-SHA-1(K,C))

客户端和服务器预先协商一个密钥K,用于生成一次性密码。客户端和服务端各有一个事件计数器C谷歌验证器怎么用,计数器值提前同步。它是一种将 HMAC-SHA-1 生成的 20 字节字符串转换为多个十进制数字的算法。

TOTP(基于时间的一次性)

TOTP是HOTP的改进版,它用时间代替了HOTP的事件计数器C,也称为时间同步动态密码。详细规范见RFC 6238,伪代码:

TOTP = (HMAC-SHA-1(K,T))

T = (Unix 时间 - T0)/X

T0为初始测试时间,默认为0

X为时间步长,默认为30秒

官方文档给个栗子,假设当前unix时间=59,T0=0,X=30,那么T=1

假设当前unix时间=60,T0=0,X=30,则T=2

即T的值向下取整,舍弃小数

实施

一旦你理解了规范,编写代码就很容易了。

上面的算法不过是HMAC-SHA-1,贴一段JS代码:

  // 将20字节的hmac结果转为6位数字,不够6位前面补0 
  truncat(hmac_result) {
    const offset   =  hmac_result[19].charCodeAt() & 0xf;
    const bin_code = (hmac_result[offset].charCodeAt()  & 0x7f) << 24
       | (hmac_result[offset + 1].charCodeAt() & 0xff) << 16
       | (hmac_result[offset + 2].charCodeAt() & 0xff) <<  8
       | (hmac_result[offset + 3].charCodeAt() & 0xff);
    let otp = (bin_code % 10 ** this.digit).toString();
    while (otp.length < this.digit) {
      otp = "0" + otp;
    }
    return otp;
  }

在线预览地址

代码已经上传到npm,支持node.js和浏览器执行

请移步我的完整代码

安装

npm install totp.js

使用

const TOTP = require("totp.js");
// generate a base32 secret key
const key = TOTP.randomKey();
// "GAXGGYT2OU2DEOJR"
const totp = new TOTP(key);
const code = totp.genOTP();
// "552179"
totp.verify(code)
// true
// generate Google Authenticator supported URL
totp.gaURL("[email protected]", "Totp.js")
// "otpauth://totp/[email protected]?issuer=Totp.js&secret=GAXGGYT2OU2DEOJR"
// OR
const totp2 = new TOTP(TOTP.base32.encode("your key"));
totp2.genOTP()

参考

ITEF RFC 4226

ITEF RFC 6238

欢迎转载,转载请附上原文链接

谷歌锁区号/谷歌邮箱老号-购买商城
谷歌play地区代改
Google Voice号码支持自助购买
谷歌锁区号购买商城]
美区VISA卡代开-可以用于aws,azure,FB,谷歌,亚马逊,速卖通,eBay,独立站,paypal等支付
如果您还有其他问题可以加我电报交流。
电报号:telegram:@tianmeiapp

原文链接:谷歌验证器的原理是什么,我能实现一个类似的验证器吗,转载请注明来源!

0