通过JAVA实现OTP验证-上

前言

不知道你们是否经常碰到在登录腾讯游戏时被要求输入动态密码,手机令牌是第二代密码保护的一种密保手段,它是安装在手机上免费使用的软件,安装成功后会在手机上显示6位动态密码,绑定后,您可以通过验证动态密码,进行修改QQ密码、设置登录保护和Q币、Q点消费保护等操作。那么这个动态密码的实现机制是什么呢?这里我们就带大家来了解一下!
请添加图片描述

动态令牌背后的OTP技术

OTP( One-Time Password,一次性密码)
详情可参考文章OTP动态令牌工作原理分析

OTP动态密码的产生主要是通过内置在硬件中不可导出的密钥与一个变化因子通过安全算法进行计算完成的。即:
算法{密钥(也称为种子),动态因子(时间,事件,冲击响应……)}=OTP口令
可以看到算法有两个输入因子:密钥和动态因子。算法的好坏也决定了OTP的安全程序

1. 算法:

一般算法应该考虑几点因素:

  • 权威性:一个算法是需要经过长时间的研发积累,经过长期广泛的市场验证才能够走向成熟。真正成熟算法的研究需要几年,甚至十几年的时间。坚石诚信ET系列动态令牌采用OTP领域中公认的最具权威的OATH国际组织的安全算法。算法的安全性得到了有效保障。自定义算法未被广泛验证和认可,安全性是一个未知数。

  • 安全性:OTP的算法一般不采用对称加解密算法,如:3DES,AES等。而采用单向散列算法。原因是这样的,拿时间型令牌说明,密钥+时间(动态因子)=OTP,时间是知道的,每分钟产生的动态口令能通过硬件知道,3DES算法也是公开的,这样就有反推出密钥的可能性。而单向散列算法,即使知道通算法计算的结果OTP,由于算法保证单向,那么从根本上就断绝了反推密钥的途径。

  • 效率/耗电:OATH算法是国际OTP领域中公认的安全算法。坚石诚信ET系列动态令牌的OATH算法单次运行时间<1ms,用时极短,耗电极少。保证电池能够正常使用3年以上。按键开关显示OTP设计,更能保证电池寿命可长达5年以上。

2. 密钥

  • 唯一性:每个动态令牌中的密钥都是唯一且不相同的,每个动态令牌与不同的用户绑定,那么该令牌中的密钥就代表这个用户的身份。坚石诚信ET系列OTP动态令牌产品的密钥符合OATH组织规定的160位(20字节)长度。

  • 不可复制:动态令牌硬件保证密钥不可导出,断电即毁。动态口令的计算在硬件内部完成。保证了密钥的安全。

  • 产生/生产:两种模式保证了OTP密钥的唯一性:软实现(符合FIPS140-2标准),硬实现(使用国密办认证的硬件加密卡)。生产时密钥以密文的方式烧入到智能卡中(智能卡由专门的授权的人员负责,读卡器、通讯协议、COS都是自主研发,不公开),使用工控机烧入动态令牌密钥时,智能卡的COS会将烧入成功的密钥删除,所有的密钥烧录成功完成后,智能卡中就没有密钥了。

3. 动态因子

可以有多种选择,目前较多使用的有如下3种:

  • 时间型:以时间为变化因子
  • 事件型:以每次触发计算动态口令的计算事件行为为变化因子
  • 冲击响应:以服务器产生的随机数为变化因子

通过JAVA实现OTP验证

这章我们就讲解到这里了,这边给读者留下一个期待,下篇文章我们再来讲解如何通过JAVA实现OTP验证。
需要准备的工具有:

IntelliJ IDEA
源码 - 提取码:Huah
commons-codec-1.9.jar
二维码生成网站

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@花花.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值