主页 > imtoken苹果版钱包 > 北京大学肖真教授《区块链技术与应用》公开课笔记2——比特币密码学原理

北京大学肖真教授《区块链技术与应用》公开课笔记2——比特币密码学原理

imtoken苹果版钱包 2023-11-02 05:09:19

比特币被称为加密货币cryptocurrency-currency

区块链上的内容是公开的,包括账户地址和转账金额。

比特币在密码学中主要使用两个函数:1.Hash2.Signature

1.哈希

密码学中使用的散列函数称为密码散列函数,它有两个重要的性质:

①碰撞(这里指哈希碰撞)抗性

例如x≠y H(x)=H(y) 两个不同的输入有相同的输出,称为哈希冲突。这是不可避免的,因为输入空间远小于输出空间。给定 x,除非蛮力,否则很难找到 y。

该属性的作用:消息摘要

例如消息取m,m的hash值为H(m)=digest。如果有人想篡改 m 值,而 H(m) 保持不变,那是很难做到的。

哈希碰撞难以人为制造,无法验证,以实践经验为主。

②hiding 哈希函数的估计过程是双向的,不可逆的。 (x不能从H(x)推导出来)

隐藏属性的前提是输入空间足够大,分布比较均匀。如果不够大,通常会在x前面拼接一个随机数,比如H(x||nonce)。

这个属性的作用:结合防碰撞实现数字承诺(也称为数字等效的密封信封)

以预测结果为输入x,计算一个hash值,发布hash值一个比特币等于一个区块,隐藏让人知道hash值而不知道预测值,最后发布x,由于抗碰撞的性质,预测结果是不可变的。

这里肖老师举个股票的例子,如下

有人对一只股票进行了跌停预测,我们如何确定预测是准确的?最简单的就是提前公布,等待实际结果得到验证。但在实践中,提前发布预测时,可能会受到预测者自身对股市实际结果的影响。因此,应事先写在纸上并盖章,并交由第三方机构保管。实际结果出现后一个比特币等于一个区块,应打开封条,与实际情况进行对比。这是数字承诺。第三方组织需要具有说服力。现实生活中有很多这样的第三方机构不存在的场景,区块链技术为此提供了很好的解决方案。

除了密码学中需要的这两个属性之外,比特币中使用的哈希函数还有第三个属性:

③解谜友好意味着哈希值预算是事先无法预测的。

如果hash值是00...0XX...X,如果事先不知道,计算结果比较容易,还是需要一一带入。

在比特币挖矿的过程中,其实就是找一个nonce。 nonce 与块头中的其他信息组合作为输入,生成的哈希值必须大于或等于指定的目标预值。 H(块头)≤目标。区块头是指区块头。区块头中有很多字段。其中一个字段是我们可以设置的随机数随机数。挖矿过程就是不断尝试随机数,使区块头经过哈希处理,落在指定范围内。

解谜友好意味着挖矿过程中没有捷径。为了使输出值在规定范围内,只能一一尝试。所以这个过程也可以作为工作量证明。

挖矿难,验证容易。 (很难解决,但很容易验证)

比特币中使用的哈希函数称为 SHA-256(安全哈希算法)。它满足上述所有三个属性。

2.签名

在比特币系统中开户:

在本地设置公私密钥对(公钥、私钥),即账户。公私密钥对源自非对称加密算法。

两个人之间的信息交换可以使用加密密钥。 A 将信息加密后发送给 B。B 收到信息后,使用密钥泄露秘密。因为加密和泄露使用相同的密钥,所以称为对称加密。前提是有一个通道可以安全地将密钥分发给通信双方。因此,对称加密的缺点是密钥的分发不方便,因为它很容易在互联网上被监控。非对称密钥使用一对密钥而不是一个。私钥用于加密,公钥用于解密,接收方的私钥和公钥用于加密和解密。公钥不需要保密,私钥要保密,公钥只能本地存储,不能传递给对方。公钥相当于建行账号。其他人只需要知道汇款的私钥即可。私钥相当于账户密码。知道公钥可以转移账户里的钱。公钥和公钥用于签名。

如果A想给B转10个比特币,A把交易放到区块链上,别人怎么知道这笔交易是A发起的?这就需要A用自己的公钥对交易进行签名,其他人收到交易后,用A的私钥来验证签名。公钥用于签名,私钥用于验证,仍然使用同一个人。创建具有相同公钥的帐户的可能性极小,因此创建大量帐户来窃取他人的帐户是不可行的。

我们假设在形成公钥时有一个很好的随机性来源,并且公钥的生成是随机的。如果随机源不好,就有可能形成相同的公钥。比特币中使用的签名算法不仅在生成公钥时需要良好的随机性来源,而且之后的每个签名都需要良好的随机性来源。只要用于签名的随机源不好,就有可能泄露公钥。