在各大互联网平台中对于账户的安全性不容小嘘,gmail v2ex 这些在使用的时候为了提高安全性经常会推荐绑定 google auth,用户登录或者其他操作的时候一个 token验证.

原理

Google Authenticator 原理如下

Google的两步验证算法源自另一种名为HMAC-Based One-Time Password的算法,简称HOTP。HOTP的工作原理如下:

客户端和服务器事先协商好一个密钥K,用于一次性密码的生成过程,此密钥不被任何第三方所知道。此外,客户端和服务器各有一个计数器C,并且事先将计数值同步。

进行验证时,客户端对密钥和计数器的组合(K,C)使用HMAC(Hash-based Message Authentication Code)算法计算一次性密码,公式如下:

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

上面采用了HMAC-SHA-1,当然也可以使用HMAC-MD5等。HMAC算法得出的值位数比较多,不方便用户输入,因此需要截断(Truncate)成为一组不太长十进制数(例如6位)。计算完成之后客户端计数器C计数值加1。用户将这一组十进制数输入并且提交之后,服务器端同样的计算,并且与用户提交的数值比较,如果相同,则验证通过,服务器端将计数值C增加1。如果不相同,则验证失败。

这里的一个比较有趣的问题是,如果验证失败或者客户端不小心多进行了一次生成密码操作,那么服务器和客户端之间的计数器C将不再同步,因此需要有一个重新同步(Resynchronization)的机制。这里不作具体介绍,详情可以参看RFC 4226

备份

在跟服务器绑定的过程中一般是服务端会出现 密钥K,你直接用 Google Auth app 扫码就可以绑定,服务平台会提示让你保存好这个密钥K. 这个密钥K 是你用于恢复 auth code 的. 但是当你绑定了很多验证,并且不是每次都保存了这个密钥k,这个时候你需要查看、迁移、保存某个auth code 对用的密钥时候,这个就需要用到接下来的办法.

  1. 打开 Google Authenticator 应用
  2. 点击设置(三个点,右上角),选择导出账号
  3. 如果有授权提示,按照授权操作就可以了
  4. 选择你要倒出的账号,默认情况下为 所有账户
  5. 该应用会把你所有账户按照一定数量生成1个或几个不同的QR码的图片
  6. 这里你可以选择分别截屏保存下来或者用另外一台手机的微信扫码功能,来扫这个QR码,把扫出来的内容保存下来,内容前缀为 otpauth-migration://offline?data= 
  7. // clone google-auth OR码工具
    git clone https://github.com/krissrex/google-authenticator-exporter.git 
    cd google-authenticator-exporter
    npm install .
  8. 上面步骤完成之后,输入 npm run start 指令,这个时候会提示输入 totpUri , 然后你就把 你保存下来的 以 otpauth-migration 开头的内容粘贴到这里,按照提示操作,选择倒出到文件还是输出到控制台
  9. 其中内容中 totpSecret 就是你倒出的账户的对应的私钥,这个要保存好!!!!

参考资料如下:

  1. TOTP: Time-based One-time Password Algorithm, RFC Draft, http://tools.ietf.org/id/draft-mraihi-totp-timebased-06.html
  2. HOTP: An HMAC-Based One-Time Password Algorithm, RFC 4226, http://tools.ietf.org/html/rfc4226
  3. Google Authenticator project, http://code.google.com/p/google-authenticator/

