乐趣区

关于加密:解读登录双因子认证MFA特性背后的TOTP原理

摘要: 随着互联网明码泄露事件频发,越来越多的产品开始反对多因子认证(MFA),TOTP 则是 MFA 畛域里最广泛的一种实现形式,本文介绍 TOTP 的原理和华为云的实践经验。

原理

TOTP(Time-Based One-Time Password)算法是基于工夫的一次性明码算法,依据预共享的密钥与以后工夫计算一次性明码。它已被互联网工程工作组接收为 RFC 6238 规范,成为被动凋谢认证的基石,并被用于泛滥多因子认证零碎当中。

TOTP 其实并不是一种全新的算法,能够看成是 HOTP(HMAC-Based One-Tme Password)算法的一个具体化的场景。HOTP 的算法能够在 RFC 4226 看到详细描述,所以相比 HOTP 算法,TOTP 的 RFC 文档看起来十分简洁。

下面是 HOTP 算法的公式,参数 K 示意共享密钥,参数 C 示意计数器 counter。

TOTP 算法实际上是以工夫变量作为参数 C 的 HOTP 算法,所以 TOTP 算法的公式应该是

参数 K 依然示意共享密钥,而参数 T 示意工夫变量。

工夫变量 T

TOTP 的外围和实际计划也是围绕工夫变量 T,但 T 不是简略的工夫戳,

X 示意步长,默认是 30 秒,T0 示意 UTC 工夫的起始工夫戳,即 1970 年一月一日,Floor 函数向下取整。T 必须是一个大于 32bit 的整型,能力反对到 2038 年当前。例如当 X =30 时,59 对应的 T 为 1,60 对应的 T 为 2。

TOTP 在 MFA 上的利用

MFA(Multi-Factor Authentication),多因子认证,是计算机系统中一种进行身份认证的办法,用户须要通过两种或两种以上的认证伎俩的校验能力进入零碎,拜访资源。

开明 MFA 个别都须要先在登录认证零碎中将用户的身份和用户的物理设施进行绑定关联,在登录过程中,除了输出明码(用户晓得的),还须要输出用户的物理设施(用户持有的)上显示的拜访码(passcode)来实现整个身份验证。阐明:不是所有的 MFA 验证过程都须要用户被动输出拜访码。

上图示意的过程即 MFA 的通用流程,例如咱们应用网银进行转账就须要拿出在银行窗口开户时银行提供的一个 U 盾,按下按钮,U 盾上即显示一串数字,输出这次数字到网银软件上能力实现转账。

但上图的 MFA 流程存在一个工程难题,即第 4 步中认证零碎后端还须要向 MFA 设施(或 MFA 设施的后盾零碎)进行一次验证,这个验证过程限度了 MFA 的利用场景,运行在企业数据中心的认证服务器个别不被容许拜访公网,即便拜访公网也会因为网络时延导致登录体验变差,TOTP 算法的利用很好的解决了这个难题。

应用 TOTP 算法,只有客户端(证实方)和服务端(校验方)放弃时钟统一,且单方事后设置好一个共享密钥的前提下,在同一个工夫片段内算进去的值是一样的。正是基于这样的原理,在认证零碎中先将用户身份和该共享密钥绑定,再将共享密钥置入物理设施,在认证过程中,物理设施和认证零碎各自通过 TOTP 算法依据共享密钥和工夫戳计算出拜访码,只有拜访码比照统一就能证实用户持有该物理设施,整个认证过程中物理设施和认证零碎不须要有交互,非常灵活。

基于 TOTP 算法的设施,能够分为虚构(软件)MFA 和硬件 MFA。

虚构 MFA

虚构 MFA 即通过软件来模仿硬件 MFA 设施,在手机上安装一个反对 TOTP 协定的 APP,例如 Google Authenticator, Microsoft Authenticator,华为云 APP 也同样反对规范的 TOTP 协定。虚构 MFA 通过扫码二维码图片或者手工输出的形式置入校验方生成的共享密钥,并且能够同时关联多个校验方,十分不便实用。

硬件 MFA

下图中是一种信用卡形态的硬件 MFA,能够放到钱包里,在须要时按下卡片上的按钮即可显示六位数字,十分便携。

平安思考

1. 哈希算法

TOTP 算法的强度取决于背地的 HOTP 算法,但 HOTP 的哈希函数是 HMAC-SHA1,并不是我司举荐的平安算法。TOTP 算法在具体实现中也能够应用 HMAC-SHA256 或 HMAC-SHA512,但应用 HMAC-SHA1 依然是最通用,兼容性最好的实现,Google Authenticator 就是应用 HMAC-SHA1。

2. 密钥随机性

对 TOTP 算法最可能的攻打伎俩就是暴力破解,因而共享密钥必须是密码学平安的密钥,足够随机。密钥长度应该和哈希算法的长度尽量匹配。

另外,校验方必须将密钥寄存在平安的区域,应用加密形式保留,避免泄露,只有在须要验证 OTP 的时候才解密。同时还须要限度最小权限,只有校验方本身能力拿到密钥。

3. 通信安全

证实方和校验方应该应用平安的通道通信,例如 SSL/TLS。

4. 防暴力破解

个别 TOTP 用于 MFA 时,校验方只会要求输出 6 位数字,很容易被暴力破解,在工程实际中能够当第二因子的尝试失败达到肯定次数后锁定客户端。

5. 放弃一次性

TOTP 算法在同一个工夫片段(例如,30s)内的输入都是一样的,如果同一个 TOTP 验证曾经胜利验证过一次,该验证码的第二次尝试应该被回绝,这样能力保障 OTP“一次性”的根本性质。

6. 工夫片段

工夫片段越长,被破解的危险就越高,但思考到证实方须要人工输出验证码,应该留下足够的操作工夫。举荐应用 30 秒作为默认工夫片段,在平安和易用性之间达到一个均衡。

可用性思考

1.“后向兼容”

因为证实方和校验方都是基于工夫来计算 OTP,如果证实方在一个工夫片段的最初时刻发送 OTP,在申请达到校验方时,曾经进入下一个工夫片段,如果校验方应用以后工夫来计算 OTP,必定会匹配失败,这样会导致肯定的失败率,影响可用性。

校验方应该不仅仅以接管申请的工夫,还应该用上一个工夫片段来计算 TOTP,加强容错性。不过,容错窗口越长,被攻打危险越高,“后向兼容”个别举荐不超过一个工夫片段。

2. 反对校准

证实方和校验方的时钟可能不完全一致,特地是很长一段时间没有进行过 TOTP 认证,时钟偏移导致匹配失败。校验方的认证零碎能够提供一种校准(re-sync)的能力,让证实方输出 TOTP 验证码,校验方往前计算两个工夫片段(60s),往后计算一个工夫片段(29s),通过匹配后果记录证实方的时钟的偏差值,实现时钟校准。在证实方当前发动验证时,校验方间接应用偏差值计算 TOTP。但如果厂商曾经反对足够的“后向兼容”,校准不肯定须要反对。

点击关注,第一工夫理解华为云陈腐技术~

退出移动版