07 区块链安全技术
概述
区块链的安全特性
区块链解决了在不可靠网络上可靠地传输信息的难题,由于不依赖与中心节点的认证和管理,因此防止了中心节点被攻击造成的数据泄露和认证失败的风险。
区块链安全防护的三大特点
- 共识机制代替中心认证机制
- 数据篡改“一发动全身”
- 抵抗分布式拒绝服务(DDoS)
安全性技术挑战
安全性威胁是区块链迄今为止所面临的最重要的问题之一,面临着五方面的安全性挑战:
- 算法安全性
- 协议安全性
- 使用安全性
- 实现安全性
- 系统安全性
最大隐患-智能合约
智能合约技术过于新颖,同时又与资金联系过于紧密,很多黑客利用大量时间去研究智能合约的漏洞,一旦找到漏洞,他们便立刻发起攻击,让很多项目方和参与者损失惨重。
隐患产生原因
智能合约具有不可篡改性,一旦被部署上线便无法修改。
很多项目会公开智能合约源码。
智能合约的开发过程存在纰漏。
整数溢出
若数值超出了变量类型所能表示的范围,则会导致溢出。溢出主要可分为两种情况,即整数上溢(overflow)和下溢(underflow)。
简单举例:
代码实例
在solidity智能合约中,uint8表达的是一个8位的无符号整数,它的取值范围是0-255,一旦两个数运算后超过255,那么就将出现溢出。
攻击方法:
向withdraw函数传入大于accountBalance的参数_value,使得accountBalance-_value的结果为正数(发生整数溢出)。
漏洞修复:
将代码中的require语句改为require(accountBalance > _value),避免了加减运算所造成的整数溢出。
解决方法
运用safeMath合约
源自OpenZeppelin提供的合约库:专门为了解决整数溢出而做出的安全数学库,且使用简单
使用Solidity编译器
使用Solidity编译器是0.8.0以上版本:编译器会对溢出问题自动进行限制
交易依赖攻击
区块链系统的交易是需要矿工打包确认的,而整个过程有一定的延迟性,攻击者可以利用这样的特性进行攻击。
攻击流程概要
- 攻击者提交一个有奖竞猜合约,让用户找出这个问题的解,并允诺给予丰厚的奖励
- 攻击者提交完合约后就持续监听网络,观察是否有人提交了答案的解
- 有人提交答案,此时提交答案的交易还未确认,攻击者就马上发起一个交易降低奖金的数额使之无限接近0
- 攻击者提供较高的Gas,使得自己的交易先被矿工处理
- 矿工先处理提交答案的交易时,答案提交者所获得的奖励将变得极低,攻击者就能几乎免费获得正确答案
解决方案
限制Gas上限
加密交易
时间戳依赖攻击
时间戳(timestamp),一个能表示一份数据在某个特定时间之前已经存在的、完整的、可验证的数据,通常是一个字符序列,唯一地标识某一刻的时间。
时间戳的值
从格林威治时间1970年01月01日00时00分00秒起,截止到现在的总秒数。
引入时间戳的原因
UTXO和时间戳技术结合可以解决双花攻击的记账后双花问题。
时间戳的作用
在区块链中扮演了公证人的角色,比传统的公正制度更为可信。
时间戳依赖攻击解读
背景
智能合约中使用了时间戳作为依赖条件
出现问题原因
- 矿工可以对时间戳动手脚
- 矿工可以设置未来的比较接近时间戳作为块时间戳
- 因此时间戳的限制条件对矿工形同虚设
如何解决
- 不要在伪随机数产生代码中使用时间戳
- 尽量不要让时间戳对游戏规则起到决定性作用
算法错误
一个智能合约是一套以数字形式定义的承诺(commitment),包括合约参与方可以在上面执行这些承诺的协议。
算法缺陷由以下两个方面导致的:
智能合约缺乏统一规范
智能合约的开发者水平参差不齐
底层函数误用
在智能合约开发过程中,需要跨合约调用,而跨合约如果误用了底层函数,很可能送给黑客攻击的机会。
底层函数误用的危害包括但不限于以下几种
盗走TOKEN
绕过权限检查
传入虚假数据
权限验证错误
权限验证错误也是智能合约开发过程中经常容易出现的错误。在这类错误中,有些是开发者疏忽而导致权限控制形同虚设。
共识安全
51%攻击
在不同的共识算法中,51%有不同的表现方式。比如PoW共识算法,攻击方只要控制了超过51%的算力,就可以按照自己的目标进行分叉从而影响交易。
我们不妨将“51%”和“攻击”分开理解,以便更好地认识这种攻击模式。
51%理解
51%的算力不是绝对的:作恶节点算力>诚实节点算力
算力竞争只是竞争的一方面:51%指的不仅是算力,更是指网络节点的接受度
攻击理解
算力竞争本身并不是攻击
51%攻击达成,某条链将被摧毁,攻击方和防守方都会一无所获
女巫攻击
女巫攻击的提出者将这种攻击定义为一种网络安全威胁,这种威胁是由网络某些节点谎称自己拥有多个身份而造成的。
攻击者可以伪造多个身份加入网络
当攻击者伪造了一定数量的节点和身份后,便有机会威胁到区块链网络
女巫攻击存在,是因为计算网络很难保证每一个未知的节点是一个确定的物理的计算机
女巫攻击的实际表现
女巫攻击会带来很多危害,但也并非全是恶意的。
女巫攻击 | 恶意 | 降低区块链网络节点的查询效率 |
传输非授权文件、破坏网络中文件共享 | ||
正向应用 | 对抗僵尸网络 |
双花攻击
双花攻击是虚拟数字货币特有的攻击方式,在法币现金系统下是不存在双花攻击的,人们一手交钱一手交货的行为并不会出现双花。
依托于区块链能够分叉机制
网络安全
分布式拒绝服务攻击概念与分类
当黑客使用网络上两个或以上被攻击的电脑作为“僵尸”向特定的目标发动“拒绝服务’式攻击时,称为分布式拒绝服务攻击(Distributed Denial-of-Service attack,简称DDoS攻击)。
按拒绝对象可以分为两种类型
带宽消耗型攻击
资源消耗型攻击
按攻击行为可以分为两种类型
主动攻击
被动攻击
典型的攻击行为
SYN FLOOD攻击
利用TCP协议的一些特性发动的,通过发送大量伪造的TCP报文使目标服务器连接耗尽,达到拒绝服务的目的。
ACK FLOOD攻击
利用TCP三次握手的缺陷实现的攻击,迫使主机查询状态,消耗大量的CPU资源。
路由广播劫持
边界网关协议概念
边界网关协议(Border Gateway Protocol,缩写:BGP)是互联网上一个核心的去中心化自治路由协议。
路由广播劫持也指BCG劫持。
网络数据窃听
网络监听是指利用计算机的网络接口截获目的地为第三方计算机的数据报文的一种技术。当监听用于非法活动的时候,我们称之为网络窃听。
日蚀攻击
日蚀攻击的目标是使目标节点被隔离,它使一些攻击节点和目标节点建立连接,并阻止最新的区块信息传递到目标节点,将目标节点保留在一个隔离的网络中的攻击方式。
日蚀攻击的机制-分区
日蚀攻击可以将节点进行隔离,产生分区。恶意者可以针对分区产生进行破坏。
日蚀攻击行为-双花攻击
日蚀攻击产生分区之后双花攻击示意
病毒
根据《中华人民共和国计算机信息系统安全保护条例》,病毒的明确定义是“指编制或者在计算机程序中插入的破坏计算机功能或者破坏数据,影响计算机使用并且能够自我复制的一组计算机指令或者程序代码”。
病毒需要满足以下基本特征:
自行执行
自行复制
病毒危害
病毒危害性主要表现为以下两点:
- 损坏计算机
- 破坏交互性
蠕虫
蠕虫(worm)是一种可以利用操作系统存在的漏洞及其他相关漏洞传播自身的恶意软件,一种通过网络传播的恶性病毒。
蠕虫病毒的特性
- 自我传播
- 范围广
- 消耗内存或网络带宽
木马
木马是指那些表面上是有用的软件、实际目的却是危害计算机安全并导致严重破坏的计算机程序。
木马的特性
- 隐蔽性
- 非授权性
网络渗透
网络渗透是攻击者常用的一种攻击手段。
渗透攻击不同于普通网络攻击,它是一个更高级的、渐进式的综合攻击方式。
网络渗透划分
- 正向渗透
- 恶意渗透
数据安全
数据安全概述
根据《中华人民共和国数据安全法》,数据安全是指通过采取必要措施,确保数据处于有效保护和合法利用的状态,以及具备保障持续安全状态的能力。
字典攻击
字典攻击通常也会被称为彩虹表攻击,它实际是一种以空间换时间的手段。
抵御字典攻击的手段通常是在哈希运算时的输入项做文章。通过一个函数我们来说明一下。
后门攻击
后门攻击指的是在信息系统中存在非公开访问控制途径,可以绕开信息系统合法访问控制体系,隐蔽地获取计算机系统远程控制权,或者加密系统的密钥或受保护信息的明文。
后门攻击方式
- 欺诈方式
- 攻陷方式
- 开发方式
交易聚类攻击
所谓交易聚类攻击,就是对交易进行聚类分析,进而得到交易参与方的一些属性或个人隐私信息,最终达到攻击的目标。
侧信道攻击
是一种利用计算机不经意间释放出的信息信号(如电磁辐射,电脑硬件运行声)来进行破译的攻击模式。
1985年,计算机研究人员发现通过远距离检测电脑屏幕放电的电信号,在电脑屏幕上可以重建图像。
2015年,研究人员发现通过使用望远镜观察室内悬挂的灯泡的振动,可以窃听房间内的对话。
类型
根据侧信道信息的不同,主要攻击方式可分为以下四种攻击。其中功耗攻击是最强有力的手段之一。
功耗分析攻击
故障注入攻击
电磁信道攻击
时序攻击
密钥泄露
用户私钥在密码系统中具有举足轻重的地位,它的泄露意味着系统安全性的彻底丧失。
密钥泄露的发生不可避免,那么就应当采取合适的技术来尽量减轻它所带来的危害,而不仅仅是预防它的发生。
核心思想:在保持公钥不变的前提下,对用户私钥采取进化的处理方法
密钥泄露防御
前向安全(Forward-Security)
前向安全的密码机制虽然可以保证在密钥泄露发生之前的安全性,但是不能保证之后的安全性。
密钥隔离(Key-Insulation)
入侵回弹(Intrusion-Resilience)
单点故障
指的是单个节点发生的故障导致整个链路瘫痪。
节点可以是:
- 一台服务器
- 一个数据库
- 一台网络设备
- 乃至一个应用程序
区块链隐私保护
数字签名
数字签名在ISO7498-2标准中定义为:“附加在数据单元上的一些数据,或是对数据单元所做的密码变换,这种数据和变换允许数据单元的接收者用以确认数据单元来源和数据单元的完整性,并保护数据,防止被人(例如接收者)进行伪造”。
盲签名
概念
盲签名是签名者看不到要签署的文件而完成签名,是接收者在不让签名者获取所签署消息具体内容的情况下所采取的一种特殊的数字签名技术。
特点
- 要签名的文件对于签名者是不可见
- 签名者本人也无法追踪之前的签名
性质
一般来说,一个好的盲签名应该具有以下性质
- 不可伪造性
- 不可抵赖性
- 盲性
- 不可跟踪性
操作过程
- 接收者首先将待签数据进行盲变换,把变换后的盲数据发给签名者。
- 经签名者签名后再发给接收者
- 接收者对签名再做去盲变换,得出的便是签名者对原数据的盲签名
- 使签名者事后看到盲签名时不能与盲数据联系起来,需要依靠某种协议来实现的
群签名
概念
群签名(group signature)就是满足这样要求的签名:在一个群签名方案中,一个群体中的任意一个成员可以以匿名的方式代表整个群体对消息进行签名。
特征
- 目的:允许用户代表群签名消息,并在该群内保持匿名
- 群管理员可以通过使用秘密信息(密钥))来消除(恶意)用户的匿名性
- 群管理员要负责添加群成员,并能够在发生争议时揭示签名者身份
功能
群签名在生活中有诸多应用,比如在公共资源的管理,重要军事情报的签发,重要领导人的选举,尤其是在电子现金系统中。
流程
创建->加入->签名->认证->打开
环签名
环签名是一种数字签名,可由一组用户中的任何成员执行,每个用户拥有密钥。因此,用环签名签名的消息由特定人群中的某个人背书。
安全性要求
一个好的环签名必须满足以下的安全性要求
- 无条件匿名性
- 不可伪造性
- 环签名具有良好的特性
特征
环签名是一种特殊的群签名,没有可信中心,没有群的建立过程,对于验证者来说,签名人是完全正确匿名的。环签名在对信息需要长期保护的一些特殊环境中非常有用。
环签名的特征
- 正确性
- 无条件匿名性
- 不可伪造性
零知识证明
零知识证明(Zero-Knowledge Proof)是指证明者(prover)能够在不向验证者(verifier)提供任何有用的信息的情况下,使验证者(verifier)相信某个论断是正确的。
基本性质
- 正确性
- 完备性
- 零知识性
同态加密
同态加密(Homomorphic encryption)是一种加密形式,它允许人们对密文进行特定形式的代数运算得到仍然是加密的结果,将其解密所得到的结果与对明文进行同样的运算结果一样,即“可算不可见”。
分类
全同态加密
半同态加密
应用
同态加密技术在分布式计算环境下的密文数据计算方面具有比较广泛的应用领域
安全云计算与委托计算
文件存储与密文检索
安全多方计算协议设计的工具
电子选举
安全多方计算
安全多方计算(Secure Multi-Party Computation)是密码学的一个子领域,其目标是为各方创建方法以在其输入上联合计算函数,同时保留这些输入的私密性。
特点
安全多方计算理论主要研究参与者间协同计算及隐私信息保护问题,其有三大特点:
- 输入隐私性
- 计算正确性
- 去中心化
相关文章:

