重放攻击问题
Created|Updated
|Word Count:245|Reading Time:1mins|Post Views:
比特币靠不同的地址前缀可以规避重放攻击问题。
以太坊可以靠 EIP155 钱包来规避重放攻击问题。
何为重放攻击问题?
一个区块链有若干个测试网络。如果一套公私钥可以在不同的网络上通用,则可以恶意地把在测试网络中出现的 transaction 播放到主网上。如果在测试网络上有人从账户 A 转了一笔钱到账户 B,而账户 B 是一个傻瓜测试账户,私钥是由类似123456之类的种子生成的话。那么只要账户 A 在主网中的余额大于这笔钱,心怀恶意者就能把主网中 A 的钱财转走,从主网中的账户 B 里把钱取出来。即使心怀恶意者没有 B 的取款方法,也能让账户 A 蒙受资金损失。
所以不要跨网使用相同的公私钥对。
Author: magicliang
Link: https://magicliang.github.io/2018/03/08/%E9%87%8D%E6%94%BE%E6%94%BB%E5%87%BB%E9%97%AE%E9%A2%98/
Copyright Notice: All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.
Related Articles

2018-03-12
以太坊中的事务和消息调用
综合What is the difference between a “call” , “message call” and a “message”下的回复,得出此文。 Call 是一个在不同的上下文下含义很混乱的词汇。 Message 是带有数据载荷或价值,在合约到合约之间传递的东西(合约可能有独立账户,也可能没有!)。Message 到达目标账户后,如果目标账户含有代码,则目标账户会产生状态迁移,这时候 Message 就产生了 Message Call。Message 不会因为挖矿延迟,他们本身就是 transaction 执行的一部分。 Transaction 一定是由外部账户签署的,账户到账户之间发送的 Message ,要么它产生了一个合约,要么它是一个 Message Call,而且它可以激发合约之间越来越多的 Message Call。 再引用 Solidity 官方文档原文: A transaction is a message that is sent from one account to another account (which might be t...

2018-08-29
在Centos 6.7 上安装并使用web3(旧文一篇)
不要使用默认 gcc,会编译安装 web3失败。 12345678910111213sudo yum erase -y gcc gcc-c++ sudo yum install -y centos-release-scl sudo yum install -y devtoolset-3-toolchain scl enable devtoolset-3 bash yum remove -y nodejs curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash - sudo yum -y install nodejs 不能使用全局安装,要尽量本地安装: 123456mkdir calc-nodenpm initnpm install web3 # 照理来说这样也应该 work,但就是不 worknpm install -g web3 --unsafe-perm=true --allow-root web3 本身是一系列 nodejs 模块的集合,包括但不限于 web3-eth 针对以太坊区...

2018-08-29
在CentOS 6.7上用 geth 搭建以太坊私链网络的全部步骤(旧文一篇)
生成基本的路径 1mkdir -p ~/home/ethereum 如果 git 版本是 1.x,卸载旧的 git,安装最新版的 2.x 以上的 git: 1git version && yum erase -y git && yum install -y git 执行以下命令,编译以太坊客户端: 123456789yum install -y golangyum install -y gmp-develgit clone https://github.com/ethereum/go-ethereumcd go-ethereummake all# 生成基本路径mkdir -p ~/home/ethereum# 进入基本路径cd ~/home/ethereum 如果有“fatal: unable to access ‘https://github.com/ethereum/go-ethereum/’: Failed connect to github.com:443; Operation now in progress”考虑是容器的外网访问权限问题。...

2017-10-31
以太坊相关研究资料
《以太坊的 gas 费率一览表》 《以太坊学习笔记:私有链搭建操作指南》 《以太坊中的账户、交易、Gas和区块Gas Limit》 StackOverflow 上的问答:以太坊主链到底需要多大空间? StackOverflow 上的问答:怎样提供无限次数的智能合约操作? 《区块链技术-智能合约-以太坊 (译文)》 《以太坊官方文档》 《以太坊私有链搭建指南》 《以太坊关于搭建私有网络的 wiki》 《预充值以太坊资金的方法》。注意看 carchrae 的回复,这里面也提供了拷贝私钥复用私钥的方法,可以考虑在多节点的情况下使用。 《一本与参数有关的介绍怎样搭建私链的 gitbook》。 StackOverflow 上的问答:以太坊的网络难度是否可以静态锁死?注意看它还有个相关的子问题。如果网络算力的稳定的话,应该不会出现难度增长才对。 值得大读特读的 geth 的文档。特别是挖矿、账户管理的部分。 geth 的命令行选项。注意,有些选项在当前版本中已经消失了,如(gpomin、gpomax)。 StackOverflow 上的问答:如何降低测试网络中的难度。感觉没多大用。 搜索以...

2018-03-11
精通比特币读书笔记
第一章 介绍 传统货币的防止双花,必须在一个中心化(centralized)的清算所(clearing house)里清算。比特币则用全局选举的机制达到共识,来清算双花问题。本质上来讲,就是把一个固定的中心化的清算过程,用选举的方式转化为无数个去中心化的局部清算过程。这就弥补了在比特币之前出现的数字货币的缺点。 clearing 在比特币网络里就被称作 mining 。 钱包是保存地址和管理密钥的地方。不要害怕公开自己的钱包地址。 全节点可以获取全部的交易信息,也因此可以验证交易,发出交易。硬件钱包是运转在专有硬件上的节点(树莓派?),冷钱包就是纸一类的东西。离线钱包是非常安全的。 第二章 比特币原理 比特币最多可以分割到一亿分之一的大小。 Transaction就像是复式记账法账簿上的行,即每行都有输入和输出。 简单来说,每一笔交易包含一个或多个“输入”,输入是针对一个比特币账号的提款(而不是债务)。 这笔交易的另一面,有一个或多个“输出”,被当成信用点数记入到比特币账户中。这些输入和输出的总额(负债和信用)不需要相等。相反,当输出累加略少于输入量时,两者的差额就代表了一笔隐含...

2018-03-08
重新学习 Solidity
以下内容还是从 Solidity 文档里摘出来的。 智能合约入门/介绍 第一个基本的例子 12345678910111213pragma solidity ^0.4.0;contract SimpleStorage { uint storedData; function set(uint x) public { storedData = x; } function get() public constant returns (uint) { return storedData; }} 一个 contract 可以被认为是一个类型。 默认的 unint 就是256位的。 storedData 可以被认为是 state variable,状态变量。在 Solidity 的概念里面,这个东西可以被认为是数据库里面的一个槽,可以被函数查询和修改。注意看它不是 public 的,所以没有合成方法。 访问状态变量不需要用 this前缀(在什么 scope 下都不需要吗?)。 ...





