分享好友 最新动态首页 最新动态分类 切换频道
提升账户安全:一次性密码生成原理与实践
2024-12-28 16:59
 

​ 此工具提供基于时间的一次性密码(Time-based One-time Password,简称TOTP,只需要在手机上安装密码生成应用程序,就可以生成一个随着时间变化的一次性密码,用于帐户验证,而且这个应用程序不需要连接网络即可工作。

提升账户安全:一次性密码生成原理与实践

客户端和服务器事先协商好一个密钥K,用于一次性密码的生成过程,此密钥不被任何第三方所知道。此外,客户端和服务器各有一个计数器C,并且事先将计数值同步。

进行验证时,客户端对密钥和计数器的组合(K,C)使用HMAC(Hash-based Message Authentication Code)算法计算一次性密码,公式如下

 
 

​ 介绍完了HOTP,Time-based One-time Password(TOTP)也就容易理解了。TOTP将HOTP中的计数器C用当前时间T来替代,于是就得到了随着时间变化的一次性密码。非常有趣吧

虽然原理很简单,但是用时间来替代计数器会有一些特殊的问题,这些问题也很有意思,我们选取几个进行一下探讨。

​ 首先,时间T的值怎么选取?因为时间每时每刻都在变化,如果选择一个变化太快的T(例如从某一时间点开始的秒数,那么用户来不及输入密码。如果选择一个变化太慢的T(例如从某一时间点开始的小时数,那么第三方攻击者就有充足的时间去尝试所有可能的一次性密码(试想6位数字的一次性密码仅仅有10^6种组合,降低了密码的安全性。除此之外,变化太慢的T还会导致另一个问题。如果用户需要在短时间内两次登录账户,由于密码是一次性的不可重用,用户必须等到下一个一次性密码被生成时才能登录,这意味着最多需要等待59分59秒!这显然不可接受。综合以上考虑,Google选择了30秒作为时间片,T的数值为从Unix epoch(1970年1月1日 00:00:00)来经历的30秒的个数。

​ 第二个问题是,由于网络延时,用户输入延迟等因素,可能当服务器端接收到一次性密码时,T的数值已经改变,这样就会导致服务器计算的一次性密码值与用户输入的不同,验证失败。解决这个问题个一个方法是,服务器计算当前时间片以及前面的n个时间片内的一次性密码值,只要其中有一个与用户输入的密码相同,则验证通过。当然,n不能太大,否则会降低安全性。

​ 事实上,这个方法还有一个另外的功能。我们知道如果客户端和服务器的时钟有偏差,会造成与上面类似的问题,也就是客户端生成的密码和服务端生成的密码不一致。但是,如果服务器通过计算前n个时间片的密码并且成功验证之后,服务器就知道了客户端的时钟偏差。因此,下一次验证时,服务器就可以直接将偏差考虑在内进行计算,而不需要进行n次计算。

引入依赖

 

书写工具类( GoogleAuthenticator

 

生成验证码

如果用户是要进行绑定二次验证的话,使用 generateSecretKey() 方法生成密钥,返回给用户,用户使用这个密钥在验证器终端进行绑定,就可以获取六位数字。此方法返回的是字符串,用户只能手动输入的。也可以生成一个二维码,用验证器终端扫。

生成二维码的方式

文件中打印

 

其中《test@demo》 可以用登录名@产品名称给用户固定好 (自己测试可通过在线转换二维码,然后通过谷歌验证器扫描二维码添加到应用中,比如:https://cn.online-qrcode-generator.com/)

校验验证码

直接调用 check_code 方法即可。参数分别为 密钥,六位验证码,当前时间戳。


最新文章
硬盘分区怎么改成mbr
在计算机领域,硬盘分区格式的转换是一个常见的操作,特别是在需要将GPT分区转换为MBR分区时。GPT(GUID分区表)和MBR(主引导记录)是两种不同的磁盘分区样式,各自具有不同的特点和适用场景。本文将详细介绍如何将硬盘分区从GPT改为MBR。
五种选择的可视化工具,用于探索Kafka
Apache Kafka是一个分布式流处理平台,能够处理大量实时数据。它广泛用于构建实时数据管道、消息队列和事件驱动的应用程序。Kafka的可视化工具可以帮助用户监控和管理Kafka集群,并更好地理解Kafka数据流。以下是对五种流行的Kafka可视化工
数智赋能 融合创新:数字化转型激发教育变革新动能丨IFIE2022·分论坛二
  2022年,教育部启动教育数字化战略行动,推出国家智慧教育公共服务平台,以推进技术与教育深度融合。教育数字化转型将通过创新教学模式、丰富资源供给、改革评价方式、优化教育治理等路径重塑数字化人才培养体系,重构智慧教育发展生态
外链哪家强?打造最佳外链计划!
1. 定义目标和受众明确定义目标受众和外链获取策略的目标。这有助于指导外链建设活动的规划和执行。2. 竞争对手分析分析竞争对手的外链档案,了解它们的优势和劣势。这提供见解,以识别潜在的外链机会并制定差异化的策略。3. 关键词研究确
滁州集成灶全国各市区售后服务热线/故障维修客服中心 - 焦点 - 百科知识-蓝心网
滁州集成灶售后服务电话-400各市区网点电话:400-658-8618滁州集成灶售后服务电话-400各市区网点电话尊敬的客户您好!这里是滁州集成灶售后服务电话-400各市区网点电话,如果您在使用过程中有什么问题,请拨打全国24小时服务热线电话。人工
平面广告设计的最实用技巧
如何在短时间内做一个出彩而效果又好的广告设计图?这是一个平面广告设计师日常面临的问题,下面小编为大家分享广告设计的8大技巧,为你的设计提供一些思路。平面广告设计8大技巧01主题明确02突出重点文字03符合阅读习惯04用最短的时间激起
免费资源网站大盘点,7个强大工具你绝对不能错过!
接下来,想要对照片进行简单处理吗?一键抠图(https://www.yijiankoutu.com/)就是这样一个完美的网站。无论是想去掉图片上多余的物品,还是需要把自己从合成照中抠出来,它都能轻松搞定。它还支持在线更换背景和多种图片处理功能,比如格
PanDownload:百度网盘不限速下载工具
百度云是我们用来下载资料的重要工具之一,但是百度云官方客户端的下载速度一直很让人郁闷,无法提供满速下载。当然我们chrome插件网之前有专门写过一篇文章还在为百度网盘下载速度太慢烦恼?chrome浏览器插件帮你解决!里面有介绍过一些常
除了宝塔面板,Linux下常见的web一键包运行环境和控制面板汇总
linux下的面板或者web运行环境还是有很多的,比如宝塔面板linux版本就非常受欢迎。但是,你不要以为只有宝塔面板,其实还有很多其他的面板或者web运行环境,比如说国内的AppNode、AMH,可惜wdcp不给力了,要不然也是一个非常好的面板。当然
常熟屋顶漏水维修电话〈免费上门〉常熟市屋顶防水补漏师傅
不砸砖、不砸墙;免砸砖防水补漏技术,2小时快速解决漏水问题,超长保修期。漏水维修服务项目:防水查漏、天花板漏水、飘窗渗水、洗浴间漏水、高压注浆堵漏、屋顶渗水、厂房车间渗水、房屋墙面起皮、漏水检测维修、漏水检测、房顶漏水、女儿墙
相关文章
推荐文章
发表评论
0评