V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
click
V2EX  ›  问与答

有没有靠谱的 2FA 验证器推荐?

  •  
  •   click · 2024-01-12 01:40:40 +08:00 · 3635 次点击
    这是一个创建于 373 天前的主题,其中的信息可能已经有所发展或是发生改变。
    被 Microsoft Authenticator 坑惨了!
    最近换机发现 Microsoft Authenticator 没法跨平台备份/恢复,iOS 平台和安卓平台不互通。

    需求:
    1.支持跨平台备份/恢复。
    2.不用翻墙。
    38 条回复    2024-01-27 00:08:42 +08:00
    TossPig
        1
    TossPig  
       2024-01-12 02:30:38 +08:00   ❤️ 2
    Vaultwarden
    xinge666
        2
    xinge666  
       2024-01-12 03:29:52 +08:00 via iPhone   ❤️ 1
    https://2fas.com/

    全平台,还支持浏览器插件
    BigShot404
        3
    BigShot404  
       2024-01-12 03:46:01 +08:00
    我用 Authy

    https://authy.com/
    ladypxy
        4
    ladypxy  
       2024-01-12 04:52:16 +08:00 via iPhone
    Authy
    ab
        5
    ab  
       2024-01-12 05:32:58 +08:00
    google authenticator + 苹果密码
    前者扫完再用 ios 相机也扫一次。
    后者既可当做备份也可以方便 safari 使用。
    bobryjosin
        6
    bobryjosin  
       2024-01-12 07:05:21 +08:00 via Android
    yubico authenticator 需要你有一个 yubikey ,全平台都有客户端,离线不联网,代价是出门需要额外带一个硬件,丢失损坏不能恢复存储的 2fa ,我一般是两个 yubikey+authy 都存一份。
    SenLief
        7
    SenLief  
       2024-01-12 07:27:42 +08:00   ❤️ 1
    密码管理器不是都带 totp
    arfaWong
        8
    arfaWong  
       2024-01-12 08:04:16 +08:00
    自建 bitwarden
    gletec
        9
    gletec  
       2024-01-12 08:05:31 +08:00 via Android
    密码管理器自带 totp 记录。而且很多是支持自动填入的,都不需要你自己手动输入。
    netnr
        10
    netnr  
       2024-01-12 08:24:21 +08:00 via Android
    在用 Aegis ,而且可以导出
    uuhhme
        11
    uuhhme  
       2024-01-12 08:24:37 +08:00 via Android
    ente 跨平台,支持导出二维码,现在用的挺好。同时 iCloud 钥匙串备份一份,无忧
    qistchan
        12
    qistchan  
       2024-01-12 08:43:58 +08:00
    自建 bitwarden+1 ,自带 TOTP
    surbeta
        13
    surbeta  
       2024-01-12 08:48:56 +08:00
    Authy,用了很多年了
    n2l
        14
    n2l  
       2024-01-12 09:19:46 +08:00
    Authy PC 版好像得挂代理才能上去。
    lisxour
        15
    lisxour  
       2024-01-12 09:41:31 +08:00
    可以手动导出,https://www.v2ex.com/t/979314
    vacuitym
        16
    vacuitym  
       2024-01-12 09:54:57 +08:00
    用的 Google 的
    zjcoding
        17
    zjcoding  
       2024-01-12 10:04:24 +08:00
    google ,可以导入导出
    youngkingdom
        18
    youngkingdom  
       2024-01-12 10:05:49 +08:00
    自建 bitwarden+1
    woshicixide
        19
    woshicixide  
       2024-01-12 10:06:48 +08:00
    用的微软的 authenticator
    wuxiao2522
        20
    wuxiao2522  
       2024-01-12 10:07:04 +08:00
    Authy
    woshicixide
        21
    woshicixide  
       2024-01-12 10:08:19 +08:00
    被你这么一说也想换了
    lw0717
        22
    lw0717  
       2024-01-12 10:09:31 +08:00
    我也被 Microsoft Authenticator 坑过,换了 Google 的
    nothingistrue
        23
    nothingistrue  
       2024-01-12 10:16:29 +08:00
    Microsoft Authenticator Q&A 第一个就是,不能在 Android 和 iOS 之间切换。事实上你刚开始看到 iOS 备份需要 icloud ,Android 备份不需要,就该猜到两个平台之间的备份是独立的。Microsoft Authenticator 的 2FA 只是附加功能,它的主功能是 Microsoft Account 的免密登录器,这是物理密钥,它的「备份/恢复」不是复制粘贴,而是密钥迁移,这要想跨平台就太为难了。

    TOTP 2FA ,虽然技术上不是物理密钥(它的密钥可以随意复制),但你最好还是别搞什么跨平台同步。想要跨平台同步就没法用平台私有的文件系统加密防护,同步服务商只能在自己的服务端用主密码来保护密钥(不负责人的甚至会明文存储密钥),一旦服务商发生泄漏你就乐开花了——重置 2FA 可比重置密码的操作繁琐多了。

    最好还是各用各的,这样除了安全性高之外,还天然给你的众多 2FA 多了一套备份。 Microsoft Authenticator 是使用相同的主帐号来在多个设备中断上各用各的的。
    weidaizi
        24
    weidaizi  
       2024-01-12 10:30:03 +08:00
    https://github.com/MuggleWei/yoauth

    我用自己写的,一个本地的,纯命令行终端下的 TOTP generator ;支持 linux/windows/mac/android ,要备份直接复制本地数据文件就 ok 了
    ztxcccc
        25
    ztxcccc  
       2024-01-12 10:31:57 +08:00
    歪一下楼,之前谷歌那个更新了以后很多人反馈同步有问题,现在解决了吗?我还在用很旧的版本
    mikaelson
        26
    mikaelson  
       2024-01-12 10:40:25 +08:00
    我倒是想问有没有能自动填充的?
    虽然用的浏览器插件,但是每次都要点一下。。。。

    还有就是,比如 jumpserver 这一类的跳板机,有办法在用本地 ssh 客户端的时候也能自动填充吗。。。太麻烦了
    mhqschen
        27
    mhqschen  
       2024-01-12 10:44:54 +08:00
    @woshicixide #19 那么多血淋淋的案例,怎么还敢用
    click
        28
    click  
    OP
       2024-01-12 10:46:27 +08:00
    @gletec
    @arfaWong
    @qistchan
    @youngkingdom
    感谢回复。bitwarden 的 TOTP 是要付费的吧
    click
        29
    click  
    OP
       2024-01-12 10:48:29 +08:00
    @ab
    @vacuitym
    @zjcoding
    感谢回复。Google 要翻墙。虽然说我可以翻,但也不是一直挂着
    arfaWong
        30
    arfaWong  
       2024-01-12 11:07:01 +08:00
    @click #28 自建的就是免费用的
    MuSeCanYang
        31
    MuSeCanYang  
       2024-01-12 11:20:04 +08:00
    2 FAS
    zjcoding
        32
    zjcoding  
       2024-01-12 11:49:48 +08:00
    @click #29 不用啊,只是下载的时候需要,用的时候不需要联网的
    qistchan
        33
    qistchan  
       2024-01-12 13:47:50 +08:00
    @click 自建的免费
    NoOneNoBody
        34
    NoOneNoBody  
       2024-01-12 13:54:43 +08:00
    import pyotp
    totp = pyotp.TOTP(...)
    print(totp.now())
    CodeCodeStudy
        35
    CodeCodeStudy  
       2024-01-12 14:42:55 +08:00
    php 的代码,不依赖第三方库

    ```php
    <?php

    class TOTP {
    private static $base32Map = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';

    private static function base32Decode($in) {
    $l = strlen($in);
    $n = $bs = 0;

    for ($i = 0; $i < $l; $i++) {
    $n <<= 5;
    $n += stripos(self::$base32Map, $in[$i]);
    $bs = ($bs + 5) % 8;
    @$out .= $bs < 5 ? chr(($n & (255 << $bs)) >> $bs) : null;
    }

    return $out;
    }
    public static function getOTP($secret, $digits = 6, $period = 30, $offset = 0) {
    if (strlen($secret) < 16 || strlen($secret) % 8 != 0)
    return ['err' => 'length of secret must be a multiple of 8, and at least 16 characters'];
    if (preg_match('/[^a-z2-7]/i', $secret) === 1)
    return ['err' => 'secret contains non-base32 characters'];
    $digits = intval($digits);
    if ($digits < 6 || $digits > 8)
    return ['err' => 'digits must be 6, 7 or 8'];

    $seed = self::base32Decode($secret);
    $time = str_pad(pack('N', intval($offset + time() / $period)), 8, "\x00", STR_PAD_LEFT);
    $hash = hash_hmac('sha1', $time, $seed, false);
    $otp = (hexdec(substr($hash, hexdec($hash[39]) * 2, 8)) & 0x7fffffff) % pow(10, $digits);

    return ['otp' => sprintf("%'0{$digits}u", $otp)];
    }
    }

    echo TOTP::getOTP('xxx')['otp'];
    ```
    LCD
        36
    LCD  
       2024-01-12 20:43:33 +08:00 via Android
    试一下,freeotp
    sayoll
        37
    sayoll  
       2024-01-15 13:21:50 +08:00
    click
        38
    click  
    OP
       358 天前
    感谢大家的回复,最后我还是用回了 MS Authenticator 。因为微软账户好像只支持 MS Authenticator
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1024 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 19:38 · PVG 03:38 · LAX 11:38 · JFK 14:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.