文章前言
密码作为我们平时最常使用的用户身份验证方式有其便捷性,但是仔细思考你也不难发现其中存在着较多的安全问题。首先我们的密码是由用户自我定义设置的,期间不排除用户设置弱口令密码或者使用键盘布局的脆弱密码(当然部分考虑安全的系统会制定对应的密码策略对其进行限制),其次即便我们使用了极为复杂的密码,也不能完全规避\\”社工钓鱼\\”和\\”中间人\\”攻击等威胁,攻击者可以通过脱浏览器端的凭据信息等方式获取用户的密码,再者就是用户都有一个特征就是\\”惰性\\”,很多用户在多个网站可能会使用同一个登录密码,故此攻击者可以通过找寻被泄露的账户密码获取到真实的账户密码信息并实现登录操作,基于以上多个风险层面,我们接下来对用户的身份认证进行简易的探讨并结合业务、测评等维度给出关联的安全设计
身份认证
身份认证是一种确定用户身份的过程,它使系统能够验证用户是否具有访问特定资源或者执行敏感操作的权限,在认证过程中用户需要提供身份因子来进行认证,常见的身份认证因子有以下几种:
-
知识因素: 用户知道的信息,比如:常见的密码、个人识别码(PIN))或密码、预先设定的安全问题答案
-
持有因素: 用户拥有的事物,比如:硬件令牌、智能卡、手机、USB密钥,通过设备上的特定代码、令牌或证书来证明身份
-
生物因素:用户个人特质或特征,比如:指纹识别、面部识别、语音识别,以及诸如击键特征和语言模式等行为生物识别特征
-
位置因素:用户个人所处的位置,比如:组织可以限制位于特定位置的特定设备进行身份验证尝试,具体取决于员工登录到其系统的方式和位置
-
时间因素:用户在特定时间内的请求,比如:在限定时间内用户才能登录到服务,此时间之外的所有访问尝试将被阻止或限制
2FA认证
基本介绍
双因子认证(Two-Factor Authentication,2FA)是一种身份验证方法,要求用户提供两个独立的身份验证因素来确认其身份,其中的第一个身份因素即为\\”What you know(你知道的东西)\\”,第二个身份因素即为\\”What youhave(你所拥有的东西)\\”或者\\”What you are(你所具有的特征)\\”,双因子认证与传统的用户名和密码认证相比提供了更高的安全性,因为攻击者需要同时获取两个因素才能成功通过身份验证
认证流程
双因子身份认证的工作流程大致如下:
-
用户发起登录或敏感操作:用户在登录网站、应用程序或进行敏感操作时触发身份验证过程
-
用户提供第一个身份因素:用户提供第一个身份验证因素,通常是用户名和密码
-
第一个身份因素验证操作:系统接收到用户名和密码后,验证这些凭据是否正确。如果验证成功,将继续进行下一步
-
用户提供第二个身份因素:用户需要提供第二个身份验证因素,通常是物理设备上的代码、令牌或证书
-
第二个身份因素验证操作:系统接收到第二个因素后,验证其与用户账户关联的信息是否匹配
-
用户双因子身份验证通过:如果第一因素和第二因素均验证通过,则用户的身份得到确认,可以继续访问账户或执行敏感操作
OTP技术
OTP(One-Time Password,一次性密码)技术是一种常见的身份验证方法,用于在每次身份验证过程中生成一次性的、临时的密码,该密码只能在特定时间段内使用并且在使用后立即失效,提供了额外的安全性保护
OTP的工作流程如下:
-
用户在进行身份验证时,系统会生成一个基于OTP算法的一次性密码
-
系统将该密码发送给用户通过预先配置的通信渠道(例如:短信、电子邮件、身份验证应用程序等)
-
用户在身份验证过程中输入所接收到的一次性密码
-
系统验证用户输入的密码是否与生成的密码匹配,从而验证用户的身份
OTP的实现方式主要有以下几种:
-
时间同步OTP(Time-based OTP,TOTP):基于时间的OTP使用时钟同步机制生成一次性密码,用户和系统之间共享一个密钥,结合当前时间生成密码,常见的实现包括Google Authenticator和Microsoft Authenticator等应用程序
-
基于计数器的OTP(HMAC-based OTP,HOTP):基于计数器的OTP,使用哈希算法生成一次性密码,用户和系统之间共享一个密钥和计数器,每次使用时计数器增加,常见的实现包括YubiKey硬件令牌
认证实现
下面是几种常见的双因子认证实现技术:
软件令牌
实现方式:用户在登录时会收到一条包含验证码的短信,系统会将用户输入的验证码与发送到用户手机的验证码进行比对,如果验证成功则允许进行下一步操作
简易示例:当用户登录谷歌账户时谷歌身份验证器应用程序会生成一个动态验证码,用户需要在登录过程中输入正确的验证码以完成身份验证
硬件令牌
实现方式:硬件令牌通常是一个小型的物理设备,用户需要按下按钮或通过其他方式激活令牌,生成一次性的动态验证码
简易示例:中国银行的U盾身份认证
SMS 2FA
实现方式:用户尝试登录应用程序或服务时会用到短消息服务(SMS)和文本消息2FA因素,SMS消息将被发送到用户的移动设备,其中包含用户随后输入到应用程序或服务的唯一代码,银行和金融服务部门曾使用这类2FA因素,用于验证客户在线银行账户的购买和变更情况,但是考虑到文本消息容易被拦截,他们通常会放弃此选项,同时等保测评中也不建议使用此类方法
简易示例:用户登录时第二部要求用户输入短信验证码
推送认证
实现方式:用户在进行登录或者敏感操作时进行消息的推送并要求用户进行授权操作
简易案例:用户操作认证授权操作
免费工具
下面介绍几种开源免费的2FA工具:
Authy
项目地址:https://authy.com/
项目介绍:Authy是一款二次验证应用,基于TOTP协议,可以在不同设备中同步,支持设置主密码,Authy适用于Android和iOS移动设备以及Windows,Apple Watch,桌面程序等全平台
2FA Authenticator
项目地址:https://github.com/twofas
项目介绍:2FA Authenticator支持导出并且谷歌云盘备份,与500多种服务兼容,可生成基于时间的一次性密码、推送通知和云同步以备份您的身份验证令牌
Authenticator Pro
项目地址:https://github.com/jamie-mh/AuthenticatorPro
项目介绍:Authenticator Pro是一款面向Android的免费开源双因素认证APP,支持TOTP、HOTP、mOTP (Mobile-OTP)和Steam,适配Wear OS并且可以从Steam、Authy、微软、Google、Blizzard 等其他二次验证应用中导入已经存在的配置
Ente Authenticator
项目地址:https://github.com/ente-io/auth
项目介绍:Ente Authenticator 是一款开源的2FA(Two-factor authentication)工具,支持Android与iOS,桌面客户端即将发布,拥有云存储、跨设备同步、端对端加密、导入导出等功能
Google Authenticator
项目地址:https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2
项目介绍:Google Authenticator,也被称之为\\”Google身份验证器\\”,是由谷歌出品的软件,支持Android与iOS客户端,也是我们平时使用最多、接触最多的一种了
Mattrubin Authenticator
项目地址:https://github.com/mattrubin/Authenticator
项目介绍:Mattrubin Authenticator是一款简单、免费、开源的二次验证(双重身份验证)工具,目前仅支持IOS
Aegis Authenticator
项目地址:https://github.com/beemdevelopment/Aegis
项目介绍:Aegis Authenticator免费开源的二次验证(2FA)应用,可以导入导出,加密,自定义图标,夜间主题,选中高亮,目前仅支持Android
Microsoft authenticator
项目地址:https://www.microsoft.com/security/mobile-authenticator-app
项目介绍:Microsoft Authenticator是微软发布的 二次验证应用,它能够帮你在不输入密码的情况下登录Microsoft账号并管理其他网站的二次验证码,支持从Edge浏览器中同步密码并可以在 iPhone与Android设备上自动填充密码
MFA认证
MFA(Multi-Factor Authentication,多因子认证)是一种更加强化安全性的身份验证方法,要求用户在登录或进行敏感操作时提供多个独立的身份验证因素,MFA与双因子认证类似,MFA引入了额外的因素来增加账户的安全性,双因子认证也算是广义上的MFA认证方式,MFA在双因子的认证基础之上还需要进行进一步的强化,引入新的认证因子
文末小结
多因子认证(MFA)是一种增强安全性的身份验证方法,要求用户提供多个独立的身份验证因素,通过结合不同类型的认证因素,例如:知识因素(密码)、物理因素(硬件令牌)、生物因素(指纹识别)和位置因素,MFA提供了更高级别的安全性,有效防止密码泄露、恶意访问和社会工程等攻击
原创文章,作者:七芒星实验室,如若转载,请注明出处:https://www.sudun.com/ask/34352.html