07 区块链安全技术
概述 区块链的安全特性 区块链解决了在不可靠网络上可靠地传输信息的难题,由于不依赖与中心节点的认证和管理,因此防止了中心节点被攻击造成的数据泄露和认证失败的风险。 区块链安全防护的三大特点 共识机制代替中心认证机制数据篡改“一发动全身”…...

Adobe的AI生成3D数字人框架:从自拍到生动的3D化身
一、引言 随着人工智能技术的发展,我们见证了越来越多创新工具的出现,这些工具使得图像处理和视频编辑变得更加智能与高效。Adobe作为全球领先的创意软件公司,最近推出了一项令人瞩目的新技术——一个能够将普通的二维自拍照转换成栩栩如生的三维(3D)数字人的框架。这项技…...

dfs专题四:综合练习
key:画出决策树(就是找个简单例子模拟一下的树状决策图) dfs传参 or 全局变量: int, double等常量/比较小的变量,可以dfs参数传递vector等线性O(N)变量,要用全局变量 回溯&#x…...

【线性代数】列主元法求矩阵的逆
列主元方法是一种用于求解矩阵逆的数值方法,特别适用于在计算机上实现。其基本思想是通过高斯消元法将矩阵转换为上三角矩阵,然后通过回代求解矩阵的逆。以下是列主元方法求解矩阵 A A A 的逆的步骤: [精确算法] 列主元高斯消元法 步骤 1&am…...

