02-BTC-密码学原理

学习视频来源:https://www.bilibili.com/video/BV1Vt411X7JF/?p=2

文章目录

  • [1. 哈希函数](#1. 哈希函数)
    • [1.1 collision resistance](#1.1 collision resistance)
    • [1.2 hiding](#1.2 hiding)
    • [1.3 puzzle friendly](#1.3 puzzle friendly)
  • [2. 签名](#2. 签名)
    • [2.1 比特币账户](#2.1 比特币账户)
    • [2.2 对称加密](#2.2 对称加密)
    • [2.3 非对称加密](#2.3 非对称加密)
    • [2.4 公私钥匙随机源](#2.4 公私钥匙随机源)

比特币中用到了密码学中的2个知识,哈希函数和签名。

1. 哈希函数

比特币被称为是加密货币,但其实加密货币是不加密的,比如:账户地址、金额都是公开的。密码学中用到的哈希函数被称为Cryptographic hash function。它有2个重要的性质 collision resistancehiding

1.1 collision resistance

这里的collision 是指哈希碰撞。如果2个输入x和y,满足x不等于y,但H(x) = H(y),那么就说明发生了哈希碰撞。collision resistance 是指没有什么高效的方法,人为的制造哈希碰撞。给定一个x,没有什么高效的办法找到y,使得H(x) = H(y)。这条性质可以用来对message做digest,如用H(message) = digest来检测message是否被篡改。如果有人改了message内容,digest就会发生变化。没有办法高效的篡改内容,而保持digest不变。

没有那个哈希函数可以证明是collision resistance的,只能靠长期的实践检验,很多的密码学专家都找不到高效的方法,就认为这个哈希函数是collision resistance。以前MD5也被认为是collision resistance的。但后来找到了人为制造哈希碰撞的方法。

1.2 hiding

哈希计算是单向的,即给出X,可以计算出其哈希值,但给出哈希值,没办法计算出X。哈希值没有泄露X的任何信息,除非蛮力破解,前提是输入的空间要足够的大,分布比较均匀。

collision resistance 和hiding结合在一起,用来实现 digital commitment或叫digital equivalent of a sealed envelope。

1.3 puzzle friendly

比特币中用到的哈希函数除了要求满足上面2个性质,还要求 puzzle friendly。即哈希值的计算,事先是不预测的,光看这个输入,很难看出来它最后的哈希值是什么。如果你想要算出来的哈希值是落在某个范围之内的,那没什么高效的办法,只能一个一个去试试,看哪个输入的哈希值,恰好落在这个范围之内。比如说你想得到一个哈希值,前面k位都是0,0000000...XXXXX,即这个哈希值小于某个目标值,你是没办法提前知道哪些输入的哈希值前k位都是0。比特币挖矿用的POW算法就是利用了这个性质。挖矿需要找到一个nonce,nonce需要和区块头其他信息合起来,一起计算一个哈希,哈希值大小要满足一个阈值。

复制代码
	H(block header)<= target 

这个nonce只能蛮力去找,需要花费一定的时间,但一但找到,其他人可以很快验证是否正确。这个性质被称为diffect to solve,but easy to verify.

比特币中用到的哈希函数SHA256(Secure Hash Alogrithm), 满足以上3个性质。

2. 签名

2.1 比特币账户

现实生活中想要开一个账户,比如开一个银行账户,是需要去银行办理开户手续的,这就是中心化系统的开户方式。比特币是去中心化的,每个用户自己开户,不需要任何人批准,只需要创建一个公私钥对(public key, privatge key),就是一个账户。公私钥对来自与非对称加密。

2.2 对称加密

A和B通信,A和B提前商量一个密钥key。A将要发送的消息用key加密,发送给B;B收到后用key解密。因为加密和解密用的都是同一个key,所以称为对称加密。这种加密方式安全的前提是存在一种安全的方法,将密钥分发给通信的双方。弱点是密钥的分发不是很方便,所以提出了非对称加密。

2.3 非对称加密

非对称加密,加密用的是公钥,解密用的是私钥。A要给B发消息,A用B的公钥将消息加密,B收到后用自己的私钥解密。加密和解密用的是同一个人的公私钥。这么做的好处是公钥是不用保密的,可以告诉所有的人;私钥需要保密,但是只需要保存在本地就行,不用传给对方。这就解决了对称加密中 密钥分发不方便的问题。

2.4 公私钥匙随机源

如果一个人本地不停的生成公私钥对,然后和比特币上其他账户的公钥比对,如果发现和某个人公钥一样,就可用私钥把这个人的比特币转走,这种方法理论上是可行的。但如果用的是256位的哈希值,生成相同公私钥对相同情况概率,比地球爆炸的概率还要低,目前世界上还没发现这种情况。因为公私钥的过程是随机的,所以在生成公私钥的时候,需要选择一个好的随机源。比特币中的签名算法不光是生成公私钥对的时候要用好随机源。之后每一次签名的时候,也要用好的随机源,不然有可能会泄露公钥,就全完了。

相关推荐
电报号dapp11920 小时前
公链开发:在数字丛林中构建文明
web3·去中心化·区块链·智能合约
天赐学c语言1 天前
1.7 - 删除排序链表中的重要元素II && 哈希冲突常用解决冲突方法
数据结构·c++·链表·哈希算法·leecode
故事不长丨1 天前
C#字典(Dictionary)全面解析:从基础用法到实战优化
开发语言·c#·wpf·哈希算法·字典·dictionary·键值对
Cvmax1 天前
Hyperliquid:革命性的去中心化交易平台
去中心化·区块链
电报号dapp1191 天前
NFT系统开发:在数字荒漠中铸造文明
安全·去中心化·区块链·智能合约
Black_mario1 天前
从 Stove Protocol 看下一代股票代币化的范式转变
区块链
橘颂TA1 天前
【剑斩OFFER】算法的暴力美学——力扣 43 题:字符串相乘
数据结构·算法·leetcode·职场和发展·哈希算法·结构与算法
电报号dapp1191 天前
交易所开发:在数字金融的竞技场中构建信任的圣殿
金融·web3·去中心化·区块链·智能合约
MicroTech20251 天前
微算法科技(NASDAQ: MLGO)区块链混合算法:实现云存储的去中心化隐私保护
科技·去中心化·区块链