• home > theory > algorithm > encryption >

    双因子认证(2FA)

    Author:zhoulujun Date:

    自2023年3月13日起,我们登录 GitHub 都会看到一个要求 Enable 2FA 的重要提示,具体如下:GitHub users are now required to e

    自2023年3月13日起,我们登录 GitHub 都会看到一个要求 Enable 2FA 的重要提示,具体如下:

    GitHub users are now required to enable two-factor authentication as an additional security measure. Your activity on GitHub includes you in this requirement. You will need to enable two-factor authentication on your account before May 04, 2023, or be restricted from account actions.

    GitHub 开启 2FA

    GitHub 用户现在需要启用 2FA 双因素身份验证作为附加的安全措施。

    官方给出的解释是,GitHub 是软件供应链的核心,确保软件供应链的安全要从保护开发人员开始。因此我们正在推进 2FA 计划,通过提高账户安全性来保护软件开发。开发人员的账户是社会工程和账户接管(ATO)的常见目标。保护开源生态系统的开发人员和消费者免受此类攻击是确保供应链安全的第一步,也是最关键的一步。

    据 GitHub 博客报道,2021 年 11 月,由于未启用 2FA 的开发者账户遭到入侵,有不少 npm 包被接管。

    此外,早期也有不少安全研究人员透露,其可以直接访问 14% 的 npm 包(或者间接访问 54% 的包)。

    还有媒体报道,曾被黑客入侵的 Microsoft 账户中,有 99.9% 未启用 2FA。




    什么是 2FA

    双因子认证 (Two-factor authentication,缩写为:2FA) 是一种身份验证方法,要求用户提供密码和另一个认证因子或者至少提供两个认证因子(代替密码),才能访问网站、应用程序或网络。 例如,网上银行应用程序要求用户输入密码和通过短信发送到手机上的验证码时,就使用了 2FA。

    由于破解第二个认证因子需要付出更多,并且其他类型的因子更难以窃取或伪造,因此 2FA 可提高帐户安全性,并更好地保护组织及其用户免遭未经授权的访问。

    2FA 是一种最常用多因子认证 (MFA) – 要求用户提供密码和至少一个认证因子或至少提供两个认证因子来代替密码。

     Two Factor Authentication

    比较知名的2FA提供者有Google的Google Authenticator以及亚马逊的IAM服务。


    2FA 中使用的认证因子类型

    双因子认证通过两种方式来降低未经授权访问的风险。 

    1. 黑客需要破解的不仅是一个而是两个因子。

    2. 2FA 需要的至少一个因子比密码更难破解。

    任何 2FA 方案的强度最终取决于它要求用户提供的认证因子类型。

    知识因素:用户知道的信息

    在绝大多数 2FA 实现中,知识因子是第一个认证因子

    知识因素

    从理论上说,知识因子是只有用户知道的一些信息。 密码是最常见的知识因子;其他知识因子还包括个人身份识别码 (PIN) 和回答安全问题。

    尽管它们被广泛使用,但一般来说,知识因子是最容易受到攻击的认证因子,尤其是密码。 黑客可以通过以下方式获取密码和其他知识因子:网络钓鱼攻击;在用户设备上安装击键记录器或间谍软件;或者运行脚本或机器人来生成和测试潜在密码,直至找到适用的密码。

    破解其他知识因子的难度并不大。 一些安全问题的答案,例如,“你母亲的娘家姓是什么?”, 可以通过基础研究或社会工程攻击轻松破解,方法是黑客诱骗用户泄露个人信息。 其他安全问题 — 例如,“你的蜜月在哪里度过?”, 可能相对容易被猜到。 泄露的凭据是 2021 年最常被利用的初始攻击媒介,在所有数据泄露中占 20%,这也就不足为奇了。

    需要注意的是,输入密码和回答安全问题的仍然是普遍做法 ,这是知识因子,而不是2FA;属于两步认证。 真正的 2FA 要求两种不同的类型的认证因子。

    占有/持有因素:用户拥有的东西

    占有因子是用户随身携带的包含认证所需信息的物理对象。 占有因子分为两种:软件令牌和硬件令牌。

    如今,大多数软件令牌都是一次性密码 (OTP)  — 通过 SMS 文本消息(或电子邮件或语音消息)发送到用户手机的有时效的 4 到 8 位数密码,或者由手机上安装的认证应用程序生成。 认证应用程序可在没有互联网或手机网络连接的情况下生成令牌。 用户通过扫描服务提供商显示的二维码将应用程序与帐户配对;然后,应用程序会为每个帐户持续生成基于时间的一次性密码 OTP (TOTP) 或其他软件令牌,通常每 30-60 秒生成一次。 最常用的认证应用程序包括 Google Authenticator、Authy、Microsoft Authenticator、LastPass Authenticator 和 Duo,这些都使用推送通知而不是 TOTP。

    硬件令牌是将密钥卡、身份证、硬件加密锁等专用设备作为安全密钥使用 。 一些硬件令牌插入计算机的 USB 端口,并将认证信息传输到登录页面;还有一些会生成安全代码,供用户在出现提示时手动输入。

    与知识因子相比,占有因子具有多项优势。 黑客为了冒充用户,在登录时,需要拥有物理设备或拦截对设备的传输,才能在 OTP 或 TOTP 过期之前获取。

    但占有因子并非不可破解。 物理令牌和智能手机可能会被盗或放错位置。 虽然 OTP 和 TOTP 比传统密码更难窃取,但它们仍然容易受到复杂的网络钓鱼或中间人攻击。 OTP 容易受到"SIM 克隆"的影响,这种攻击会创建受害者智能手机 SIM 卡的功能副本。

    固有因素:用户作为人所独有的特征

    固有因子(也称为生物特征)是用户独有的物理特征,例如指纹、声音、面部特征或虹膜和视网膜图案。 如今,许多移动设备都可以使用指纹或面部识别来解锁;而一些计算机可以使用指纹将密码输入到网站或应用程序中。

    固有因子是最难破解的因子:因为它们不会被遗忘、丢失或放错地方,而且非常难以复制。 但这并不意味着它们是万无一失的。 如果将固有因子存储在数据库中,那么它们就可能会被窃取。 例如,在 2019 年,一个包含 100 万用户指纹的生物特征数据库遭到了攻击。 从理论上讲,黑客可以窃取这些指纹,也可以将他们自己的指纹与数据库中另一个用户的个人资料链接在一起。

    当生物特征数据遭到攻击时,无法快速或轻松地对这些数据进行更改,因此受害者难以阻止正在进行的攻击。

    行为因素:用户所做的事情

    行为因子是根据行为模式验证用户身份的数字工件。 行为因子的例子包括 IP 地址范围或用户通常用于登录到应用程序的位置数据。

    行为认证解决方案使用人工智能来确定用户正常行为模式的基线,然后标记异常活动,例如使用新的设备、电话号码、网络浏览器或位置进行登录。 一些 2FA 实现利用行为因子,允许用户将可信设备注册为认证因子。 虽然用户可能需要在第一次登录时手动提供两个因子,但使用的可信设备将在未来自动成为第二个因子。

    行为因子通常用于自适应认证,也称为“基于风险认证”。 在此系统中,当风险发生变化时,例如,用户尝试从不受信任的设备登录,首次尝试访问应用程序或尝试访问特别敏感的数据时,认证要求会发生变化。 自适应认证方案通常允许系统管理员为每种类型的用户或角色设置单独的认证策略。 低风险用户可能只需要两个因子即可登录,而高风险用户(或高度敏感的应用程序)可能需要三个或更多因子。

    虽然行为因子可以提供复杂的用户认证方式,但它们需要大量资源和专业知识才能进行部署。 此外,如果黑客获得对可信设备的访问权限,他们可以将其用作认证因子。

    位置因素: 

    通常基于用户尝试验证其身份时的所在位置。组织可以限制位于特定位置的特定设备进行身份验证尝试,具体取决于员工登录到其系统的方式和位置。 

    时间因素:

    此因素将身份验证请求限制在特定时间内,只有在此时间内用户才能登录到服务。此时间之外的所有访问尝试将被阻止或限制。 



    如何实现 2FA

    双重身份验证 (2FA) 是一种安全流程,可以提高一个人身份的真实性。该流程会请求用户在访问应用程序或系统之前提供两个不同的认证因素,而不是简单地提供他们的用户名和密码。

    双重认证流程:

    • 第 1 步: 用户登录应用程序或网站。 然后,系统会要求他们使用凭证登录。 

    • 第 2 步: 用户输入登录凭证,通常是账号和密码,做初始身份验证。 应用程序或网站确认详细信息,并确定是否已输入正确的初始身份验证详细信息。 

    • 第 3 步: 验证成功,然后将提示用户提交第二个身份验证因素。
      该因素通常是持有因素,也就是仅他们拥有的事物。例如,应用程序或网站将向用户的移动设备发送唯一的代码。

    • 第 4 步: 用户将代码输入至应用程序或网站,如果代码通过,用户将通过身份验证并被授予系统访问权限。

    这就是2FA的全过程,其中3/4步就是第二次验证,二次认证的方式也有很多,下面就是常见的几种。

    二次认证的方式:

    • 硬件令牌:就是通过硬件生成一个token,二次登录使用这个token认证。

    • 软件令牌:就是通过一个app或者软件,生成一个token,二次登录使用这个token认证。
      比如Google Authenticator就是提供这样服务的软件。

    • 短信(SMS)/ 邮件 (Email):发送短信验证码认证,国内比较常见。

    • 其他:比如微信扫码、人脸识别等等。

    一般我们实现 Two Factor Authentication 需要做如下操作,

    1. 修改原有的登录业务逻辑

    2. 提供新的登录界面,替换原有的登录界面

    3. 能够生成token以及验证token

    比较知名的2FA提供者有Google的Google Authenticator以及亚马逊的IAM服务。






    参考文章:

    2FA(双因子认证) https://www.ibm.com/cn-zh/topics/2fa

    GitHub 开启 2FA 双重身份验证的方法 https://blog.csdn.net/lu_embedded/article/details/130382055

    https://www.fortinet.com/cn/resources/cyberglossary/two-factor-authentication#:~:text=双重身份验证定义,用户的重要安全工具。



    转载本站文章《双因子认证(2FA)》,
    请注明出处:https://www.zhoulujun.cn/html/theory/algorithm/encryption/9038.html