简介
椭圆曲线加密法是一种基于离散对数问题的非对称(或公钥) 加密法, 可以用对椭圆曲线上的点进行加法或乘法运算来表达。在Bitcoin中使用的是secp256k1这条椭圆曲线
今天粗读了这篇短论文:2016The Bitcoin Brain Drain-A Short Paper on the Use and Abuse of Bitcoin Brain Wallets大体了解了在比特币网络中使用BrainWallets的坏处,作者建议不要使用BrainWallets,这也是大脑钱包官网关闭的原因吧
在2014HITB-Exploiting ECDSA Failures in the Bitcoin Blockchain中他所使用提取签名的方法是通过Bloomfilter实现的,作者提到:
数字签名算法(DSA)在联邦信息处理标准FIPS中有详细论述,称为数字签名标准。它的安全性基于素域上的离散对数问题。椭圆曲线密码(ECC)由Neal Koblitz和Victor Miller于1985年发明。它可以看作是椭圆曲线对先前基于离散对数问题(DLP)的密码系统的模拟,只是群元素由素域中的元素数换为有限域上的椭圆曲线上的点。椭圆曲线密码体制的安全性基于椭圆曲线离散对数问题(ECDLP)的难解性。椭圆曲线离散对数问题远难于离散对数问题,椭圆曲线密码系统的单位比特强度要远高于传统的离散对数系统。因此在使用较短的密钥的情况下,ECC可以达到于DL系统相同的安全级别。这带来的好处就是计算参数更小,密钥更短,运算速度更快,签名也更加短小。因此椭圆曲线密码尤其适用于处理能力、存储空间、带宽及功耗受限的场合。
1 | // Block represents an entire block in the Ethereum blockchain. |
2 | type Block struct { |
3 | header *Header |
4 | uncles []*Header |
5 | transactions Transactions |
6 | |
7 | // caches |
8 | hash atomic.Value |
9 | size atomic.Value |
10 | |
11 | // Td is used by package core to store the total difficulty |
12 | // of the chain up to and including the block. |
13 | td *big.Int |
14 | |
15 | // These fields are used by package eth to track |
16 | // inter-peer block relay. |
17 | ReceivedAt time.Time |
18 | ReceivedFrom interface{} |
19 | } |
刚刚接触Bitcoin Wallet 里面的构造还不是很清楚,提取和解析指令也不是很熟悉,所以听到这个题目,有些无从下手,于是我先熟悉了bitcoin-cli的指令,例如:getblockhash + 区块高度、getblock + blockhash、getrawtransaction + Tx、decoderawtransaction + (getrawtransaction所获得的字符串),想要获得签名r主要是通过这些指令,之后我学习了解析交易字符串后的各部分所代表的含义,通过学习精通比特币,我了解到在交易过程中,存在解锁脚本和锁定脚本,结合解析出的信息,我发现里面存在scriptSig这个字段名,但是里面存在两个字段:asm和hex,深入了解后发现,hex代表的是签名脚本的16进制字符串,至此我找到了目标提取字符串。下面具体介绍提取过程。