木星链 木星链
Ctrl+D收藏木星链
首页 > USDT > 正文

区块链:深入理解 EVM 存储机制及安全问题

作者:

时间:1900/1/1 0:00:00

前言

EVM是一个轻量级的虚拟机,其设计初衷就是提供一种可以忽略硬件、操作系统等兼容性的虚拟的执行环境供以太坊网络运行智能合约。

简单来说EVM是一个完全独立的沙盒,在EVM中运行的代码是无法访问网络、文件系统和其他进程的,以此来避免错误的代码能让智能合约毁灭或者影响外部环境。

在此基础上,知道创宇区块链安全实验室带大家一起深入理解EVM的存储机制和安全问题。

EVM存储结构

可以看到EVM存储数据分为两类:

存储在code和storage里的数据是non-volatile(不容易丢失的)

南宁市深入推进“区块链+”人社应用和“打包快办”服务改革:8月20日,南宁市人社局召开专题党组会,传达学习市委十二届十次全体(扩大)会议精神,并就抓好贯彻落实作出部署。会议强调,局系统广大党员干部要将思想认识统一到市委决策部署上来,将学习贯彻市委十二届十次全体(扩大)会议精神和年度工作任务相结合,扎实推进各项中心工作;抓重点攻难点,切实保障和改善民生,千方百计保就业,兜住基本民生底线,深入推进“智慧人社”工作,深化“一门式”服务改革,深入推进“区块链+”人社应用和“打包快办”服务改革,确保完成全年目标任务。(南宁日报)[2020/8/23]

存储在stack,args,memory里数据是volatile(容易丢失的)

现场 | 姜海:密码学将随着黎曼猜想等理论研究的深入迎来大发展:金色财经现场报道,今日,2018可信区块链峰会在北京召开。在主题为“区块链安全焦点关注”的区块链安全论坛上,丁牛科技有限公司CEO姜海结合最近黎曼猜想被证明引起了密码学界的高度关注,分析了黎曼猜想与区块链密码安全。他提出,尽管黎曼猜想的证明对于传统密码安全有极大的冲击,但是区块链技术的安全建立在SHA-256、椭圆曲线、算法校验等基础之上,在使用过程中能够极大地抵抗密码攻击。尽管最近有很多的安全事件发生,而其根本原因在于程序的违规操作。未来随着随机发生器、量子计算机以及黎曼几个等基础理论的研究,密码学将会有更大的发展空间。[2018/10/10]

各个存储位置的含义

西安高新区:聚焦区块链等技术,深入实施“金融创新攻坚大行动”:据西安日报报道,西安高新区今年将全面实施八大行动。西安市将深入实施“金融创新攻坚大行动”,聚焦区块链、人工智能和大数据等金融科技热点,形成“一带两港一基地”金融产业发展新格局。[2018/5/2]

Code

code部署合约时储存data字段也就是合约内容的空间,即专门存储智能合约的二进制源码的空间

Storage

Storage是一个可以读写修改的持久存储的空间,也是每个合约持久化存储数据的地方。Storage是一个巨大的map,一共2^256个插槽(slot),每个插糟有32byte,合约中的“状态变量”会根据其具体类型分别保存到这些插槽中。

中国发展高层论坛将对区块链技术进行深入讨论:2018年中国发展高层论坛将于3月24至26日在北京举行,中国发展研究基金会相关人士表示,中国发展高层论坛在今年迎来了第19届。围绕高质量发展、财税体制改革、供给侧结构性改革与金融政策、全面开放新格局、创新与未来等重大议题,中外方嘉宾将开展深入讨论。此外,参会嘉宾还将对中国改革开放四十周年、全球不平等、新时代的中美关系、一带一路、人工智能时代的产业转型、乡村振兴与农业现代化、金融创新与区块链革命等热点议题进行深入交流。[2018/2/26]

Stack

stack即所谓的“运行栈",用来保存EVM指令的输入和输出数据。可以免费使用,没有gas消耗,用来保存函数的局部变量,数量被限制在16个。stack的最大深度为1024,其中每个单元是32byte。

Args

