主页 > imtoken钱包最新版本 > Comunion Blockchain 深度学习系列|进阶原理:迁移

Comunion Blockchain 深度学习系列|进阶原理:迁移

imtoken钱包最新版本 2023-06-06 06:56:28

本系列包括:基本概念与原理、密码学、共识算法、钱包与节点原理、挖矿原理与实现。

转账流程

众所周知,我们在使用银行卡转账时,一般需要填写账户名、对方账号、转账金额和一些转账附言比特币地址生成原理,然后输入密码后,资金转入对方账户。

这个过程背后的整个系统是如何工作的?

如果张三在招商银行开户,他会将一笔资金转到李斯在工商银行的账户。

那么张三提交转账申请后,其转账卡所在的招商银行分行核对用户名和密码后,将交易提交至招商银行总行,招商总行然后银行将转移交易。发送到中国人民银行大小支付系统的交易。

最后,转账交易到达李斯开户的工商银行总行,一层层往下走,最后到达李斯开户的分行。

区块链转账系统如何运作?以比特币系统为例,它是一个点对点的电子现金系统。让我们看看整个过程是如何工作的。让我们看一下比特币白皮书中的流程图。

如果张三需要给李四转10个比特币,

首先张三需要打开自己的数字货币钱包,然后扫描或者输入李四的钱包地址,然后张三填写要转账的金额,选择对应的手续费(手续费等级对应转账速度),最后输入支付密码点击发送,大功告成。

这整个过程与传统的转账交易非常相似。需要输入对方账户、转账金额和支付密码,然后点击发送。最后,资金到达对方账户或钱包,交易完成。

区别

两者的关键区别在于中间资本流动的差异。

首先,张三的钱包通过他的私钥对交易进行签名,钱包将签名的交易广播给所有连接到钱包的比特币节点。

第二步,这些节点向其他比特币节点广播,所有节点都会验证本次交易的合法性。

第三步,如果交易合法,则将交易放入待打包的交易序列中,也可以称为内存池或交易池。列表中的交易称为交易未确认。

第四步,比特币矿工从节点获取要打包的交易,开始构建下一个区块,即挖矿。

第五步,当矿工挖出符合要求的区块时,矿工会第一时间将该区块广播给系统中的所有节点。

第六步,所有节点验证广播的区块。如果验证通过,则将该区块添加到本地账本中。

最后,李斯的钱包连接到新节点,新节点的区块中包含了张三的转账信息。这时候,李斯通过自己的钱包看到转账成功了。

工作原理

请思考两个问题:

1.为什么使用张三私钥可以被全网所有节点签名? .

2.这个交易已经包含了张三的签名,也就是别人有张三的签名,那么其他人以后是否可以用这个签名来模仿张三的签名。张三资金被盗?例如,模仿一张支票的签名来伪造其他支票。

这里是密码学中非对称加密的相关知识,后面我们会详细讲解这部分知识。今天在这里简单介绍一下非对称加密算法的用法。

大家经常听到的加密算法一般都是对称加密,即通信双方都有双密钥。

例如,对称加密就像锁上一扇门。只有拥有钥匙的人才能开门比特币地址生成原理,但每个人都有相同的钥匙。这是对称加密。

非对称加密和对称加密最大的区别在于双方不需要拥有相同的密钥。

例如,A 用 A 钥匙锁门,B 可以用 B 钥匙开门。这两个密钥对应于非对称加密中的私钥和公钥。

私钥和公钥是一一对应的。公钥可以从私钥生成,但私钥不能从公钥反转。

非对称加密的过程。

1.发送者生成公钥和私钥;

2.使用私钥对数据进行签名;

3.获取签名密文;

4.将密文和公钥发送给接收者;

5.接收者通过公钥解密密文。

6.证明密文是由发送者的私钥签名的。

其实第一个问题到这里就回答了,因为张三用私钥对交易数据进行了签名,同时全网可以有张三交易的公钥可以通过公钥和签名。

让我们转向第二个问题。

如果李斯收到张三转出的10个比特币,他能否继续将这笔交易广播到比特币网络,从而不断从张三的账户中转出10个比特币呢?

答案是:绝对不是。我们可以看一下交易结构。

