如何备份Google Authenticator?


130

我现在开始将Google Authenticator用于越来越多的事情,但是我刚刚意识到,如果我丢失了手机,或者需要擦除并还原它以安装新的固件,将会丢失所有代码。

反正有备份吗?还是某种后备方式,意味着我可以将其还原到新设备上?

谢谢


2
我不明白...密码只能使用一次,它们不会存储在手机上的任何位置,如果您需要在网站上输入密码,则即使您已经在使用密码,也必须使用新密码前段时间在此网站上放了一个。
MatthieuHarlé2014年

1
谢谢你,但我的理解是,如果我现在失去了我的电话,我甚至不会能够登录网站,更不用说建立一个新的谷歌身份验证码
尼克-

5
如果手机丢失时需要登录密码,可以使用一种备份方法(SMS,呼叫,打印的密码...)。强烈建议您设置至少一种替代方法来克服这种情况:)
MatthieuHarlé2014年

3
我一直想叉Google Authenticator添加此功能。我希望有人在我有时间之前会做。
Michael Kropat 2014年

5
@Shywim Google Authenticator不仅适用于Google帐户。有没有备用验证码和手机短信等多方面的服务
克里斯·哈里森

Answers:


84

以下方法仅适用于根植的Android设备。

Linux:

adb pull /data/data/com.google.android.apps.authenticator2/databases/databases /AFolderOnPC

视窗:

adb pull /data/data/com.google.android.apps.authenticator2/databases/databases C:\AFolderOnPC

请注意,PC上的文件夹必须已经存在。

这会将带有主密钥的身份验证器数据库文件复制到PC,该主密钥从中生成一次密码。然后可以将该文件还原到Android设备上的相同位置,或使用sqlite数据库查看器读取以提取密钥。


10
复制到新设备时,请确保databases文件夹和databases文件都具有755权限。我尝试了700,而GA一直崩溃。有点担心,它需要完全的权限。也许这就是NSA的要求。
eduncan911 2015年

12
您需adb root要这样做之前,否则您会得到remote object '/data/data/com.google.android.apps.authenticator2/databases' does not exist
Simon Woodside

3
请注意,如果启用了SELinux,即使使用正确的权限位,Authenticator应用程序也可能崩溃。要解决此问题,restorecon -F /data/data/com.google.android.apps.authenticator2/databases/databases请在放回数据库文件后运行。(来源
张海

@ eduncan911 660为我工作
deed02392

扎根设备会使它的安全性降低。如果您使用的是2FA,则大概需要更高的安全性。对于风险:owasp.org/index.php/Projects/...
西蒙·伍德赛德

26

您无需备份Google Authenticator应用程序/数据,因为您可以创建“备份代码”列表,而无需在配置两步验证的同一页面上输入验证码,即可用于登录。

为什么要打印或下载备用代码?

备份代码对于出行,接收短信或语音电话有问题或无法使用Google Authenticator移动应用的人们特别有用。

建议:您应该打印或下载备用代码

将它们存储在安全的地方(或打印出来),如果您丢失了手机,则可以使用以下代码之一登录您的帐户,并通过Authenticator应用设置新设备。

尽管这适用于Google的两步身份验证,但您配置为使用Google Authenticator应用程序的任何其他网站都应提供类似的选项或另一种接收代码的方式(例如,Facebook支持Google Authenticator,他们自己的应用程序和短信作为以下方法:接收代码)。


3
对于不提供此功能的网站,我会说,您唯一的选择是使用没有两步身份验证的强唯一口令。出于兴趣,哪些网站不提供备份选项?Dropbox,Facebook,LastPass,Wordpress都可以做(那些是我使用2步身份验证的其他网站)。
bmdixon 2014年

18
@Nick:保存Google或其他网站提供的QR码,然后将其重新添加到另一台设备上的 Authenticator中可行的。我自己做了几次。但是,您应该确保时间正确且在两个设备上都保持最新(如果您打算继续使用它们),否则身份验证可能会失败。
Andris 2014年

7
两因素身份验证“一次性”密码是由两件事生成的:当前时间,以及初始化期间服务器和应用程序之间共享的机密。在您的情况下,秘密就是QR码。只要身份验证器应用程序的另一个实例共享相同的密码和相同的时间(相同的30秒帧),两个应用程序将生成相同的密码。
Marc Plano-Lesay 2014年

2
当您要重置手机时,您可能仍要备份它,因此您不必花费一个小时去使用身份验证器的每个站点,输入备份代码并重置身份验证器设置。
pupeno 2014年

4
这仅适用于Google的两步验证。Google身份验证器可与许多其他站点配合使用,有些站点无法创建备份代码列表。有些使用SMS,有些给您一次性使用的备份代码,有些根本没有任何备份选项。即使每个站点都有备份选项,在购买新手机时也必须还原所有密钥,这是一个巨大的麻烦。
Laurence Gonsalves

21

Titanium Backup(链接到Google Play商店)将备份任何Android应用,包括Google Authenticator。但是,您必须先扎根手机,才能使其成为可行的选择。

我也建议您也打印Google备用代码。这并不是完全备份Google Authenticator应用程序,但是如果需要,它们将允许您重置身份验证器。不过,这只会有助于重新获得对您的Google帐户的访问权限。

我认为,使用Titanium Backup备份应用程序是最完整的选择。它在很多场合为我节省了时间。


必须解决这个问题,因为我无法adb提取数据库目录,无法复制到/ sdcard并接受它-chmod 777什么也没做。
Lauri Elias

“从Google Authenticator导入”-出售!非常重要的迁移功能。
Adambean '17

值得一提的是,为了不重新植根新手机。备份后,单击backup/restore选项卡->选择Authenticator应用程序->向右滑动special features选项卡->选择Explore-> accounts在下选择[DATABASE]。那么您将以.csv文件的形式获取应用程序中的所有帐户。使用该secret列将帐户还原到新手机。
Yan

19

我有同样的问题。

原来,原始令牌(通常以qrcode表示给用户)存储在/data/data/com.google.android.apps.authenticator2/databases文件夹内的sqlite数据库中,并且可以从设备中提取。

我在这里自动化并解释了恢复过程:https : //github.com/dchapkine/extract-google-authenticator-credentials

该项目提取原始令牌,然后生成一个带有qrcode的网页,您可以在新设备上重新扫描。

随时贡献。


1
这只是节省了我登录所有2FA帐户并手动切换电话的时间。非常感谢!
科瓦

这正是我想要的。重新扫描所有QR码的快速简便方法。
哈维

谢谢你,但我的设备没有被植根。我是否正确理解我手上存在“ Catch 22”情况,使设备生根可以将其擦干净?
urig

简直太棒了。但是在Windows 10 Bash上不起作用。
TranslucentCloud '18

@urig,不,某些手机的生根不一定会擦除应用程序数据。
TranslucentCloud '18

16

解决此问题的最简单方法是,每当您为站点设置新的Authenticator并将其保存在加密位置时,都要拍摄QR码的屏幕快照。

如果您需要重新安装该站点的身份验证器或将该站点的身份验证器添加到另一部手机,只需通过扫描屏幕快照中的QR码,就可以在身份验证器中添加帐户,就像您要建立一个新站点一样。

在您毫不犹豫地说这是行不通之前,是的,您可以在多个设备上使用相同的Authenticator。


2
我想解释一下为什么这种方法有效,网站和您的设备都将共享一个简单的字符串,即QR码中设置的“代码”,并且他们将根据该代码不断地使用它来创建新的6位数代码当前日期和时间。因此,您只需要使用此代码即可生成新代码。该网站无法检查谁或谁创建了6位代码,只需要正确无误即可。
阿里(Arie)

15

试试Authenticator Plus,它支持备份/还原功能,并且可以跨设备同步,如果您有手机/平板电脑,此应用程序可以完美同步它们之间的所有帐户,甚至还支持Android Wear。

它也有徽标支持 Authenticator Plus屏幕截图


13
或者,您可以使用免费的Authy(authy.com)。
2014年

5
Authy看起来很棒!比起Google,它不是开源的,它要好得多。我可以忍受。
cregox 2014年

17
这听起来不是个坏主意吗?基于时间的一次性密码协议(TOTP aka rfc6238,这是authy / google身份验证器等的实现)的要点是,您和您只有自己才能生成代码。如果您让某些第三方存储这些代码,它们将成为攻击的巨大目标,不必担心必须信任适用于此服务的每个人以及他们如何实现它。
antiduh 2015年

1
@antiduh当然是安全性与可用性的问题,如果您更关心安全性,它对您而言并不理想,那么您实际上应该远离软件解决方案,而应使用诸如yubikey之类的硬件解决方案
Riyaz Mohammed Ibrahim

7

设置或续订2FA时,可以保存QR码。您可以通过截屏保存QR。或者使用上下文菜单“将图像另存为”,但这并不总是可用。(确保为图像指定一个相应的名称,并在安全的位置备份该帐户)。要恢复,只需重新扫描Google Authenticator中的QR码即可。


4

作为序言,这是一种用于提前配置MFA的方法,以便始终对其进行备份,而不是恢复或备份现有代码。

Nexus 6P停止连接数据后,我才经历了这一过程,因此必须在Pixel上重新设置所有MFA。我意识到,如果我丢失了手机或重置了出厂数据,那我将完全无聊。

我想到的最简单的解决方案是忽略基于QR码的设置,而仅使用基于令牌的设置本身(这是大多数身份验证器应用程序中的“手动”选项)。到目前为止,我使用的每项服务都允许您选择基于令牌的设置,而不是QR。

与其花麻烦地拍摄QR码的屏幕快照,对其进行适当的标记,然后由GPG对其进行加密并将其安全地存储在某个地方,我只是将令牌存储在加密的保管库中,然后手动设置我的MFA。

我验证了您可以在同时运行的独立设备上使用相同的密钥来设置身份验证器的克隆。因此,只要您安全地控制令牌,就可以在任何设备上配置MFA。

我对这个结果感到满意,因为除了重新配置MFA(我在任何情况下都必须这样做)外,我只需要将所有令牌添加到lastpass即可。现在,我可以解决电话丢失的情况,并且可以根据需要配置其他设备。


2

对于有根电话,有很多建议。但是,如果您不想使设备易受攻击,则不建议您将其植根。两因素身份验证提供了额外的保护层,并且通过扎根将其变为零,因为不同的病毒可以访问受保护的内存区域。

只有少量服务提供备份代码(尤其是Google)。对于这些服务,您应该保存备份代码。

最好的解决方案是在注册令牌时保存QR码(或秘密密钥)并将其保存在安全的地方。然后,如果您丢失了手机,则可以在新设备上的Google Authenticator中恢复令牌。

另外,您可以使用硬件令牌。它们可以采用密钥卡或信用卡的形式。在Protectimus(我工作的公司)的博客上查看这篇文章,以获取更多有关如何备份Google Authenticator的信息:如何备份Google Authenticator或将其转移到新手机

* 披露:我在上面链接的网站上工作。


2
欢迎使用Android爱好者。我们注意到您隶属于上述链接。即使您在个人资料中声明了从属关系,请在答案中予以披露。进一步阅读:如何成为垃圾邮件发送者
Andrew T.

@AndrewT。做完了
iBug

1

以下方法仅适用于根植的Android设备。这种方法对于不太精通技术的人或像我这样的人来说更有用,他们不想浪费时间从头开始安装Android SDK + JDK只是为了运行adb命令。

所以这里是:

  1. 从Google Play商店下载并安装任何“ Root Explorer”应用。我使用流行且免费的FX文件浏览器及其免费的FX根目录访问插件。您也可以使用其他人。这个应用程序使我们能够以root用户身份访问Android系统。

  2. 在“系统根目录”中打开文件资源管理器后,单击“数据”文件夹>单击“数据”文件夹(在另一个数据文件夹内)>复制名为com.google.android.apps.authenticator2>退出系统根文件夹的文件夹>打开普通的主存储/ SD存储空间并粘贴文件夹在这里。

  3. 将您的android设备连接到PC,然后将文件夹备份到安全的USB /外部HDD。

而已。现在,每当您需要重新安装固件/购买新手机时,请按照上述步骤操作,并在安装Google身份验证器应用程序后将该文件夹复制到完全相同的目录中。

或者,您可以使用免费的开源SQLite GUI编辑器(如“ SQLite数据库浏览器可移植”)打开“ com.google.android.apps.authenticator2”文件夹中的“数据库”文件。在“浏览数据”标签中,您可以查看密钥和与该密钥相对应的名称,以便可以将密钥手动输入到Google Authenticator应用中。


@Izzy编辑了主观部分,并感谢您的帮助:)该方法看起来很大,但对于那些不是android开发人员的普通人来说,这是最省时的方法。在我自己找到解决方案之前,我实际上查看了此线程。备用码-不适用于大多数服务(仅适用于Google)。Authenticator Plus是一款付费应用。Titanium备份可能存在兼容性问题。ADB pull命令需要您安装Android SDK + JDK。我的方法就像复制粘贴文件夹一样“简单”。
帕文·约瑟夫2014年

