咱先了解下比特币的密码学原理
主要用到了密码学中的哈希和签名,
这个哈希函数(密码学中要求)的主要性质是
1、首先是无法人为的制造哈希碰撞,也就是说有人对m做了改变,那么他的m的哈希值也会变化
2、哈希函数的计算过程是单向的,不可逆的,知道了哈希值没法得到输入值(在输入空间足够大,且输入分别均匀,这样避免蛮力破解)。
BTC中用到的哈希函数还要求第三个性质
3、无法预测出哪个输入更有可能算出某个哈希值。想要算出来的哈希值落在某一个范围内,只能一个一个的试,没有捷径(也就是挖矿)
什么是哈希碰撞呢,就是x不等于y,但是H(x)=H(y),两个不同的输入,经过哈希函数之后,会存在这两个值相等,这个现象是客观存在的。是因为输入的范围大于输出的结果域,导致肯定会有不同的输入映射同一个输出。
挖矿的过程:做一系列的哈希运算,当运算得到的哈希值符合目标规则,即为挖矿成功,也就是寻找Nonce参数的过程,这个Nonce和区块的其他信息合在一起作为输入取一个哈希值,这个哈希值小于某个目标值。
挖矿很难,需要花费很多工作量,但是验证很简单(这也是BTC一个性质)。验证只需将参数代入取哈希就能验证出来。
BTC用得到的哈希函数是SHA-256
签名
BTC中的的账户管理,去中心化的管理,每个用户自己决定开户,创建一个本地的公私钥对(来自非对称加密体系),公钥相当于银行账户,私钥相当于账号密码。
签名呢就是,我用我的私钥签名,之后你用我的公钥来验证身份(签名是验证身份的,避免BTC被其他人转账出去)。这个是与加密相反的。
非对称加密:区别于对称加密,传递信息是用对方的公钥加密(公钥是可以开放的),对方接到信息是用自己的私钥解密。
对称加密:是我用这个秘钥加密,你也用这个秘钥解密。但是由于秘钥分发这个就很不方便,在网上分发也会有被窃听的风险)
理论上两个人生成的公私钥对相同,他是能偷走你的币,但是现实是几乎不能实现的(只要是好的随机源,产生公私钥都是随机产生的,暴力破解基本不可能)。