大写——蓝桥杯
1.题目描述 给定一个只包含大写字母和小写字母的字符串,请将其中所有的小写字母转换成大写字母后将字符串输出。 输入描述 输入一行包含一个字符串。 输出描述 输出转换成大写后的字符串。 输入输出样例 示例 输入 LanQiao输出 LANQIAO评测用例规模与约定 对…...

HTML `<head>` 元素详解
在 HTML 文档中,<head> 元素是一个非常重要的部分,它包含了文档的元数据(metadata)和其他与文档相关的信息。虽然 <head> 中的内容不会直接显示在网页上,但它对网页的行为、样式和搜索引擎优化(…...

一文速通stack和queue的理解与使用
CSTL之stack和queue 1.stack1.1.stack的基本概念1.2.stack的接口 2.queue2.1.queue的基本概念2.2.queue的接口 3.priority_queue3.1.priority_queue的基本概念3.2.priority_queue的接口3.3.仿函数 4.容器适配器5.deque5.1.deque的简单了解5.2.deque的优缺点 🌟&…...

Antd React Form使用Radio嵌套多个Select和Input的处理
使用Antd React Form使用Radio会遇到嵌套多个Select和Input的处理,需要多层嵌套和处理默认事件和冒泡,具体实现过程直接上代码。 实现效果布局如下图 代码 <Formname"basic"form{form}labelWrap{...formItemLayoutSpan(5, 19)}onFinish{on…...

Vue - toRefs() 和 toRef() 的使用
一、toRefs() 在 Vue 3 中,toRefs()可以将响应式对象的属性转换为可响应的 refs。主要用于在解构响应式对象时,保持属性的响应性。 1. 导入 toRefs 函数 import { toRefs } from vue;2. 将响应式对象的属性转换为 ref const state reactive({count: 0,message:…...

Python3 OS模块中的文件/目录方法说明九
一. 简介 前面文章简单学习了 Python3 中 OS模块中的文件/目录的部分函数。 本文继续来学习 OS 模块中文件、目录的操作方法:os.pipe() 方法、os.popen() 方法。 二. Python3 OS模块中的文件/目录方法 1. os.pipe() 方法 os.pipe() 方法用于创建一个管道, 返回…...

OpenCV文字绘制支持中文显示
OpenCV版本:4.4 IDE:VS2019 功能描述 OpenCV绘制文本的函数putText()不支持中文的显示,网上很多方法推荐的都是使用FreeType来支持,FreeType是什么呢?FreeType的官网上有介绍 FreeType官网 https://www.freetype.or…...

opengrok_windows_多工程环境搭建
目录 多工程的目录 工程代码下载和log配置 工程的索引 工程部署 工程测试 参考列表 多工程的目录 工程代码下载和log配置 工程代码下载 在每个工程的src目录下,下载工程代码,以下载pulseaudio的代码为例。 git clone gitgithub.com…...

基于ollama,langchain,springboot从零搭建知识库三【解析文档并存储到向量数据库】
安装环境 安装pgvector,先设置docker镜像源: vim /etc/docker/daemon.json {"registry-mirrors": ["https://05f073ad3c0010ea0f4bc00b7105ec20.mirror.swr.myhuaweicloud.com","https://mirror.ccs.tencentyun.com",&…...

Elasticsearch 和arkime 安装
安装一定要注意版本号,不然使用不了 这里Ubuntu使用ubuntu-20.04.6-desktop-amd64.iso elasticsearch这里使用Elasticsearch 7.17.5 | Elastic arkime这里使用wget https://s3.amazonaws.com/files.molo.ch/builds/ubuntu-20.04/arkime_3.4.2-1_amd64.deb 大家想…...

git回退
git回退 1、未使用 git add 缓存代码时 git checkout –- filepathname 放弃单个文件的修改 git checkout . 放弃所有的文件修改 此命令用来放弃掉所有还没有加入到缓存区(就是 git add 命令)的修改:内容修改与整个文件删除。但是此命令不…...

pytest+playwright落地实战大纲
前言 很久没有更新博客,是因为在梳理制作Playwright测试框架实战相关的课程内容。现在课程已经完结,开个帖子介绍下这门课程(硬广, o(〃^▽^〃)o) 课程放在CSDN学习频道, 欢迎关注~ PyTestPl…...

01-硬件入门学习/嵌入式教程-CH340C使用教程
前言 CH340C广泛应用于DIY项目和嵌入式开发中,用于USB数据转换和串口通信。本文将详细介绍CH340C的基本功能、引脚接线及使用方法。 CH340C简介 CH340C是一款USB转TTL电平转换器,可以将电脑的USB数据转换成串口数据,方便与单片机ÿ…...

小试牛刀调整Prompt,优化Token消耗
在上一篇文章 荒腔走板Mac电脑本地部署 LLM 中介绍过本地部署大模型之后,可以通过定制 prompt 来实现 domain 提取等各种各样的需求。 但是实际上,部署本地大模型 这种方式对于个人开发者来说实在是不太友好。一方面需要投入大量资金确保设备的算力足够支…...

snippets router pinia axios mock
文章目录 补充VS Code 代码片段注册自定义组件vue routerpinia删除vite创建项目时默认的文件axiosmock3.0.x版本的 viteMockServe 补充 为文章做补充:https://blog.csdn.net/yavlgloss/article/details/140063387 VS Code 代码片段 为当前项目创建 Snippets {&quo…...

Visual Studio2019调试DLL
1、编写好DLL代码之后,对DLL项目的属性进行设置,选择待注入的DLL,如下图所示 2、生成DLL文件 3、将DLL设置为启动项目之后,按F5启动调试。弹出选择注入的exe的界面之后,使用代码注入器注入步骤2中生成的dll࿰…...

深入解析:Docker 容器如何实现文件系统与资源的多维隔离?
目录 一、RootFs1. Docker 镜像与文件系统层2. RootFs 与容器隔离的意义 二、Linux Namespace1. 进程命名空间1.1 lsns 命令说明1.2 查看“祖先进程”命名空间1.3 查看当前用户进程命名空间 2. 容器进程命名空间2.1 查看容器进程命名空间列表2.2 容器进程命名空间的具体体现 三…...

vue项目中打包后的地址加载不出图片【五种解决方案】
在 Vue 项目中打包后,加载图片路径可能会出现问题,主要是因为打包后的路径与开发时的路径不同。为了确保图片可以正确加载,你可以考虑以下几种方法: 1. 使用 require 或 import 动态加载图片 如果你在 Vue 的模板或者脚本中引用…...

讯飞星火大模型将超越chatgpt?
讯飞星火大模型真的能超越ChatGPT吗? 在人工智能的世界里,新技术层出不穷,而科大讯飞最近发布的讯飞星火大模型3.0引发了不少讨论。有些人甚至大胆猜测:这个模型是否能够在某些方面超越如今广受欢迎的ChatGPT?今天,我们就来深入探讨一下这个话题,分析讯飞星火大模型3.0…...

3D Vision--计算点到平面的距离
写在前面 本文内容 计算点到平面的距离 平台/环境 python open3d 转载请注明出处: https://blog.csdn.net/qq_41102371/article/details/121482246 目录 写在前面准备Open3D代码完 准备Open3D pip install open3d代码 import open3d as o3ddef compute_points2…...

《开源与合作:驱动鸿蒙Next系统中人工智能技术创新发展的双引擎》
在当今科技飞速发展的时代,鸿蒙Next系统作为一款具有创新性和前瞻性的操作系统,为人工智能技术的发展提供了广阔的舞台。而开源和合作则是推动鸿蒙Next系统中人工智能技术创新和发展的两大关键引擎。 开源:创新的源泉 代码共享与知识传播&am…...

Java 高级工程师面试高频题:JVM+Redis+ 并发 + 算法 + 框架
前言 在过 2 个月即将进入 3 月了,然而面对今年的大环境而言,跳槽成功的难度比往年高了很多,很明显的感受就是:对于今年的 java 开发朋友跳槽面试,无论一面还是二面,都开始考验一个 Java 程序员的技术功底…...

【机器学习】嘿马机器学习(科学计算库)第11篇:Pandas,学习目标【附代码文档】
本教程的知识点为:机器学习(常用科学计算库的使用)基础定位 机器学习概述 机器学习概述 1.5 机器学习算法分类 1 监督学习 机器学习概述 1.7 Azure机器学习模型搭建实验 Azure平台简介 Matplotlib 3.2 基础绘图功能 — 以折线图为例 1 完善原…...

WordPress Fancy Product Designer插件Sql注入漏洞复现(CVE-2024-51818)(附脚本)
免责申明: 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 0x0…...

StarRocks强大的实时数据分析
代码仓库:https://github.com/StarRocks/starrocks?tabreadme-ov-file StarRocks | A High-Performance Analytical Database 快速开始:StarRocks | StarRocks StarRocks 是一款高性能分析型数据仓库,使用向量化、MPP 架构、CBO、智能物化…...

Linux(Centos 7.6)命令详解:iconv
1.命令作用 将给定文件的编码从一种编码转换为另一种编码(Convert encoding of given files from one encoding to another) 2.命令语法 Usage: iconv [OPTION...] [FILE...] 3.参数详解 OPTION: 输入/输出格式规范: -f, --from-codeNAME,原始文本编码-t, --t…...