在每个比特币交易结构中,都包括:输入和输出。

输出包括收款人信息,例如上面的金额和锁定脚本。锁定脚本指定了接收者的比特币地址,以及在什么情况下可以使用这个比特币。

上面的输入包括上一笔交易的ID。上一笔交易的序号决定了输入在交易中的排名,从而解锁脚本。

进入交易的这些信息称为 UTXO(未使用的交易)。

由于每个 UTXO 只能使用一次,即使张三需要继续向李斯转账 10 个比特币,由于之前的输入发生了变化,签名的内容也会完全不同。因此,即使是同一笔交易也无法重复广播到比特币网络。

让我们继续看 UTXO。可能有人会问,如果我这个UTXO用完了,以后怎么转账?

其实我们日常生活中常用的,比如银行、支付宝、微信等,大家熟悉的就是一个账户模型:我有一个账户,账户里有余额,我有多少钱转账,还剩多少个账号,每个人都有一个或多个账号。

这个模型很容易理解,但是UTXO模型和账户模型有很大的不同。

我个人理解,UTXO模型更像是一张支票,就像在比特币网络中,比特币支票在不断的流通。当一个比特币被转入时,一个新的比特币就会产生。钱包在转出时会选择一个足够数量的UTXO作为交易的输入。

然后将找零金额和找零地址作为交易的输出,并内置到本次交易中。当交易被比特币网络确认后,该交易中使用的 UTXO 无效。 .

同时,由于有输出作为找零,钱包得到了新的UTXO,相当于得到了新的支票。

由于之前的UTXO已经过期,对应的签名也一定是无效的,所以不能重复使用。

这里我问你一个问题:既然我知道张三的地址和公钥,为什么我不能从这个地址和公钥中推回他?私钥?

如果李四有张三的地址和公钥,推回张三的私钥,李四就不能花张三的钱吗?什么机制保证了这种不可逆性?

请阅读下文

公私钥的转换过程

私钥是通过椭圆曲线算法得到公钥,公钥经过多次Hash运算,得到这个公钥的hash,再通过Base58编码得到地址。

在整个过程中,从私钥到公钥,公钥到哈希的过程信息被多次压缩,都是单向的,不可逆的。因此,无法通过对公钥进行散列得到公钥,也无法同时获得私钥。

私钥是从哪里来的?私钥实际上是一个随机数。这个随机数的范围是1~2的256次方,范围大概是10次方的77次方。目前在宇宙中可见的粒子大约是 10 的 80 次方。

以比特币为例,整个比特币网络已经使用的粒子,也就是全球地址大约有2400万个,也就是10的8次方。可以想象这两个空间相差多少数量级,所以比特币地址的空间很大,碰撞或重名的几率很小。

有的朋友也听说过一个事情,就是某个人注册了一个新的数字货币钱包,但是创建了钱包之后,他看到这个钱包有交易记录。简单来说就是他创建的钱包已经被别人使用了。

那么这到底是怎么发生的呢?

一种情况是确实会发生碰撞,例如在高能粒子对撞机中,每进行数十亿次实验就有几个粒子发生碰撞。虽然碰撞的概率很小,但也不是不可能的。

另外一种情况是,由于钱包开发商或供应商的原因,钱包的随机数生成模块有问题,导致钱包中的随机数空间非常小。这会成倍增加碰撞的概率。

(我们稍后会在钱包的分类应用中详细介绍这方面的知识。)

我们将通过下图进行总结:

首先,私钥生成一个随机数;随机数通过椭圆曲线转换得到公钥;公钥经过SHA-256和RIPEMD-160转换得到公钥哈希;最后Base58编码得到比特币地址。

从private key-public key-public key hash-address的过程可以看出,信息被多次压缩。除了最后一步是可逆的,Base58 是可逆的。只要数据被压缩,就会造成数据丢失。所以这个过程是绝对不可逆的,也保证了数字货币的安全。

这里我们可以提前想一个问题:既然私钥对公钥是不可逆的,那为什么我们不用公钥作为数字货币的接收地址,而必须将公钥转换成公钥呢? key Hash,然后通过Base58转换成接收地址?

我们将在下一期回答