args也叫calldata,是一段只读的可寻址的保存函数调用参数的空间,与栈不同的地方的是,如果要使用calldata里面的数据,必须手动指定偏移量和读取的字节数。

Memory

Memory一个简单的字节数组,主要是在运行期间存储数据,将参数传递给内部函数。基于32byte进行寻址和扩展。

EVM数据存储概述

前面已经说过Storage是每个合约持久化存储数据的地方其储存数据的方式是通过插槽来实现的,现在就具体介绍它是怎么实现的:

状态变量

1.对于大小在32字节以内的变量(常量),以其定义的顺序作为它的索引值来存储。即第一个变量的索引为key(0),第二个变量的索引为key(1)...

2.对于连续较小的值,可能被优化存储在同一个位置,比如:合约中前四个状态变量都是uint64类型的,则四个状态变量的值会被打包成一个32字节的值存储在0位置。

未优化:

pragmasolidity^0

??functionm()?externalreturns(uint256,uint256){????Infostorageinfo;????info

??functiontest(bytes32_name,address?_mappedAddress)public{????Personperson;????person.name=_name;????person.mappedAddress=_mappedAddress;????require(unlocked);?}}

漏洞合约分析:

可以看到该合约在函数部分创建新的结构体时没有进行初始化,由此我们可以利用该函数进行对owner的修改。不过使用该函数我们还要通过require验证,不过这也不难因为状态变量unlocked也同样在我们可控的范围内。

具体操作:

调用test函数分别传入向_name传入:0x0000000000000000000000000000000000000000000000000000000000000001(真值)

_mappedAddress传入:0xfB89eCb0188cb83c220aADDa1468C1635208e821(个人地址)

传参前:

传参后:

可以看到已经成功更改了地址。

总结

可以看到EVM的存储器就是一个key=>value的健值数据库,存储的数据可以通过校验和来确保一致。但是其也是和智能合约语言进行交互的,当其中一些规则发生冲突很可能就被别有用心的人用来作恶,所以规范的使用智能合约语言是避开漏洞的必要条件。

标签:区块链STORTORTORA哪个不是区块链特性Storage CoinTorii Financetourstorageserver

USDT热门资讯
数字货币:国际货币基金组织总裁指出,110个国家正在探索CBDC

国际货币基金组织总裁KristalinaGeorgieva最近在一次演讲中谈到了包括CBDC在内的数字货币.

1900/1/1 0:00:00
PERA:去中心化衍生品平台 Strips Finance 获 850 万美元融资,红杉资本印度和 Multicoin 等参投

链闻消息,据CoinDesk报道,去中心化衍生品平台StripsFinance通过代币销售筹集850万美元资金.

1900/1/1 0:00:00
DAO:DAO正在吞噬世界:解析 DAO 可能取代传统公司的原因

人类历史上,每一次重大疫情,都将改变历史进程。公元1350年左右,一场源自蒙古的鼠疫席卷欧洲,夺走了数千万人的生命,欧洲人口减少了三分之一。但在历史学家看来,这场鼠疫催生了现代西方文明.

1900/1/1 0:00:00
GATE:Gate.io 已发Gate.io 一周“实力宠新粉”,点卡、代币享不停(第二期)活动奖励公告

Gate.io一周“实力宠新粉”,点卡、代币享不停活动已圆满结束,根据活动规则,我们已为符合规则的用户发放了活动奖励。用户可进入“钱包—账单明细”查询奖励发放情况。活动详情及规则请点击查看.

1900/1/1 0:00:00
ENT:加密风投公司Paradigm寻求筹集15亿美元

金色财经报道,根据CoinDesk获取的文件,由Coinbase联合创始人FredEhrsam领导的加密货币风险投资公司Paradigm正在寻求筹集15亿美元资金用于投资初创公司.

1900/1/1 0:00:00
NFT:三分钟速览 NFT 局常见类型汇总及防范措施

来源|@DCLBlogger作者|Matty1/现在NFT圈内局猖狂肆虐,我因此特地写了一条帖子,简要列出我见过的局类型,以及如何防范局.

1900/1/1 0:00:00