感谢您的编辑,Pavin!关于您的评论,我必须部分不同意:我从未安装过SDK + JDK,但仍然使用了许多ADB功能(尤其是使用我自己的工具“ Adebar ”来获取设备文档,备份/还原脚本等等) )。在Linux上,我只需要adb可执行文件(在Windows上,另外.dll需要两个文件)。有关详细信息,请参阅是否有ADB的最小安装?
伊兹

PS:曾经有任何许可问题吗?将应用程序的数据目录手动复制到另一台设备可能会出现这种情况。请记住,要正确访问文件,权限和所有权必须匹配。在安装时,每个应用程序都分配有唯一的UID / GID对。文件权限具有所有者/组/其他人的标志。通常,应用程序数据的最大数量-rw-rw--(所有者和组的读/写,其他没有)。因此,如果所有权不匹配,您可能会遇到麻烦(并且该应用可能行为不当)。
伊兹

是的,它在大多数时间都有效。但是,如果没有,则可以使用任何SQLite编辑器打开并查看数据库文件中的密钥;然后使用键在Google Authenticator中添加帐户。
帕文·约瑟夫2014年

啊。更好的解决方案:如果它不起作用,请检查并调整权限。覆盖之前/data/data/com.google.android.apps.authenticator2ls -l对其进行检查,然后检查所有权/权限。复制后,使用chownchmod修复它。
伊齐

