要了解比特币就得先了解一下它所使用的SHA256算法,它属于hash函数的一种,那么这个hash函数又是个啥玩意?
简单点说,它可以把一个字符串通过一定的运算转化成二进制“数字摘要”的形式。举个例子,假设我拟定这样一个函数:如果接收到的字符串包含数字,则输出的二进制结果第一位为0,反之第一位为1;如果接收到的字符串包含非数字,则输出第二位为0,反之第二位为1。
比如我要hash一下sfihh这个字符串,按照上面的规则输出的二进制结果就是“10”;字符串23490f经过哈希运算后的结果就是“00”。
我只是举了一个简单的例子方便大家理解,真实的哈希函数复杂程度之大很难用文字语言描述,不过通过上面这个例子相信大家会发现哈希函数有这样一个特点:正向算很容易,但是你想反向算很难。还是上面的例子,假设我知道了函数值“00”,你想让我往前推算自变量,有可能是“23490f”,也有可能是“8840ghd”,还有可能是“56pph”。一言以蔽之,验证可以,推算几乎不可能。
比特币所使用的SHA256算法和上面举的例子类似,给定一组字符串,经过SHA256运算后得到的函数值是一组固定位数为256位的二进制数字,同样具有正向算函数值简单,反推自变量很难的特点。这个SHA256函数不仅可以用来设计数字签名,而且和比特币挖矿息息相关,具体关于挖矿的部分咱们下期再讲,接下来聊聊数字签名。
在传统的身份认证领域,“签字”、“指纹识别”之类的手段是最常见的,但是在电子支付中,用传统手段太容易造假,甭管是签名还是指纹,copy一下再粘贴一下就能糊弄过去。
比特币应用的数字签名复杂太多,在比特币的用户进行注册的时候,系统会随机生成一个随机数,通过这个随机数会生成私钥、公钥和地址。其中私钥是用户私有的密钥,这玩意需要小心保管不能让任何人知道,如果私钥丢了,那么你钱包里的比特币也就丢了。公钥和地址是公开的,比如你要支付比特币,你就需要把你的公钥和地址一起广播出去。那么私钥和公钥具体是干啥用的呢?
简单点说,私钥用来加密,公钥用来把私钥加密后的字符串进行解密。因为加密和解密的算法不同,这种加密方式就叫“非对称加密”。因为只有你掌握可以加密的私钥,因此只有你自己可以加密,而任何人都能根据你加密的信息进行解密。有很多朋友听到这里可能疑惑了,大家都可以根据公钥来解密你的信息,那么还有必要加密吗?
看似多此一举的动作其实是为了“防伪”。啥意思呢?假设你支付了一枚比特币给小明,然后你要在网上广播这条消息让大家给你记账,那么大家怎么验证这条消息确实是你发出来的而不是坏人伪造的呢?
首先你要把付给小明1枚比特币这串字符做一下SHA256运算,运算完得到的函数值记为“数字摘要1”,然后用你独有的私钥将数字摘要1进行加密,得到一串“密码1”。
然后你要在全网进行广播,广播的内容如下:你支付给小明1枚比特币这点事、你的公钥和你的“密码1”。你希望大家把你的交易记录记账然后做成新的区块,大家就得针对你发布的信息进行“防伪验证”。
首先大家会对你发布的信息“支付给小明1枚比特币”这串字符hash一下,得到的函数值为“数字摘要1”(和你计算的结果一样),然后将公钥和“密码1”进行配对解密,得到“数字摘要2”,然后对比摘要1和摘要2,如果哈希值相同,则证明这玩意确实是你发布的信息,然后开始给你干活(记账做区块)。
这就是数字签名的原理。
本文链接:https://www.91pjz.com/zixun/34158.html
免责声明:文章不代表91联合立场,不构成任何投资建议,谨防风险。
版权声明:本文来源于91联合网站,转载请注明出处!侵权必究!