1.Google验证器简介
1.1 Google验证器使用场景
Google验证器(Google Authenticator)的应用场景广泛,主要用于提供额外的安全保护,以防止各平台账户遭到恶意攻击。以下是Google验证器的一些主要应用场景:
1.身份验证
Google验证器可用于用户的身份验证过程。用户安装手机客户端并生成临时的身份验证码,然后提交到服务器进行验证。这样,即使密码被窃取,没有动态验证码也无法登录账户,增强了账户的安全性。
2.金融服务
在金融平台、银行、投资公司等场景中,Google验证器常被用于提供额外的安全层。用户可以在登录时输入由Google验证器生成的动态验证码,以确认身份并授权交易或操作。
3.在线服务
Google验证器可以与各种在线账户绑定,如电子邮件、社交媒体、云服务等。用户可以通过输入由Google验证器生成的动态验证码来登录这些账户,提高账户的安全性。
4.远程访问
对于需要远程访问公司网络或服务器的场景,Google验证器可以作为额外的安全层。员工在尝试远程连接时,除了输入用户名和密码外,还需要提供由Google验证器生成的动态验证码,以确认其身份并授权远程访问。
5.API 调用
在进行 API 调用时,为了验证请求的合法性,Google验证器可以生成动态验证码,与 API 请求一起发送到服务器进行验证。这样可以防止未授权的 API 调用和潜在的安全风险。
总的来说,Google验证器广泛应用于各种场景,旨在提高账户和数据的安全性。无论是在金融服务、在线服务、远程访问还是API调用等方面,Google验证器都能提供有效的安全保护。
1.2 使用Google验证器的优势
使用Google验证器有以下优势:
1.提高安全性
Google验证器采用基于时间的一次性密码(TOTP)算法,每次登录都会生成一个新的动态验证码。这种方式可以大大提高账户的安全性,防止未经授权的访问。即使密码被窃取,没有动态验证码也无法登录账户。
2.方便易用
Google验证器作为一款手机应用程序,用户可以方便地在手机上安装和使用。只需将手机与需要保护的账户进行绑定,即可使用动态验证码进行身份验证。这对于需要在多个平台进行安全验证的用户来说非常方便。
3.减少钓鱼攻击风险
传统的用户名和密码身份验证方式容易受到钓鱼攻击的威胁。而Google验证器的动态验证码机制使得钓鱼攻击更加困难。由于验证码是实时生成的,并且与用户的手机设备绑定,攻击者很难在伪造页面上获取有效的验证码,从而有效降低了钓鱼攻击的风险。
4.支持多平台使用
Google验证器可以与各种在线账户绑定,如电子邮件、社交媒体、云服务等。无论是金融平台、在线服务还是远程访问,都可以使用Google验证器提供额外的安全层。这为用户提供了更广泛的选择,满足了用户在多个平台上对安全性的需求。
5.时间同步问题减少
Google验证器使用基于时间的算法生成动态验证码,这使得时间同步问题对用户来说更加简化。用户不需要经常校准手机时间,也可以正常进行身份验证。这减少了用户在使用过程中的困扰,提高了便利性。
综上所述,使用Google验证器可以显著提高账户的安全性,降低安全风险,提供方便易用的身份验证方式,减少时间同步问题等优势。这些优势使得Google验证器成为许多在线服务和应用程序中广泛采用的安全工具。
1.3 Google验证器远程访问安全验证应用
Google验证器可以用于远程访问的安全验证,为远程连接提供额外的安全层。具体步骤如下:
1.安装Google验证器应用
用户需要在自己的手机或平板电脑上安装Google验证器应用。可以在应用商店中搜索并下载安装。
2.生成密钥对
在安装Google验证器后,用户需要生成一对密钥,包括公钥和私钥。这些密钥用于后续的身份验证过程。
3.配置远程访问系统
用户需要将生成的公钥提供给远程访问系统的管理员或提供商。管理员或提供商将在远程访问服务器上配置相应的公钥,以与用户的Google验证器进行绑定。
4.登录远程访问
当用户尝试远程访问时,系统会要求输入用户名和密码进行身份验证。在输入密码后,用户还需要使用Google验证器生成动态验证码。
5.输入动态验证码
用户在Google验证器应用中查看动态验证码,并将其输入到远程访问系统的登录界面中。验证码通常是六位数字或字母的组合。
6.确认身份
当用户输入正确的密码和动态验证码后,远程访问系统会验证用户的身份并允许其登录。只有通过验证的用户才能成功连接到远程服务器。
通过使用Google验证器进行远程访问的安全验证,可以增加额外的安全层,防止未经授权的访问和潜在的安全风险。即使可能的入侵者窃取或猜出了用户的密码,也无法登录到账户,因为必须使用用户的手机才能生成动态验证码。
2.Google验证器的实现
2.1 Google验证器的实现原理和步骤
1.生成密钥对
在Google验证器中,用户需要在手机客户端安装Google Authenticator应用,并生成一对密钥,包括公钥和私钥。
2.服务器端验证
当用户需要登录时,服务器端会验证用户输入的验证码是否正确。服务器端会根据用户提供的公钥和当前时间戳,通过TOTP算法计算出一次性密码,并与用户提交的密码进行比对。如果一致,则验证通过,允许用户登录。
3.客户端生成密码
客户端(Google Authenticator应用)会使用用户保存的私钥和当前时间戳作为输入,通过TOTP算法生成一次性密码。这个密码是动态生成的,并且是基于当前时间戳的。
4.时间同步问题
由于一次性密码是基于当前时间戳的,因此用户手机上的时间和服务器上的时间必须保持同步。如果时间相差太大,会导致验证失败。因此,建议用户定期校准手机时间,并开启网络自动对时功能以确保时间准确。
2.2 TOTP算法
TOTP算法,全称为“Time-based One-time Password algorithm”,中文译为基于时间的一次性密码算法。它是一种从共享密钥和当前时间计算一次性密码的算法,已被采纳为Internet工程任务组标准RFC 6238。TOTP是开放身份验证计划(OATH)的基石,并被用于许多双因素身份验证系统。
TOTP算法的原理是基于散列的消息认证码(HMAC)的一个示例,它使用加密哈希函数将密钥与当前时间戳组合在一起以生成一次性密码。由于网络延迟和不同步时钟可能导致密码接收者必须尝试一系列可能的时间来进行身份验证,因此时间戳通常以30秒的间隔增加,从而减少了潜在的搜索空间。
TOTP的安全性较高,广泛应用于网络认证、移动支付等领域。其核心在于客户端和服务器端必须共享一个密钥,且密钥的生成必须足够随机,密钥必须储存在防篡改的设备上,不能在不安全的情况下被访问或使用。
2.3 其他多因素认证
除了Google验证器之外,还有许多其他的多因素验证器可以应用。以下是一些常见的多因素验证器:
1.Authy
Authy是一款跨平台的身份验证器,支持多种平台和应用程序。它提供基于时间的一次性密码(TOTP)和双因素身份验证功能,可以与各种在线账户绑定,提高账户的安全性。
2.Microsoft Authenticator
Microsoft Authenticator是微软官方推出的身份验证工具,支持Windows、iOS和Android平台。它采用基于时间的一次性密码(TOTP)算法,提供双因素身份验证功能,确保账户的安全性。
3.Duo Mobile
Duo Mobile是一款安全认证解决方案,适用于iOS和Android平台。它提供基于时间的一次性密码(TOTP)和动态令牌等多种验证方式,确保用户身份的安全性。
4.2FA Authenticator(2FAS)
2FA Authenticator是一款免费开源的身份验证器,支持iOS和Android平台。它采用基于时间的一次性密码(TOTP)算法,提供双因素身份验证功能,并且可以与超过500个网络平台绑定。
5.Authing
Authing是一款支持多平台的身份验证工具,提供基于时间的一次性密码(TOTP)、短信验证码、指纹识别等多种验证方式,确保账户的安全性。 这些多因素验证器都具有各自的特点和优势,用户可以根据自己的需求选择适合的身份验证工具,提高账户的安全性。
3.Google验证码实现算法
3.1 算法实现流程
3.1.1解码密钥
将原始密钥中的空格和小写字母移除。
使用Base32解码将密钥转换为二进制格式。
3.1.2获取输入
获取当前时间的Unix时间戳。
将时间戳除以固定时间段(例如30秒),取整数部分作为输入。
3.1.3签名函数(HMAC-SHA1)
将密钥和输入进行两次SHA1哈希运算。
将第一次哈希结果与输入进行拼接,并再次进行SHA1哈希运算。
生成的HMAC是一个标准长度的SHA1值,通常为20字节(40个十六进制字符)。
3.1.4提取验证码
从HMAC的末尾字节开始,取连续的4个字节。
将这4个字节转换为一个大整数。
将大整数对1,000,000取模,得到一个6位数字的验证码。
3.2 算法实现示例
3.2.1Python代码示例
以下是一个简单的Python代码示例,实现了Google验证器算法的完整过程:
import base64
import hashlib
import hmac
import struct
import time
def decode_secret(original_secret):
secret = original_secret.replace(' ', '').upper()
return base64.b32decode(secret)
def generate_otp(secret):
interval = int(time.time()) // 30
msg = struct.pack('>Q', interval) # 将输入转换为8字节的大端序列
key = secret
hmac_digest = hmac.new(key, msg, hashlib.sha1).digest()
offset = hmac_digest[19] & 0x0F
truncated_hash = hmac_digest[offset:offset+4]
otp = struct.unpack('>L', truncated_hash)[0] # 将截断的哈希值转换为32位无符号整数
otp &= 0x7FFFFFFF # 获取低31位
otp %= 1000000 # 取模得到6位验证码
return str(otp).zfill(6)
# 测试代码
original_secret = "xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx"
secret = decode_secret(original_secret)
otp = generate_otp(secret)
print("验证码:", otp)
注意:你需要将 original_secret 替换为你实际使用的密钥值。此代码示例使用了Python的标准库中的 base64、hashlib 和 hmac,以及 struct 模块用于处理二进制数据。运行代码后,将输出生成的6位数字验证码。请确保在使用时适当地导入所需的模块。
3.2.2网站后台使用Google验证
以下完整的php代码示例,演示了如何在网站后台使用 Google Authenticator 配合安卓手机上的验证器进行验证:
equire_once 'vendor/autoload.php'; // 导入 Google Authenticator 库
use OTPHP\TOTP;
use OTPHP\Factory;
// 生成密钥
$secret = Factory::create()->setIssuer('YourWebsite')->setLabel('YourUsername')->createSecret();
// 获取二维码供用户扫描
$qrCodeUri = Factory::create()->setIssuer('YourWebsite')->setLabel('YourUsername')->getQrCodeUri($secret);
// 输出二维码图像
echo '';
// 用户输入的验证码
$otp = $_POST['otp'];
// 验证验证码是否正确
$totp = TOTP::create($secret);
$isVerified = $totp->verify($otp);
if ($isVerified) {
echo "验证成功";
} else {
echo "验证失败";
}
请确保你已经安装了 Composer,并通过 Composer 安装了 otphp/otphp 库。
使用上述代码,首先会生成一个密钥,然后使用该密钥生成一个二维码供用户扫描。用户可以通过 Google Authenticator 应用程序扫描该二维码来添加验证器。
在用户登录或执行敏感操作时,用户会被要求输入 Google Authenticator 应用程序中显示的6位数字验证码。你需要将该验证码作为 POST 请求中的 otp 参数发送到服务器。
服务器将使用先前生成的密钥验证用户输入的验证码是否正确。如果验证成功,将输出 "验证成功",否则输出 "验证失败"。
请根据你的实际需求修改代码并进行适当的配置,以便与你的网站后台集成 Google Authenticator 验证。
4.Google验证器安全风险
虽然 Google Authenticator 是一个相对安全的身份验证应用程序,但仍存在一些潜在的安全风险和问题。以下是一些可能存在的安全问题:
丢失设备:如果你的手机丢失或被盗,未经保护的 Google Authenticator 应用程序可能会暴露给他人,使他们能够访问你的账户。
密钥备份:如果你没有妥善备份生成的密钥,而且手机丢失或损坏,你可能会永久丢失对账户的访问权。
恶意软件:如果你的手机被恶意软件感染,攻击者可能能够获取你的密钥和生成的验证码。
不安全的密码重置选项:在某些情况下,Google Authenticator 可能作为密码重置的替代方法。如果攻击者能够访问你的邮箱或其他重置选项,他们可能能够绕过 Google Authenticator 验证。
二维码钓鱼:恶意网站或应用程序可以通过伪造二维码来欺骗你,要求你提供生成的验证码。这可能会导致你的账户被攻击者接管。
不安全的操作系统或应用程序:如果你的操作系统或应用程序存在漏洞或安全问题,攻击者可能能够绕过 Google Authenticator 的保护。
4.1 Google验证码暴力破解
1.选择需要拦截的记录
如图1所示,在Burpsuite的HTTP history记录中去找到包含Google验证码的POST记录。
图1 选择拦截发包记录
2.设置变量
在Burpsuite中去掉其它无关的所有变量,仅仅增加Google验证码字段为变量,如图2所示,Google验证码的变量为opt。
图2 设置破解的变量
3.设置字典
如图3所示,在Playload中选择暴力破解(Brute forcer),在下方去掉26个字母,仅仅保留0123456789,接着设置最大和最小长度均为6。
图3设置字典
4.执行暴力破解
在Playload中单击“Attack”,开始执行暴力破解,如图4所示,当命中Google的验证码后,其长度会远远大于其他包的长度。
图4 暴力破解
5.登录后台
如图5所示,对Length进行排序,找到最大的那个值,然后在浏览器中更改Token、Session或者Cookie值,即可成功登录后台。另外也可以选中该成功的记录,选择在Chrome中进行访问。
图5 查看token
总结:Google验证码暴力破解成功取决于6位数的动态变换碰撞,因此成功有一定几率。缺陷是时间非常长,不知道那一刻可以暴力破解成功。可以通过限制验证码的访问次数和IP等方式来加强安全防范。
5.Google验证器安全防御
Google Authenticator 是一个安全的身份验证应用程序,但仍然可能存在潜在的安全威胁。以下是一些 Google Authenticator 的安全防御措施:
设置强密码:为Google账户和Google Authenticator应用设置不易猜测的强密码,并定期更改密码。
启用双因素认证:将Google Authenticator与你的Google账户绑定,启用双因素认证。这样,在登录时除了输入密码外,还需要提供Google Authenticator生成的验证码。
使用备份码:在设置Google Authenticator时,通常会提供一组备份码。请务必将这些备份码妥善保存在安全的地方,以防手机丢失或无法使用时可以恢复访问。
保护手机安全:确保你的手机设备本身是安全的,设置密码锁屏或开启指纹识别等功能,以防止未经授权的访问。
谨慎使用云同步功能:Google Authenticator通常提供云同步功能,以便在更换手机时可以轻松迁移数据。但要注意,如果你选择启用云同步,请确保你的云存储账户也是安全的,以免被攻击者获取。
小心钓鱼网站:避免点击或输入Google Authenticator验证码到来历不明的网站或应用程序,以防止被钓鱼攻击。
避免同时使用多个设备:为了避免数据同步或访问权限方面的问题,最好只在一个手机设备上使用Google Authenticator应用程序。
不要共享密钥:不要将Google Authenticator应用程序生成的密钥与其他人分享,即使是你的家人或朋友,也应该保持谨慎。
仔细检查应用程序权限:在安装Google Authenticator应用程序时,应该仔细检查应用程序所需的权限,并确保不授予不必要或可疑的权限。
使用其他双因素认证方式:除了Google Authenticator之外,还可以考虑使用其他双因素认证方式,如基于短信、电话或硬件密钥的认证方式。这样可以增加多层次的安全保障。
参考资料:https://zhuanlan.zhihu.com/p/132478048