1

在有根电话上,您可以使用“ Amaze”文件管理器(https://play.google.com/store/apps/details?id=com.amaze.filemanager&hl=zh-CN)。转到根目录/data/data/com.google.android.apps.authenticator2/database。打开数据库文件作为数据库。选择帐户。您将有3列_id,电子邮件和密码。复制“秘密”值。当您需要恢复时,只需添加,请选择“输入提供的密钥”,为其命名并粘贴值。


0

正如我在一段时间之前经历过的一样。当您登录自己的帐户时,您将获得用于输入6位数字代码的密钥页面。如果您已经验证过任何号码,则可以在此位置更改第二个键并获取电话号码。为了获得更多备份,您可以选择其他计算机作为信任计算机。因此,他们不会在这些计算机上询问第二步代码。


0

这是我网站上简单Python脚本的链接:http : //usefree.com.ua/google-authenticator-backup/

您只需粘贴代码并在Python环境中运行它们。

这个怎么运作:

在使用Google Authenticator设置和配置两因素身份验证期间,不仅可以扫描QR码,还可以获得代码,例如,对于Google Mail,我们得到:csnji4rfndisoh323fdsioah3u2iodso。为了使用Python IDLE在计算机上生成TOTP,您可以定义以下函数:

def totpgen ():
    import time
    import hmac
    import hashlib
    import base64

    ### TOTP-key for Google
    #secret = base64.b32decode("csnji4rfndisoh323fdsioah3u2iodso", True)
    #totp for btc-e
    #secret = base64.b32decode("DHSJHDW89E8DFUS98RIO23J390EFU234IR90WEUIF903DMSKAKDS====")
    ### Calc counter from UNIX time (see RFC6238) 
    counter = long(time.time() / 30)

    ### Use counter as 8 byte array
    bytes=bytearray()
    for i in reversed(range(0, 8)):
      bytes.insert(0, counter & 0xff)
      counter >>= 8

    ### Calculate HMAC-SHA1(secret, counter)
    hs = bytearray(hmac.new(secret, bytes, hashlib.sha1).digest())

    ### Truncate result (see RFC4226)
    n = hs[-1] & 0xF
    result = (hs[n] << 24 | hs[n+1] << 16 | hs[n+2] << 8 | hs[n+3]) & 0x7fffffff

    ### Print last 6 digits
    return str(result)[-6:]

插入行

secret = base64.b32decode("csnji4rfndisoh323fdsioah3u2iodso", True)

您的代码而不是 "csnji4rfndisoh323fdsioah3u2iodso"

取消注释行,然后拨打IDLE

totpgen ()

您将获得TOTP!)对于服务btc-e,请尝试使用line

secret = base64.b32decode("DHSJHDW89E8DFUS98RIO23J390EFU234IR90WEUIF903DMSKAKDS====")

对于其他服务-如上所述。


2
您能否包括相关代码并解释如何使用它?(例如,此代码的作用是什么?将“什么”代码粘贴到何处?不是每个人都懂俄语)。不鼓励仅链接的答案,因为如果链接腐烂,那么就没有任何用处了。(此外,如果您打算推广您的博客,则需要进行披露。否则,可能会被视为纯粹的垃圾邮件推广)。
安德鲁·T。

1
不要成为垃圾邮件发送者,并在链接本身旁边清楚,明显地提及您的网站。
Nic Hartley
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.