比特币中密码学的应用
首先简要说一下,比特币的交易方式,比特币是去中心化的,通过交易信息来确定比特币所有权。并将交易信息储存在区块中,不同时间段的区块连接起来,形成区块链。
密码学主要运用在三个方面,分别是支付信息加密、数字签名、去中心化。
1.支付信息加密🔐
举个例子,6月25日 A支付给B 100元,A会向这个网络提交一个信息,“6月25日 A支付给B 100元” ,而后这条消息就被存储在一个区块中。
为了防止这条消息不被篡改成100万,就需要对这条消息进行校验,所用到的就是哈希算法的其中一种函数,SHA265函数。
这个单向函数有一个特点,任何一条消息经过SHA256函数运算过后,都会得到一个有256个字符的字符串。而且只要两条消息有一丁点不一样(标点不同也算),计算出来的两个字符串都会截然不同。
A在提交 “6月25日 A支付给B 100元” 这条消息时,同时也会提交一个通过这条消息计算出来的SHA256值。若是一条消息经过篡改了,计算出来的SHA256值肯定和最原始提交的SHA256值不同,也就说明信息被篡改了。
2.数字签名✍️
再举个例子,比特币网络上出现了一条消息,“6月25日 A支付给B 100元” ,但是怎么确定这个消息是A提交的,而不是B伪造提交的呢。
这里就要用到数字签名,数字签名就是用来标记和证明,这条消息是当事人自己发的,这和现实生活中各类文件合同上的签名是一个意思。
实现数字签名的工具就是RSA加密法,也就是非对称钥匙加密。每个人都有一个公钥和私钥,公钥是公开的,私钥是私密的。经过公钥加密过的密文,只能用私钥解开,而经过私钥加密过的密文,只能用公钥解开。
之所以有这样的特性,用到的是数学:数论中质数的应用,群论中单向函数等知识。
所以A在提交支付信息时,不会提交明文,而会用自己的私钥进行加密,若是别人用A 的公钥解密出来了这一条支付信息,就说明这条信息是A提交的。
3.去中心化🏦
比特币强调的是去中心化。比如说,我支付给你100元,但是在我提交这条支付信息时,没有任何人能查询到我的余额里是否大于100元。而现实中我们可以通过央行查到余额。但是比特币没有中央银行,判断支付的金额是否小于余额,就成了一个难题。
在比特币网络中,余额查询是根据之前出入账的支付信息来判断的,比如,B的出入账信息只有一条:6月25日 A支付给B 100元,那就说明B的余额是100元。
若是B想向C支付60元,实际的过程是,B先提交一个消息:“6月25日 B支付给C 100元”,然后C自动再向B支付40元。因为B的支付信息中,“
6月25日 A支付给B 100元”对应的是一个确定的SHA256值, 是不能拆成一个40元和一个60元的两条信息。所以只能先支付100,再C自动支付给B 40元,此时根据出入账消息,即可判断B的余额是40元。
挖坑,有机会再分享一下区块链是如何实现的,或者其他密码学相关好玩的东西。