Crypto-currency 哈希 cryptographic hash func tion Collision resistance collision哈希碰撞 若x!=y,H(x)=H(y) 不可避免的,输入空间远大于输出空间 Resistance 给定x,没什么好方法可以找到y 好处 【无法篡改内容却不被检测出来】 对一个message求digest 用来检测对这个m的篡改; 若有人改m,H(m)也就是digest会发生变化; 上传文件前留其哈希值,届时下载下来可对该文件求哈希,若一致则未被篡改 Md5 可以人为制造collisiion所以不再安全 Hiding 单向-这个哈希值没有泄露有关x的所有信息 Digital commitment【hiding+collision resistance】[两者为密码学要求] Digital equivalent of sealed envelope 把预测结果作为输入x,算出一个哈希值H(x),哈希值可以公布出去,因为有hiding的性质,无法从H(x)知道预测结果x;第二天公布x,因为有Collision resistance的性质,所以预测结果不可能篡改 输入空间需要足够大 常用方法是x后拼接随机数; x->x||nonce->H(x||nonce); 整个输入是足够随机的,分布足够均匀 Puzzle friendly 【btc中要求的第三个性质】 哈希值的计算事先是不可预测的,光看输入,很难猜出来最后的哈希值是什么,因此若想要算出来的哈希值是落入某个范围内的,只能一个一个试,看哪个输入算出来恰好落在要求范围内。 挖矿 找nonce Nonce nonce和块头里的其他信息合在一起取哈希,该哈希要小于等于目标阈值。--工作量证明哈希 交易信息是通过计算 Merkle Root(默克尔根)的方式参与到块头的哈希计算中。 这两个哈希值都要算。 Difficult to solve, but easy to verify SHA-256 SECURITY HASH algorithm 签名 比特币系统中的账户管理 过程 创建一个公私钥对——代表一个账户 非对称的加密体系【asymmetric encryption algorithm】 使用一对密钥,加密使用接收方的公钥,解密使用接收方的私钥。 对称的加密体系 两人通过encryption key【密钥】进行通讯, 对称:加密解密用的同一个密钥 弱点:密钥的分发并不方便 签名 签名用的是私钥验证,验证签名用的是公钥 在发布交易的时候,要用自己的私钥对这个交易签名,其他人收到这个交易之后,用我的公钥验证这个签名的正确性 生成公私钥的随机源要好,出现两个相同公私钥的概率几乎为0; 每一次签名也要有好的随机源