站点图标 谷姐靓号网

为 Linux 服务器 SSH 添加 TOTP 动态验证码以及 Java 实现算法-寒冰hanbings

Rate this post

为 Linux 服务器 SSH 添加 TOTP 动态验证码以及 Java 实现算法

0x00 TOTP 动态验证码?

TOTP 基于时间的一次性密码算法(Time-Based One-Time Password)是一种根据预共享的密钥与当前时间计算一次性密码的算法,利用不同设备时间相同的特性,将时间作为特定算法的一部分从而达到无需网络进行安全验证的目的。 该算法有两个输入,一个输出,一个输入是随机生成的密钥,密钥需要被验证方和验证器同时持有,另一个输入即系统时间,通常是 UNIX 时,输出则是两方相同的验证码。一般的验证码有效期为 30 秒,每 30

秒生成一个新的验证码。当前有很多领域和行业在使用 TOTP 作为它们的安全验证,比如银行使用的实体验证器,网易的网易将军令等。

这套算法在 RFC6238 中有详细的说明,在后面的实现算法部分详细说明。

0x01 Linux 服务器安装 Google Authenticator

服务器采用腾讯云轻量服务器 Debian Linux 系统,腾讯云轻量服务器是腾讯云基于 CVM 服务器推出以应用为中心的轻量级服务器,优点在于快速部署应用、价格便宜等。有需要在云环境练习 Linux 技能的推荐购买 【腾讯云】云产品限时秒杀,爆款2核4G云服务器首年74元 【腾讯云】境外1核2G服务器低至2折,半价续费券限量免费领取!

    apt update

    apt install libpam-google-authenticator

    google-authenticator

图中黄线框部分为密钥,红色线框部分为备用验证码,备用验证码是在丢失验证器的情况下输入的验证码,验证码输入后将失效。请妥善保管这两个内容,它们是生成验证码的关键,也请不要泄露这个二维码

粗略翻译下选项

    Do you want authentication tokens to be time-based

    需要启用基于时间的认证吗?

    Do you want me to update your "/root/.google_authenticator" file?

    需要更新配置文件吗?

    Do you want to disallow multiple uses of the same authentication
    token? This restricts you to one login about every 30s, but it increases
    your chances to notice or even prevent man-in-the-middle attacks ?

    禁止多次使用同一个身份验证令牌吗?这将限制大约每 30 秒登录一次,它将减少中间人攻击的机会

    By default, a new token is generated every 30 seconds by the mobile app.
    In order to compensate for possible time-skew between the client and the server,
    we allow an extra token before and after the current time. This allows for a
    time skew of up to 30 seconds between authentication server and client. If you
    experience problems with poor time synchronization, you can increase the window
    from its default size of 3 permitted codes (one previous code, the current
    code, the next code) to 17 permitted codes (the 8 previous codes, the current
    code, and the 8 next codes). This will permit for a time skew of up to 4 minutes
    between client and server.
    Do you want to do so?

    默认情况下,移动应用程序每 30 秒生成一个新令牌。
    为了补偿客户端和服务器之间可能的时间偏差,
    我们允许在当前时间之前和之后一个额外的令牌。这允许一个
    身份验证服务器和客户端之间的时间偏差最大为 30 秒。如果你
    遇到时间同步不好的问题,可以增加窗口
    从其默认大小的 3 个允许代码(一个以前的代码,当前的
    代码,下一个代码)到 17 个允许的代码(前 8 个代码,当前代码
    代码,以及接下来的 8 个代码)。这将允许最多 4 分钟的时间偏差
    客户端和服务器之间。
    要这样做吗?

    If the computer that you are logging into isn't hardened against brute-force
    login attempts, you can enable rate-limiting for the authentication module.
    By default, this limits attackers to no more than 3 login attempts every 30s.
    Do you want to enable rate-limiting?

    如果您登录的计算机没有针对蛮力进行强化
    登录尝试,您可以为身份验证模块启用速率限制。
    默认情况下,这会将攻击者限制为每 30 秒不超过 3 次登录尝试。
    您要启用速率限制吗?

    添加一行 auth required pam_google_authenticator.so

文件 /etc/ssh/sshd_config

    ChallengeResponseAuthentication no 更改为 ChallengeResponseAuthentication yes

退出移动版