- 加密货币并非信息加密,比特币的交易都是公开的
- 主要用到hash和签名
哈希函数的性质
-
Collision resistance
- 强抗碰撞
- 弱抗碰撞
- 没有任何一个hash函数能在理论上完全满足抗碰撞性,只能在实践中检验
-
压缩性质:不限位数的输入 -> 有限位数的输出
-
单向不可逆(hiding)
- 由上面的压缩性质可知,一般不能倒推
- 要求输入空间很大(否则可以蛮力求解),另外要满足均匀分布
- 由上面的压缩性质可知,一般不能倒推
-
puzzle friendly
- 哈希值计算不便预测,比如想要得到一个在
(a,b)范围内的哈希值,只能计算试验,而不能通过某种数学方法估计某个输入能得到符合条件的哈希 - 应用:挖矿过程中 要找到Nonce, 使得
H(block_header) <= target, target 由比特币系统指定,注意Nonce 是 block_header的一个域- 这个过程称为Proof of work,
POW - 挖矿很难,验证容易
- 这个过程称为Proof of work,
- 哈希值计算不便预测,比如想要得到一个在
Collison(碰撞定义) \(x \neq y , h(x) = h(y)\)
实际上碰撞在所难免,因为输入空间远远大于输出空间(定义域无限,值域有限可列)。 在工程上 抗碰撞主要是指没有很好的办法能够人为制造碰撞
哈希可用于校验,作为文件指纹。(比如经典的md5)。
- sealed envelope.
- 预测结果提前公布,可能会对现实结果造成影响(正面或者反面)
- 为了不让预测结果提前公开,同时也证明已预测过(没有被篡改),即先把预测结果存放在公正机构,等真实结果出来后验证预测结果是否正确
电子世界中,可以先对“预测结果” 哈希,公布哈希。真实结果出来后,可以验证预测结果,同时哈希函数的性质保证了预测结果没有被篡改
当输入空间比较有限时,预测结果的哈希可以通过暴力枚举倒推出预测结果,从而会引起2.1. 的问题,因此一般会考虑在输入的值后面加入一个随机数,以扩大枚举空间,进而保证Hiding性质。随机数叫做Nonce, 求得结果即H(x | nonce)
比特币中使用的哈希: SHA 256 (Secure hash algorithm), 其能满足以上性质
签名部分
比特币没有中心化机构,没有“账户概念”, 比特币系统中创建账户即创建公钥+私钥对
非对称加密、对称加密
对称加密需要通信双方知道秘钥,但是如果秘钥在网络上传输的话,则秘钥可能被窃听,从而信息可能被解密。(对称加密需要1个秘钥)
- 因此需要一个安全的手段传输秘钥
非对称加密:使用公钥加密,使用私钥解密(接收方的公钥+私钥),这个就好比银行账号和银行密码一样,转账只需要银行账号,而查看余额则需要密码,非对称加密解决了秘钥传输不方便的问题
比特币系统中,发布交易使用私钥签名,而系统中使用公钥检验签名的有效性
- 比特币的公私钥是防碰撞的,只需要选取的随机源足够好(生成+签名)
- 私钥不可通过公钥推导
- 通过暴力枚举匹配公钥,进而得到私钥的概率非常低
扩展:
非对称加密的缺点:
1. 效率特别低,对称加密比非对称加密效率高几个数量级(几千倍)
2. 加密数据长度受限,与加密算法有关
现在主流使用混合加密模式,即将对称加密的秘钥通过非对称加密方式传输,
大量的数据使用对称加密传输,这样可以兼顾安全和效率
公钥、私钥对产生方法:
比特币中,哈希使用SHA256;秘钥生成使用32B的随机数作为私钥,然后通过ECDSA 生成公钥,再经过hash 得到比特币地址
浙公网安备 33010602011771号