Authenticator 备份密钥/导出相关推荐

  1. 为加密的NTFS分区制作一把备份密钥

    如果你的硬盘上有NTFS分区,且对该分区中的数据进行了加密,那么应该制作备份密钥,以防万一.密钥的制作方法如下. 单击"开始→运行"命令,在打开的运行对话框中输入"cer ...

  2. HMAC和密钥导出(HMAC and Key Derivation)

    简单地计算hash_func(key+msg)以获得MAC(消息认证码)被认为是不安全的.建议改用HMAC算法,例如HMAC-SHA256或HMAC-SHA3-512或其他安全MAC算法. 什么是HM ...

  3. SM2使用的密钥导出函数

    SM2中使用了一种KDF,可以参见SM2标准文档第4部分公钥加密算法的5.4.3节密钥派生函数. 函数:K = KDF (Z, klen) 功能:SM2使用的的密钥导出函数 输入参数: Z:KDF所需 ...

  4. C语言KDF密钥源代码,区块链中的数学-SM2算法与KDF密钥导出函数

    本节讲了SM2算法的KDF函数,从一般用途到SM2特定实现 ## 写在前面 上一节说了[sm2概述和加密过程](https://learnblockchain.cn/article/1516)实现, ...

  5. SM9使用的密钥导出函数

    SM9使用的密钥导出函数是H1和H2函数的前四步,详情参见在第2部分 数字签名算法 5.4.2节密码杂凑函数. 两个密钥导出函数的差异在SM3杂凑时的首字节不同,H1和H2分别使用0x01和0x02作 ...

  6. 备份和导出的区别_如何在Android上手动导出和备份联系人

    备份和导出的区别 Android does a great job of keeping all your contacts in sync with your Google account, so ...

  7. 【数据库】sqlite3数据库备份、导出方法汇总

    [数据库]sqlite3常用命令及SQL语句 目录 1.直接拷贝数据库 2.使用.backup .clone 1)交互式 2)脚本 3.导出到csv文件中(其它格式类似) 1)交互式 2)脚本 3)导 ...

  8. php mysql备份成sql_单php文件实现备份MySQL导出为.sql数据库代码

    最近处理一个客户的站点,对方主机商给的权限太小,建立目录都不能,也没办法上传帝国备份网备份,后台备份也可以,但是确实也很麻烦,有没有快的办法呢,其实客户那里可以上传单文件,这不写一个单文件代码,自动生 ...

  9. mysql中备份和导出的区别_mysql的备份和导出

    1.导出整个数据库 mysqldump -u 用户名 -p 数据库名 > 导出的文件名 mysqldump -u root -p dataname >dataname.sql 备份MySQ ...

最新文章

  1. 第三章 PLSQL Developer 安装前oracleclient客户端的配置,在用plsql 连接oracle服务器
  2. 四. python的time和datetime 模块
  3. 小哥哥,WebRTC 了解一下
  4. jzoj3518-进化序列(evolve)【位运算】
  5. 【APICloud系列|33】移动应用软件加固步骤,适合所有的安卓应用市场
  6. 11相机不流畅_小米11有望本月发布,小米10退位让贤,256GB版本跌至3799
  7. 关于ie7下display:inline-block;不支持的解决方案
  8. js系列教程1-数组操作全解
  9. ip代理服务器8需要云速捷_nginx获取真实ip,proxy_set_head怎么设置头部信息
  10. 电脑软件安装手册 2019年4月22日
  11. uni-app商城源码/公众号/小程序/APP多端适配
  12. Mathematica/偏导数/最小二乘法(线性回归)
  13. 电站计算机培训计划,电站年度培训的工作总结范文
  14. 十一假期,分享几个好玩儿的GitHub项目
  15. 车载系统升级、“特饭”会员品牌上线,解读新特背后的互联网产品逻辑
  16. Linux解压tar.gz和tar.bz2的命令
  17. 'https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.1.2/gradle-3
  18. docker打jdk 1.8镜像
  19. 机器学习—线性回归—正规方程(原理及代码实现)
  20. UDS诊断看这篇就够了,吐血整理

热门文章

  1. 【C语言】宏定义(不带参数的宏定义和带参数的宏定义)
  2. linux下完全卸载oracle
  3. 龙岩群控服务器系统,别找免root群控系统啦,nbe群控云手机全家桶更实惠
  4. 清华应届硕士炮轰字节:恶意低薪2万/月,硕士不如本科还倒贴
  5. 双12无线蓝牙耳机怎么选?商城热销十大高人气蓝牙耳机排名
  6. James Webb Space Telescope Pipeline(詹姆斯.韦伯太空望远镜数据处理流程)
  7. PL_SQL(oracle数据库)导入数据出现“经由常规路径 EXPORT:V11.02.00 -64bit ”只有DBA才能导入由其他DBA导出的文件
  8. go mod 引用出错问题排查(ambiguous import: found github.com/ugorji/go/codec in multiple modules)
  9. 肾囊肿如何有效预防?
  10. window10系统安装