为 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折,半价续费券限量免费领取!
目前有很多家验证器客户端 比较流行的有 Google Authenticator 、 Microsoft Authenticator、Authy 等。 Microsoft Authenticator、Authy 相比 Google Authenticator 多了一套云同步系统,能防止意外清除软件数据之后丢失密钥导致的各种问题出现。但请注意,选择了带有云同步功能的应用中使用的同步账号必须设置一个高强度密码,避免同步账号被盗取泄露验证码。 这里选用 Google Authenticator 下载安装后进入软件,选择扫描条形码,然后扫描上面保存的图片即可,或选择手动输入,账户为备注名字,可随意,密钥则为保存的密钥。 0x03 算法原理 现有实现了 TOTP 的软件中的算法 本质上就是 HMAC-SHA-1 算法,也就是带有盐值的 SHA-1
0x04 使用 Java 实现算法 呜呜呜是不是我太菜了,代码贴上来字数就超了 要不要不,看我发在其它地方的版本吧 qwq 知乎 0x05 最后 文章中可能还有错误的地方,欢迎各位提出。 文中提及的代码均在我的开源 Java 中间件项目 Cynops 中 ,欢迎 Star ,也可以 Follow 我的 Github Hanbings 还请前辈们多多指教。 |
顶 项目很有意思 |
Make |
一眼腾讯云软文 |
Mark一下,技术贴帮顶 |
技术贴必顶 |
感谢楼主分享 |
阿巴阿巴阿巴 也不是很软吧 要不是代码发不上来 |
你出寒冰?鹅鹅出火拳! |