重放攻击问题
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-02-20
闪电网络、侧链、隔离见证与大区块扩容问题
闪电网络 闪电网络的原理 闪电网络就是在链外专门设置一个通道(channel),所有的交易都在链上进行,只有最终结算在链上进行。这就好像我们的计算机体系结构里面加入的一个工作内存和主内存的 hiarachy。 过程描述如下: 假设我和你,咱俩人经常交易,于是就在闪电网络上开个通道,容量是2BTC; 通道里面AB在总量不超过2BTC的情况下随便相互收发,所有操作送到一个具有AB多重签名的地址,每次操作签名就好; 通道里面的操作没有手续费,因为真实的BTC在链上其实没动过,通道里面的操作本质上是只是对俩人那两个BTC份额所有权的交易; 等啥时候AB不想交易了,把隧道关闭,去真实的比特币主链上兑换一下自己在那两个BTC里的份额就好; 高手续费只发生在打开,或是关闭一个通道的时候。 为什么闪电网络会不安全 这种侧链的出现,必然会导致庞大的中间人出现: 网络上会演化出一些大的中间人节点,这些节点有足够多的BTC,足够的流动性,和足够多的通道数量,所以你再也不用担心高额的手续费,自己去找中间人等等一系列麻烦。 然而这些节点,和矿工不一样,他们并不和你直接交易BTC,他们更像是一种“第...

2018-08-29
在以太坊网络上使用智能合约 solidity(旧文一篇)
因为一个并不周知的 issue,geth 客户端将不再提供 solc 编译相关功能。我们必须借助外部编译器,比如 solc/remix。 所谓 Contract,只是 Martin fowler 的书里面经常提到的一个富血的类型罢了。 注意,要用高版本的 npm,来安装 solc: 1npm install -g solc 智能合约代码: 12345678pragma solidity ^0.4.0;contract TestContract{ function multiply(uint a, uint b) returns (uint) { return a * b; }} 用 solcjs 来编译代码: 12solcjs --bin testContract.solsolcjs --abi testContract.sol 它会产生 testContract_sol_TestContract.bin 和 testContract_sol_TestContract.abi。结尾应该是 Contract ...

2018-01-24
以太坊的硬分叉
有四次计划内的软件升级,每次都是硬分叉:Frontier,Homestead,Metropolis,Serenity。 有一次意料之外的分叉(DAO 事件),制造出 ETH 和以太经典两种货币。 每次分叉都会造成矿工的迁移。旧链会因为流失算力而丧失安全性。 大都会分叉本来打算引爆难度炸弹,迫使矿工们从 PoW 共识算法移动到 PoA 共识算法,让以太坊进入冰河时代。但这个难度炸弹的引爆被延后了。 大都会同样引入了一个 PoS 的早期实施,Casper共存 算法允许每一百个区块里会有一个 PoS 区块。关于 PoS 算法,Vitalik 的解释是: 想象现在有 100 个人围着圆桌,其中有一个人拿着很多张纸,每张纸记录着很多笔历史交易信息。第一个人拿起笔签完后递给第二个人,第二个人也做出了相同的选择,如果大多数人做出了相同的选择,即都签署了同一张纸那么每一个参与者会获得1美元,当你做出和绝大多数人不同的选择时,那么你的房子就会着火! 如果真的不能阻止矿工停留在 PoW 上继续挖矿,那将会创建三种以太坊币:ETC、ETH-PoW、ETH-PoS,这对以太坊...

2018-01-27
比特币小细节
收款地址是公钥的hash。 区块结构: 数据项 描述 长度 Magic No 魔数 总是 0xD9B4BEF9 4 字节(定长) BlockSize 区块大小 到区块结束的字节长度 4字节(定长) BlockHeader 区块头 包含六个数据项 80字节(定长) Transaction Counter 交易计数器 正整数 VI=VarInt 1-9字节(变长) BlockHeader 区块头 包含六个数据项 80字节(定长) Transactions 交易 交易列表(非空) 由Transaction Counter 描述的长度(变长) 由此表可见,只有交易计数器和交易明细列表是变长的。 比特币使用 SHA256 算法,它的结果哈希值大小为 256 位。也就是说,只要输入超过2的256次方个数,就一定会发生碰撞,即使只有2的255次方个数,也有百分之九十九的几率发生碰撞(为什么?)。 当前(这一百年内),每个区块都至少包含一个 Transaction,它被称为生产交易,或者coinbase交易,用于给生成这个区块的矿工以奖励,它经常是区...

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

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...





