算法复杂度攻击

Solana底层数学库DOS漏洞深度解析:算法复杂度攻击与防御实践 在区块链和密码学应用中,大整数模幂运算是核心基础操作,用于数字签名验证、零知识证明等关键场景。其原理是通过快速幂算法计算a^b mod m的值,性能直接影响系统吞吐量。然而,当算法实现缺乏严格的输入验证时,可能遭受算法复杂度攻击,攻击者通过构造特定参数触发最坏时间复杂度路径,导致CPU资源被耗尽。这种攻击对Solana等高并发公链尤其危险,可能影响网络稳定性。本文以Solana底层数学库的DOS漏洞为例,结合模糊测试和静态分析,探讨如何通过输入验证、资源限制和算法优化构建防御体系,为区块链开发者提供关键库安 阅读详情

1. Hashing

我们经常使用这样的字符串的Hash函数:

// 随手写的,未严格测试
unsigned long Hash(char* str)
{
    assert(NULL != str);

    unsigned long hash_val = 0xDEEDBEEFul;   // hash seed
    unsigned char* p = (unsigned char*)str;

    while (*p != '/0') {
        hash_val = 37 * hash_val + *p;
        ++p;
    }

    return hash_val;

}

《程序设计实践》第3章的Markov Chain的实现就使用了几乎一摸一样的Hash函数。这个函数的优点是速度快,英文单词的Hash值的分布也不错。但是,它太简单,容易受到攻击。攻击一般有两种方案:1) 构造一个输入序列,让序列中的每个字符串彼此不同,但Hash值相同;2) 构造一个输入序列,序列中每个字符串彼此不同,Hash值也不一定相同,但是这些Hash值对所用Hash Table的buckets数目同余(即hash_val % bucket_size 相等)。这样就能让Hash Table退化为链表。从而大大增加查找时间。(http://www.cs.rice.edu/~scrosby/hash/)

要解决这个问题,需要用复杂得多的Hash函数(MD5、SHA-1),让攻击者(几乎)无法构造出Hash值相同的序列。

2. Regular Expressions

Regular Expression Engine 一般有三种:DFA (Deterministic Finite Automaton)、traditional NFA (Nondeterministic Finite Automaton)、POSIX NFA。这三种engines的功能一个比一个强,速度一个比一个慢。(http://msdn.microsoft.com/library/en-us/cpguide/html/cpconmatchingbehavior.asp) (http://www.oreilly.com/catalog/regex/chapter/ch04.html)

DFA 速度最快,可以保证线性时间(?)。NFA需要使用backtracking(回溯)技术,以支持backreference(向前引用),通常NFA是线性时间,但是其最坏情况是指数时间!

举例来说,表达式 (x+x+)+y 可以匹配 xxx...xxxy 但不能匹配 xxx...xxxx。在某个版本的Python中,这个表达式的匹配是指数时间。(http://mail.python.org/pipermail/python-dev/2003-May/035916.html)

3. Quicksort

Quicksort的平均运行时间是O(N log N),但可能退化为 O(N^2),这是数据结构课程的必讲内容。C library 的 qsort 就不能保证一定是“快速”排序。(http://www.cs.dartmouth.edu/~doug/mdmspe.pdf)。C++ library 的 sort() 在改造之前,也可能退化为 O(N^2) 的龟速排序。SGI STL 的 sort() 使用了 a new, hybrid sorting algorithm, introsort (for introspective sort), that behaves almost exactly like median-of-3 quicksort for most inputs (and is just as fast) but which is capable of detecting when partitioning is tending toward quadratic behavior. By switching to heapsort in those situations, introsort achieves the same O(N logN) time bound as heapsort but is almost always faster than just using heapsort in the first place. (http://www.cs.rpi.edu/~musser/gp/algorithms.html) 。该排序算法的分析见 (http://www.cs.rpi.edu/~musser/gp/introsort.ps)

头歌 DNS协议分析第3关----DNS 报文分析 DNS 报文分析 阅读详情

相关推荐

ESP32蓝牙配网实战:微信小程序中的blufi协议实现与优化

本文详细介绍了在微信小程序中实现ESP32蓝牙配网的实战经验,重点解析了blufi协议的应用与优化。内容涵盖从开发环境配置、协议帧格式解析,到小程序端蓝牙通信、数据转换的核心步骤,并提供了配网状态机设计、错误处理及性能调优等进阶方案,旨在帮助开发者高效、稳定地完成物联网设备配网功能开发。

weixin_29159613的博客 458

网络安全学术顶会——S&P 2023 议题清单、摘要与总结(中)

注:本文由ChatGPT与Claude联合生成51、Effective ReDoS Detection by Principled Vulnerability Modeling and Exploit Generation正则表达式拒绝服务攻击(ReDoS)是一种算法复杂度攻击。对于易受攻击的正则表达式,攻击者可以精心制作某些字符串来触发超线性最坏情况匹配时间,从而导致正则表达式引擎的拒绝服务。最...

漏洞战争 5881

MTK metadata中AF模块的移除与配置调整

本文详细介绍了在MTK平台Camera开发中如何移除metadata中的AF(自动对焦)模块。通过系统清理MTK_CONTROL_AF_REGIONS、MTK_CONTROL_MAX_REGIONS等关键配置项,并调整对焦模式及硬件特性声明,确保定制化设备在禁用自动对焦功能后的稳定运行。

q1w3e5r7t9y的博客 570

AI算法对抗攻击和防御技术综述「AI核心算法」

关注:决策智能与机器学习,深耕AI脱水干货作者 |任奎报道 |中国人工智能学会随着计算机产业发展带来的计算性能与处理能力的大幅提高,人工智能在音视频识别、自然语言处理和博弈论等领...

九三智能控 4301

避开这些坑!海天MA1600注塑机数据采集项目经验分享

本文分享了海天MA1600注塑机数据采集项目的实战经验。针对KEBA控制器接口不开放的难题,项目采用专用网关进行协议转换,并详细剖析了网络部署、ModbusTCP配置、数据准确性保障及现场运维中遇到的典型陷阱与解决方案,为同类工业物联网项目提供宝贵参考。

o4p5q6r7s的博客 491

重头开始学ROS(8)---LVI-SAM复现与实机部署Ubuntu20.04以及如何适配6轴imu

本文详细记录了在Ubuntu20.04环境下复现LVI-SLAM系统的过程,主要包含四个部分:源码编译、问题解决、数据录制和6轴IMU适配。在编译过程中遇到GTSAM、PCL版本、OpenCV路径等典型问题并给出解决方案;详细说明了ROS bag包的录制规范;针对6轴IMU硬件限制,提供了核心代码修改方案。文章为LVI-SLAM系统在非标准环境下的部署提供了实用参考,特别适合需要适配不同硬件配置的研究者。

qq_73991479的博客 1558

人工智能安全:如何应对恶意软件攻击

1.背景介绍 随着人工智能技术的不断发展,人工智能安全问题也日益凸显。恶意软件攻击成为人工智能系统的重要挑战之一。本文将从多个角度深入探讨人工智能安全问题,并提出一些有效的应对方法。 人工智能安全问题的背景主要有以下几点: 随着人工智能技术的不断发展,人工智能系统的应用范围不断扩大,涉及到的安全问题也日益复杂。 人工智能系统的训练数据来源多样,如果训练数据存在恶意攻击,可能导致人工智能模型...

AI天才研究院 1967

Supermind量化实战:我如何给双均线策略加上“止损”和“仓位管理”,让回测收益更稳健

本文详细介绍了如何在Supermind平台上为双均线策略添加止损和仓位管理模块,以提升量化交易的稳健性。通过Python实现动态止损和智能仓位管理,策略的年化收益率从12.3%提升至15.8%,最大回撤从58.7%降至22.4%,Sharpe比率显著提高。这些实战技巧适用于量化交易爱好者,帮助他们在黑天鹅行情中保持收益稳定。

weixin_42567752的博客 363
上一篇: 书评:《C# Primer》 by Joe Casad
下一篇: Microsoft Visual C++ Toolkit 2003 发布
陈硕
博客等级 码龄26年 1万+粉丝 144原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值