算法~totp用作签名防止url被复用

这篇具有很好参考价值的文章主要介绍了算法~totp用作签名防止url被复用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

之前写过关于totp的文章,对它的基础有不清楚的同学,可以先看我的这篇文章《TOTP基础一》《TOTP基础二》

想到的问题

因为totp是把时间分成了一个一个小的时间窗口,当生成totp的服务器和校验totp的服务器不在一起时间窗口,就会出现验证失败的问题,这是不可避免的,时间戳是一个long类型的数字,当这个数字进行totp运算后,落在哪个窗口里是确定的,但你的时间戳数字是不确定的,因为你不知道用户在什么时间触发totp这个生产的动作。

时间窗口

从下面的图中可以看到,时间两个窗口总会有一个交叉,谁赶上了都不一定,所以我们要解决这个不一定的问题。
算法~totp用作签名防止url被复用

最多跨一个窗口

我们的生成totp端和校验totp端,他们最多相差一个窗口,当然这也取决于,生产和校验的时间差和你的窗口大小,正常情况下相差1个窗口,所以我们比较上一个和下一个窗口即可。

/**
   * 生成一组TOTP,窗口大小5分钟,产生8位的动态码.
   * @param base32Key
   * @return
   */
  public static List<String> generateTOTPList(String base32Key) {
    long currentTime = System.currentTimeMillis();
    long prevTime = currentTime - 30 * 1000;
    long nextTime = currentTime + 30 * 1000;
    List<String> result = new ArrayList<>();
    result.add(generateTOTP(prevTime, base32Key, 300, 8));
    result.add(generateTOTP(currentTime, base32Key, 300, 8));
    result.add(generateTOTP(nextTime, base32Key, 300, 8));
    return result;
  }

我们在进行校验时,用这3个totp码与目标totp进行对比,有一个满足,就说明是合法的!即,我们的容错率是前后1个窗口。文章来源地址https://www.toymoban.com/news/detail-746290.html

到了这里,关于算法~totp用作签名防止url被复用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JAVA -- sm3加密签名,以及防止重复攻击

            后端开发基本都遇到过使用签名校验的情况,签名的作用是为了防止请求数据被别人截取篡改重新请求。         为什么签名验证可以防止请求数据被篡改,因为一般签名的规则就是,你的所有请求参数,按照约定好的格式进行拼接,后面得到一个拼接后的字符串,

    2024年02月12日
    浏览(41)
  • 基于TOTP算法的Github两步验证2FA(双因子)机制Python3.10实现

    从今年(2023)三月份开始,Github开始强制用户开启两步验证2FA(双因子)登录验证,毫无疑问,是出于安全层面的考虑,毕竟Github账号一旦被盗,所有代码仓库都会毁于一旦,关于双因子登录的必要性请参见:别让你的服务器(vps)沦为肉鸡(ssh暴力破解),密钥验证、双向因子登录值

    2024年02月08日
    浏览(53)
  • 安全开发:身份认证方案之 Google 身份验证器和基于时间的一次性密码 TOTP 算法

    参考资料在文末注明,如本文有错漏欢迎评论区指出👏 目前很多应用都逐步采用了双因子认证或者说MFA认证方案,因此本文介绍一下背后的机制和 TOTP算法 原理。使用TOTP算法,只要满足两个条件:1)基于相同的密钥;2)时钟同步;只需要事先约定好密钥,TOTP算法就可以保

    2024年02月04日
    浏览(59)
  • SpringCloudGateway实现数字签名与URL动态加密

    再网络传递数据的时候,为了防止数据被篡改,我们会选择对数据进行加密,数据加密分为对称加密和非对称加密。其中RSA和AES,TLS等加密算法是比较常用的。 对称加密是指加密和解密使用相同的密钥的加密方法。其基本流程包括以下步骤: 密钥生成 : 双方协商生成一个共

    2024年02月07日
    浏览(34)
  • html通过使用图像源的协议(protocol)相对 URL 来防止安全/不安全错误

    有人知道使用 protocol relative URLs 是否有问题吗?用于图像源以防止混合内容安全警告。 例如链接一张图片: 代替: 在我的测试中,我没有看到任何迹象表明这是错误的,但我不确定它是否存在会产生问题的边缘情况。 编辑  我看到它在使用 PHP 的 getimagesize 时抛出错误功能

    2024年02月05日
    浏览(42)
  • 【Python】查看当前 GPU一些资源信息 | 区块链 面试题:区块链技术中,如何防止“双花”攻击?| 共识机制,区块确认,交易签名,UTXO模型,51%攻击防护

      “当你低落时,就请穿上节日盛装。”     🎯作者主页: 追光者♂🔥          🌸个人简介:   💖[1] 计算机专业硕士研究生💖   🌿[2] 2023年城市之星领跑者TOP1(哈尔滨)🌿   🌟[3] 2022年度博客之星人工智能领域TOP4🌟   🏅[4] 阿里云社区特邀专家博主🏅   🏆[5]

    2024年02月06日
    浏览(51)
  • java minio通过getPresignedObjectUrl设置(自定义)预签名URL下载文件的响应文件名之minio源码改造方案

    用户上传文件到Minio时,一般存储在Minio中的对象名称都是后端以UUID或者其他随机或非随机方案生成的唯一标识做为文件名,这个对象名称一般都不会是用户上传时的原文件名称。 在用户下载时,想让文件流不通过后端服务器,而是用户直接申请并使用某个要下载对象的Min

    2024年01月25日
    浏览(58)
  • ChatGPT热炒之前 搜索引擎SEO算法已经悄然改变

    2022年4月起,某度算法有了新的调整,这对于靠SEO获得流量的公司简直可以说是灭顶之灾。原本SEO从业者还指望跟之前一样,等算法调整稳定后,网站的自然排名还会再回来,但等到了10月份,仍然没有回暖的迹象,大家这才不得不面对现实,总结这次算法调整后的特点。 特

    2023年04月23日
    浏览(49)
  • 你写过的最蠢的代码是?

    🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页 : 🐅🐾猫头虎的博客🎐 《面试题大全专栏》 🦕 文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺 《IDEA开发秘籍专栏》 🐾 学会IDEA常用操作,工作效率翻倍~💐 《100天精通Golang(基础入门篇)》 🐅

    2024年02月08日
    浏览(35)
  • 【图解DSA数字签名算法】DSA签名算法的Python实现 | 物联网安全 | 信息安全

    系列索引:【图解安全加密算法】加密算法系列索引 Python保姆级实现教程 | 物联网安全 | 信息安全 DSA数字签名算法基于SHA1哈希算法,关于SHA1的实现看另一篇文章。 数字签名标准(DSS)由NIST公布,该标准能够使接收者能够验证数据的完整性和数据发送者的身份而制定,所采用

    2024年02月06日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包