AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1845383
Accepted
Manngo
Manngo
Asked: 2024-06-10 16:54:46 +0800 CST2024-06-10 16:54:46 +0800 CST 2024-06-10 16:54:46 +0800 CST

身份验证器如何工作?

  • 772

(如果这不是正确的网站,请告诉我……)

在为 GitHub 和其他网站选择身份验证应用程序时,我最终选择了 Sophos,因为,为什么不呢。显然,我可以选择 Google 应用程序或其他应用程序。

这表明它们基本上都在做同样的工作,而且该网站并不特别关心我使用哪个应用程序。我当然没有告诉网站我正在使用哪个应用程序,所以这表明它相当中立。

这是如何工作的?是否有一个身份验证中心点,还是它们都遵循相同的算法,或者是否有一个可接受的身份验证器列表?

security
  • 3 3 个回答
  • 923 Views

3 个回答

  • Voted
  1. Best Answer
    grawity_u1686
    2024-06-10T17:04:26+08:002024-06-10T17:04:26+08:00

    大多数此类应用程序遵循相同的算法,OATH TOTP(如 IETF RFC 6238 中所定义)。

    它完全离线工作——您扫描的二维码包含一个密钥,6 位代码由此密钥与当前时间戳(四舍五入到最接近的半分钟)组合而成。因此,相同的代码可以导入到多个应用程序,只要时钟匹配,它们就会完全独立地生成相同的代码。

    (也有例外;例如 RSA SecurID 在过去很常见,OATH HOTP 是一种罕见的可能性——基于计数器而不是基于时间——并且一些应用程序出于历史原因或其他原因使用自己的算法,但 OATH TOTP 是网络上普遍接受的算法。)


    算法的核心就是HMAC_SHA1(secret_key, timestamp)。大多数网站都有以文本格式而不是二维码显示密钥的选项,然后您可以使用oathtool或hotpie进行实验。(确保不要遗失密钥。)

    $ oathtool --base32 --totp ABCDEFG
    534266
    

    QR码包含otpauth://totp/USER?secret=ABC&issuer=SITE,即相同的密钥加上输入标签(仅用于显示目的)。

    $ qrencode“otpauth://totp/User?secret=ABCDEFG&issuer=Demo”
    
    
    
    • 14
  2. Journeyman Geek
    2024-06-10T17:03:39+08:002024-06-10T17:03:39+08:00

    简而言之 - 它们以相同的方式生成代码。我相信TOTP是这里的“标准”。现代、始终在线系统的优点之一是您可以获得可靠的时间同步 - 使用它和私钥(包含在他们让您扫描的二维码中)以及相同的算法,您可以生成可预测的一次性密钥,而无需中央身份验证点。

    这也意味着在理论上(和实践上),您可以将密钥导出到另一个设备/TOTP 客户端,只要您的时钟合理准确,它就可以工作。

    如果记忆不错的话,他们会使用您第一次提供的 OTP 来确认它是“正确的”时间和密钥,但我对此并不完全确定。

    • 7
  3. Austin Hemmelgarn
    2024-06-11T04:24:58+08:002024-06-11T04:24:58+08:00

    所有经过适当保护的双因素身份验证系统背后的核心概念都涉及用户使用某些无法合理复制的先前商定的机制来证明其身份。

    大多数“身份验证器”应用使用的特定机制称为 TOTP(基于时间的一次性密码)。这是旧机制 HOTP(HMAC 一次性密码)的改良版本。任一机制的设置工作方式如下。

    1. 当用户请求某项服务启用 2FA 时,该服务会生成一个用于身份验证的密钥。生成密钥的具体细节在这里并不重要,从功能上讲,您可以将密钥视为介于 0 和某个任意大数之间的随机数。
    2. 然后,该服务会与用户共享此号码,通常是通过使用该otpauth://方案编码特殊 URL 的二维码。此细节对于讨论来说也不是特别重要,只需知道它以身份验证器设备可以读取的方式对机密(以及有关网站本身的信息)进行编码即可。
    3. 一旦身份验证器读取了秘密,它会将其(希望)与有关帐户提供商的信息一起安全地存储(并且通常会有一些小注释,以提醒用户如果用户在该提供商处拥有多个帐户,则是哪个帐户)。
    4. 然后,服务器(希望)安全地存储秘密并将其与用户帐户关联。此时,它可能会请求一个或多个代码以确保一切正常(并且,在 HOTP 的情况下,确保计数器同步,但稍后会详细介绍)。

    完成后,身份验证器将配置为向该帐户提供代码。实际使用身份验证器的流程如下:

    1. 当要求输入代码时,身份验证器首先会查询内部计数器。对于 HOTP,这是一个简单的计数器,对于给定帐户生成的每个代码,计数器都会加一。对于 TOTP,它是一个自 UNIX 纪元以来以秒为单位计算的时间戳。
    2. 确定计数器后,认证器将检索秘密,将其与计数器相结合,然后为该组合生成散列消息认证码(典型的实现为此使用 SHA-1,但可以使用任何加密安全的散列算法)。
    3. 如果使用 TOTP,则会显示当前代码的超时时间,一旦超时就会生成一个新的代码。

    服务器做完全相同的事情来验证代码。

    需要注意的是,一旦配置了身份验证器,除了用户在提示时输入代码外,身份验证器和服务器之间没有任何通信,并且服务器与身份验证器之间根本没有通信。这一点非常重要,这也是为什么HOTP和 TOTP 通常被认为是安全的,而基于短信或电子邮件的 2FA 通常不安全的原因。

    另外值得注意的是,HOTP 和 TOTP 都有一些固有的局限性:

    • HOTP 要求客户端和服务器保持计数器同步。如果它们不同步(通常是由于用户生成多个代码而不使用它们),则代码将停止工作。许多服务器将自动处理客户端领先于服务器的特定情况(最高可达某个限制),并将计数器推进到所用代码的计数器,但这仍然需要处理,并且会给服务器增加不小的处理开销。
    • TOTP 要求客户端和服务器在时间上达成相对一致的共识,并且用户在代码过期之前使用该代码。对于任何连接互联网的客户端,第一个问题通常都可以解决,但第二个问题比较棘手,通常意味着服务器会在代码过期后的一段时间内接受该代码。基于时间的特性还意味着您需要锁定以防止代码重用,这在功能上限制了成功的身份验证尝试的速率(这对于任何实际用例来说都不是问题,实际上可以稍微提高安全性,但这是一个限制)。

    一些系统使用类似于 TOTP 或 HOTP 的方法,但使用不同的算法,通常是出于遗留原因。一个特别突出的例子是 Valve 的“Steam Guard Mobile Authenticator”,它在功能上使用 TOTP,但完全自动化设置,并使用不同的机制从哈希算法输出中获取代码。


    作为参考,另一个广泛使用的主流安全 2FA 实现是 FIDO2,它的工作方式略有不同,但仍然依赖于用户通过执行只有他们才能做的事情来证明其身份的概念(FIDO2 不是生成代码,而是使用先前在服务器上配置的密钥对身份验证质询进行数字签名,由于几个原因,它在技术上比 TOTP 更安全)。

    • 2

相关问题

  • VirtualBox 下载被阻止并显示安全警告

  • 查找通过网络上的“c$”访问我的文件夹的日志会话

  • Wifi IDS——监控模式与混杂模式——查看东西方流量

  • 删除子块

  • 校验和失败——Fedora 29 或旋转 KDE Plasma

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    Vickel Firefox 不再允许粘贴到 WhatsApp 网页中? 2023-08-18 05:04:35 +0800 CST
  • Martin Hope
    Saaru Lindestøkke 为什么使用 Python 的 tar 库时 tar.xz 文件比 macOS tar 小 15 倍? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve