哈希函数
在密码学中常用的哈希函数 Cryptographic Hash Function
性质
Collision Resistance 哈希碰撞
指不同的输入被映射到同一个输出。
没有一种高效的方法能够找到与当前取值的哈希值相等的其他取值。(只能暴力)
应用:为某条信息求摘要digest。当消息被篡改后,其哈希值也会发生变化
此条性质无法在数学上进行证明
MD5:不再安全,已经能够人为地制造哈希碰撞
Hiding 单向计算
成立条件:输入空间大,输出取值分布均匀
计算过程不可逆(除非暴力)
应用
前两个性质结合,实现Digital Commitment(Digital Equivalent of A Sealed Envelope)
此处老师举了预测股票的例子。
如果输入空间不够大或分布不均匀,可以在原取值的基础上加一个随机值再去哈希。
比特币中的哈希函数:SHA-256
Secure Hash Algorithm
除了哈希碰撞和单向计算外,还具有一种性质。
Puzzle Friendly
比特币应用中必要的一种性质,指的是无法将输入和输出的数值相对应
挖矿过程:首先有
block header (区块的块头)中有很多域,其中有一个域是我们可以设置的随机数 nonce 。挖矿的过程就是找到一个合适的 nonce 取值,使得整个block header取哈希后落在目标域中。
挖矿的过程没有捷径,只有通过暴力尝试才能找出对应的解
因此能够挖到矿,就是对工作量的证明(proof of work)
挖矿很难,但是验证 nonce 的正确性很容易,此性质叫做 difficult to solve, but easy to verify
签名
账户管理和签名
非对称加密 Asymmetric Encryption Algorithm
最早的加密体系是对称的,加密和解密使用的是同一个密钥(单钥密码系统),这种情况下不能够明文发送密钥,不能够方便地互相传递,密钥管理比较麻烦(加密速度快,适合数据多时使用)
如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密。
如果用私有密钥对数据进行加密,只有用对应的公开密钥才能解密。
本地保存的公私钥对即为一个账户。公钥相当于帐号,私钥相当于账号密码。
在进行交易时,发起方使用自己的私钥进行签名,接收方可以使用公钥对签名的正确性进行验证
一种攻击方法
产生相同的公私钥对,偷取比特币(可能性极小)
要求:使用好的随机源
MUITISIG多重签名
一个公司账户有4个合伙人,如果把私钥分成四份,每个人保留一份,这样的做法容易丢失私钥,也大大降低了私钥的安全性(已知其中的64位,破解的难度就大大降低)
可以使用多重签名的方法
哈希与签名结合后应用
首先对一个message取哈希,然后对这个哈希值进行签名
发送消息时发送的是message和签名