主页 > imtoken最新官网客服 > 虚拟货币的原理是什么,如何发明虚拟货币?

虚拟货币的原理是什么,如何发明虚拟货币?

imtoken最新官网客服 2023-01-16 21:03:36

谢谢

发明需要数字货币的几个原则

一、了解信用货币

我们的故事始于信用货币。

信用货币的本质是“债权”和“借条”。这个IOU有一个发行人,这个发行人就是债务人,他发行了这个IOU。他欠这张借条的持有人一笔钱,也就是债权人。借据上写着一个数字,代表所欠的金额。持有借据的人(这里简称“买家”),拿着借据买东西,付钱给卖家,从卖家那里拿东西。因此,卖方成为新的债权人。也就是说,当买者从卖者那里买东西时,他必须支付相应的价值,而这个价值是由债权服务的。换句话说,买方支付给卖方的货币本质上就是支付给卖方的债务。

卖家接受这笔付款是因为他也信任发行人。如果他不信任发行人,他会要求买方支付类似价值的东西,例如其他商品。如果交换的商品被普遍接受,则称为一般等价物。

因此,现代人对货币的理解并不是一般等价物向信用货币的演变。但是,大多数时候,货币是信用货币,也就是记账。每个人都出各种借条记账。有一个每个人都可以信任的簿记系统。一般的等价物只是在缺乏可信赖的会计系统的情况下的权宜之计,例如两方不够信任的跨部落(后来的跨境)交易。

既然货币是信用货币和借条,那么债权应该用什么材料来记录就成了一个问题。人类使用过金属(价值不足的金属硬币是信用货币)和贝壳,目前的主流是印有数字的纸,即纸币。现代纸币一般由政府发行,即政府作为那个中心的发行人,即债务人。当然,在大多数国家,实际发行人的角色由代表政府的中央银行承担。

以纸币为代表的现代信用货币有几个特点:

(1)匿名:这些借条是匿名的,上面不会写持有人的名字,因为流通速度快,所以要随意支付。钞票上一般都有序号他们,而且在某些情况下,这张纸币的流通是可以追踪的(例如,ATM、交易柜台都可以记录流水号),但大多数时候很难轻易实现,所以交易是匿名的。

(2)方便又便宜:携带方便,生产成本低(其实有些国家的纸币使用复杂的防伪技术,成本也不低),纸币本身几乎没有价值金属币的信用货币有一点点价值,也就是那一点点金属的价值,但是比它的面值要低很多。

(3)真实性:需要复杂的防伪技术来防止随意复制和验证其真实性的技术。

这是以纸币为代表的现代信用货币。

银行存款货币

此外,我们经常使用一种“货币”,即银行存款,有时也称为银行货币。这种货币不是我们今天讨论的真正的货币,而是将一笔钱存入银行的凭证,据此可以从银行提取真正的货币。例如,我国《人民币管理条例》规定:“本条例所称人民币,是指中国人民银行依法发行的货币,包括纸币和硬币。”它不包括存款货币。也就是说,人民币具有合法的支付功能(境内没有人可以拒绝接受),其中主要货币(1元以上的货币)具有无限的合法补偿(即在任何交易下都不能拒绝接受)但是,辅助货币没有无限的法定赔偿,只有有限的法定赔偿在某些情况下可以被拒绝,例如,如果有人带着几袋50美分的钢材来买车,他可以拒绝。但是如果买家带着几袋1元来买车,卖家不能拒绝,只能蹲下来老老实实数钱),但银行存款不是人民币本身,没有法律补偿功能。买家不愿意接受可以拒绝(原因可能包括他没有银行账户,或者他认为银行马上要倒闭了。),并要求对方只在纸币或硬币。因此,严格来说,银行存款本身并不是法币,而是可以要求银行提供法币的凭证。我们随后的讨论仅限于法定货币本身。

对了,可以修改《人民币管理条例》,人民币应该包括纸币、硬币和数字货币。但数字货币只能获得有限的法律赔偿,因为如果卖家没有数字钱包,就不能强迫他准备数字钱包。

二、货币的数字化

随着现代信息技术的发展,大量的人类信息开始以信息化、数字化的形式进行存储和传输,方便快捷。于是,人们开始考虑这样一个事情:既然信用货币本质上是债权和借条,那么它就不是一般等价物那样的实物,而是一条信息,是否也可以用现代的方式进行信息化、数字化?信息技术?

实际上,用数字信号来表示 IOU 似乎很容易。这就是“数字货币”,过去被称为“电子货币”。但是,这种数字货币要想真正发挥货币的功能,还必须达到和纸币一样的特性:

(1)匿名性:数字货币作为一种数字信号,在支付时很容易留下痕迹。与纸币不同,买卖双方直接离线发货,不留痕迹,因此如何实现匿名成为一个问题.

(2)真伪:作为数字信号,数字货币会不会很容易Ctrl+C,Ctrl+V?如果无限复制,假币就出来了。而且,这和假币不一样纸币。同理,假钞至少可以用验钞机来查,如果是直接复制粘贴数字货币,那么复制出来的和原来的一模一样,不能说是“假的” "。因此,数字货币需要加载一套复杂的加密技术。

(3)方便:携带和投递更方便。作为数字信号,传输当然非常方便,但由于加载了复杂的加密技术,交易过程可能会稍微复杂一些。同时,数字信号不能像纸币那样拿在手上,只能存储在电子设备中,所以人们需要持有这样的设备。我们把存储数字货币的电子设备称为数字钱包。

(4)便宜:货币是人们经济生活的基础设施,成本不能太高。不像纸币,每一次印制数字货币都是有成本的。只要整个体系建立起来,新的数字货币即将发行。边际成本几乎可以忽略不计。但是,构建整个系统(包括居民所需的数字钱包设备)可能成本很高。

(5)安全性:最好不要被盗、丢失、损坏等。这个问题没有完美的答案,只要是货币,不管是硬币、纸币还是数字货币,不可能100%消除这个风险。只能说,只要数字货币比纸币更安全,就是进步。

最后三个特性不难理解,我们就不展开了。

关注前两个功能。前两个问题其实是相互对立的:保证真实性,防止数字货币被复制并用于多次支付(称为“双重支付”问题,即复制一份后,可用于两次支付)支付。),最简单粗暴的方式是让数字货币唯一命名,发行方一直关注这种数字货币的流通情况(这也需要联网,这也影响了便利性)。但这并不能实现匿名。所以这似乎是一个不可调和的矛盾。

今天我们将介绍一些数学天才如何使用漂亮的数学方法来解决前两个问题(匿名性、真实性)和去中心化。因此,数字货币的实现不是新神器的发明,而是数字方法的巧妙应用。

三、盲签名和零知识证明

信用货币要求匿名,不可追溯,但必须保证其真实性,不被非法复制,这是一对矛盾。

匿名是指数字货币的用户在交易过程中花费了一笔数字货币,数字货币在市场上来回流动,最终谁也看不到它经过了谁。比如有人从银行取出存款,拿到数字货币,然后买东西的时候付款,卖家拿到数字货币,经过多次转账,最后一个持有数字货币的人把钱存回给银行。银行可以验证数字货币的真伪,但无法知道数字货币曾经流经谁的手。

1、盲签名和零知识证明

在实现匿名性和真实性的同时,使用的技术是盲签名,而盲签名的背后是零知识证明。

我们举个虚拟的例子(参考蟹仔的学习笔记,有修改):平遥票号日升昌,客户(A)存了10两银子,要求开汇票(匿名),然后他有拿汇票买东西。卖家(B)收到汇票后要去日升昌取银两,但他不想让日升昌知道A付了他钱。假设票号的人很犀利,他看汇票一眼就能记住字迹,这样下次看到汇票时,他就能记住是A签的。出票时,持票号的人看不到兑换券。

如何防止日升昌看到汇票,却让他们在汇票上签字?第一个草稿,在上面写上金额(10 两银子),然后放入信封中。信封有复印功能,所以凭票号是看不到草稿内容的,所以在信封外层签名。签名被复制到汇票上,汇票被打开。 A转身从信封里取出汇票,付给B,B去日升场取两两银子。日升昌从来没有见过这张汇票,他当然不会知道是A付给B的。这是盲签,我签了,但不知道签了什么,实现了匿名。

但是,这里有一个明显的漏洞。日升昌从来没有看过A开的汇票,万一A填了1000两白银,却谎称是10两怎么办?

因此,这里必须设计一个机制来保证A确实是10两白银,这需要零知识证明。机制是:A汇出100张汇票(假设他每次出的字迹都是随机的,注意这个假设很重要),每张上面写着“10两银子”,装进100个信封。日升昌的人随意打开了99个信封,发现都是10两,于是满怀信心地在剩下的信封上签字。因为最后剩下的信封恰好是A偷偷写了1000两的概率太低了。日升昌不放心可以索要200、1000...

A向票号证明汇票上写着10两银子,但不能让票号看到汇票。这实际上是一个零知识证明:即如果我不给你看内容,而是证明内容的真实性。

当然,在真正的数字货币应用中,可重写信封不能在计算机系统中使用,因此必须引入加密机制。即100张汇票被加密,加密后形成100个密文。拿到票号的密文后,随机抽取99张,让A解密给他看。解决方案解决后,都是“XX存10两银子”(XX为随机化名,以免加密后的密文乱七八糟,类似上一篇“乱手写”的效果),那么票号相信是最后的。一个人还写了“XX存10两银子”,但他不知道这个笔名是什么。当然,加密函数一定要足够复杂,不然票号有99个明文和99个官方比对,说不定还能逆推推导出加密函数,这样你就可以猜出最后一个密文对应的假名是什么了。

很明显,票号对应我们现代银行,白银对应我们的信用货币,汇票是不记名存单。该方法实现了不记名存单的匿名性和真实性。

2、引入主权权力

此时出现了一个新问题:A所开的汇票是化名的,本质上是匿名的。万一A用汇票做坏事,比如向B买药,政府抓到B,如果B守口如瓶(或者B在交易过程中不知道对方A的身份),就会很难追溯到A。其实这也是目前纸币面临的问题。因此,对数字货币的匿名性提出了新的要求:市场上所有的交易主体(包括银行)都是匿名的,但在必要的时候,可以追溯主权权威。

这是一种有限的匿名机制。这实际上是打击经济犯罪的有效手段,但不会破坏好公民合法交易的匿名性。

这时候就需要引入一个“受信任的第三方”,一般是由主权当局安排的,在我国未来的实践中很可能由央行来充当。简单地说,可信第三方和银行都存储流通中的数字货币的序列号(与纸币相同的序列号),但银行通过盲注不知道该序列号的数字货币在谁手中签名。客户不知道他们何时来存取数字货币。一旦客户或银行发现违法犯罪行为,可以报警,警察叔叔会配合“可信赖的第三方”,沿着序列号追查坏人。

整个机制比我们之前的票号案例要复杂一些(没有主权当局的干预)。有兴趣的朋友可以在期刊网站上查看白永祥先生的论文《基于盲签名的电子现金设计与实现》。本文也用到了非对称加密,本文后面会详细介绍。

四、去中心化与共识机制

上述数字货币本质上是数字人民币。也就是说,它不是另一种新货币数字货币谁发明的,而是人民币本身,而是原本由纸和金属制成的人民币,变成了由数字信号制成的人民币。因此,它根本没有改变现行的货币体系,仍然是目前的主权信用货币。

但是,西方一些固执的人一直对政府印象不好数字货币谁发明的,总觉得政府想滥用金钱来伤害他们。因此,他们试图创造一种不同于主权货币的新数字货币,即它不是数字主权信用货币,而是以比特币为代表的完全独立的新货币——当然,它仍然不是严格意义上的货币。展示。 .

比特币是基于区块链的去中心化和无需信任的。这也是通过巧妙的数学方法实现的。

1、分布式网络

由于主权信用货币是主权政府发行的,货币就是借据,主权政府是借据的统一中央债务人。去中心化意味着不再有中央债务人,整个系统由多个完全平等的参与者共同维护。因此,引入了分布式网络。将所有参与者视为一个节点(P),那么整个系统中的所有节点就构成了一个巨大的 P2P 网络。所有的交易行为都被一一记录,每个节点上都保存有完整的备份,不易被篡改。

所以,这与自治团队非常相似,它需要一些每个人都应该遵守的自治规则。这就引出了共识机制。

共识机制来源于经典的拜占庭将军问题,这是分布式系统面临的自然问题。拜占庭帝国幅员辽阔,将领驻扎在各个地方(类似于P2P网络中的节点),需要通过信使相互发送消息,以实现一些统一的军事行动。

例如,如果一位将军提议一起攻击某个敌人,并派信使通知其他将军,其他将军大多会响应并齐心协力获胜。如果响应的将军太少,敌人可能不会被击败。不要行动。但是将军中也有叛徒,他们可能会故意发出错误信息(给不同将军发出攻击的信号,而不是攻击的信号,使每个人都不一致),扰乱统一的军事行动(称为“不可靠节点”)。如果叛徒比例不高,大部分将领统一行动,不会影响最终结果(即有一定的容错机制),但如果叛徒比例过高,不能统一行动,军事行动就会失败。

还有一个不可靠的节点,不是叛徒,而是无能的将军……所以,不可靠的节点是指所有功能都失效的节点。

还有一个问题,由于中间需要一个信使,如果叛徒将军有能力篡改经过他身边的其他将军的信使(称为“不可靠通信”),那么可能会增加破坏力叛徒的力量。

因此,由于不可靠节点和不可靠通信的存在,所有将军都怕收到的信息是假的,大家不敢轻举妄动。最终无法达成统一行动和共识。这个问题的本质是节点的恶意行为成本很低,然后通信不可靠。这些问题在共识机制中得到了一定程度的解决。

2、非对称加密

首先,使用非对称加密解决通信不可靠的问题。

非对称加密技术,包括一对密钥对,即公钥和私钥,公钥是密钥对的公开部分,私钥是非公开部分。用公钥加密的数据必须用私钥解密,用私钥加密的数据必须用公钥解密。

在传统的对称加密中,只有一个密钥。在对称加密下,发送和接收信息的双方必须掌握相同的密钥,发送信息的人加密,接收信息的人解密。但是在分布式系统中,每个人都是发送和接收信息的成员,所以如果每个人都有相同的密钥,那么密钥就相当于公开,那么加密还有什么意义吗?因此,对称加密对于分布式系统是无效的。这里需要非对称加密,用接收者的公钥加密,但用只有接收者知道的私钥解密。

非对称加密主要依靠单向函数来实现。单向函数是指给定一个自变量,很容易计算因变量,但给定因变量,很难计算自变量。也就是说,它是一个很难作为反函数处理的函数。

单向函数

已知x时计算y=f(x)容易,已知y时计算x=g(y)就困难了。

g(·) 是 f(·) 的反函数。

使用这些函数,很容易构建非对称加密。以经典的RSA加密算法的原理为例。该算法基于一个易于理解的单向函数:两个大素数相乘很容易,但两个素数相乘却很难解决。

方法如下(参考小熊,有修改):

RSA加密算法

假设 A 和 B 想要相互通信。 B是发件人,A是收件人。它们是分布式系统中的两个普通节点,因此不能使用对称加密。整个过程分为以下几个步骤:

(1)A随机选择大素数P1=53,P2=59,然后N=53*59=3127。但是很难计算出3127是哪两个素数相乘。

(2)接下来会用到欧拉函数。取N φ(N)=3016的欧拉函数。

欧拉函数φ(N)的输出结果是在1到N(包括1,不包括N)之间有多少个正整数与N互质。显然,素数的欧拉函数的值本身是负 1,因为所有小于它的正整数都与自身互质。欧拉函数具有乘法性质,即φ(ab) = φ(a) φ(b)。所以: φ(N) = φ(53) φ(59)=52*58=3016 .

(3)取一个e=3(1和φ(N)之间的质数,与φ(N)互质)。这个e稍后会在公钥中使用。

(4)求e相对于模φ(N)的模逆元素,设为d。这个d后面会用到私钥中。

模逆元的定义:如果ed-1能被φ(N)整除,则称d是e关于φ(N)的模逆元;或者换句话说,ed 除以 φ(N) 后,余数为 1;换句话说,ed 和 1 与模 φ(N) 一致,即 ed 和 1 分别除以 φ(N),余数相等,都是 1。记为:ed ≡ 1 (模 φ(N))。因此得到d=2011。

此时A也可以破坏P1=53,P2=59。

(5)用公钥加密。A只用N=3127,e=3作为公钥,公开给公众。公钥一般写成(N,e),即是 (3127, 3) .

假设 B 需要将明文 m=89 发送给 A,它使用 A 的公钥对明文进行加密。加密算法为:

c = m^e mod N=89^3 mod 3127=1394,即明文m的e次方,再除以N得到余数,就是用A的公钥加密的密文。于是B将密文c=1394发给A。

(6)用私钥解密。A收到c后,用自己的私钥解密。

算法为:c^d mod N = 1394^2011 mod 3127,可以得到明文m=89。

依靠这种非对称加密技术,加密信息可以在分布式系统中传输而不会被篡改或拦截。比特币使用另一种非对称加密算法,椭圆曲线签名算法 (ECC)。

此外,非对称加密允许 P2P 网络中的任何其他人验证 B 是发送者。 B只需要用私钥加密一条信息并公布,每个人都可以用B的公钥解密,从而验证信息确实是B发送的。这样A就不用担心从 B 收到的信息实际上是由其他伪装成 B 的人发送的。

3、拜占庭容错

解决了信息的加密传输,再解决达成共识的机制问题,就是建立共识协议。

首先,在做决定的时候,一个将军要先出来宣布他的进攻性提议,然后每个人都表示同意或不同意,每个人的观点都会发送给每个人。在这里你需要等待一段时间,以便每个人都可以将各种信息传递到位。然后大家看到大家的信息后,比如说大部分人说“同意进攻”,那么大部分忠诚的将领在约定的时间一起进攻,取得了胜利。

如果全网大部分将领都是叛逆的,那么他们可能一开始就回答“不同意攻击”,无法就攻击达成共识;同时,他们没有进攻,导致其他忠诚的将领失败。

可见,当分布式系统中的大部分节点都是忠诚的,只有少数是叛徒的时候,并不影响大家达成共识。因此,这样的网络将具有容错机制。当中间出现一小部分不可靠节点时,不会影响整个网络的正常运行。

4、共识机制

然后,由您决定谁将是第一个提出建议的将军。这里需要一些协议。以比特币为例,他们使用了工作量证明协议PoW(Proof of Work),其设计为:

区块链是分布式网络上的每个分布式节点记录所有交易,每个时间段的交易形成一个区块,整个区块链由多个区块端到端连接。每个区块包括一个区块头和一个区块体,所有的交易信息记录都存储在区块体中。记录完所有交易后,生成一个哈希值,里面包含所有交易的信息,作为区块头的“Merkle root”。块头还包括版本、父块哈希值(前一个块的哈希值)、时间戳、难度值、nouce等其他信息,但整个块头中的信息量并不是特别大。

哈希值

哈希值是哈希函数运算的结果。

散列函数的作用是将任意输入信息转换成一系列固定长度的输出值,而这个输出值就是散列值。例如,比特币使用 SHA256 函数,可以将任何输入信息输出为 256 位哈希值。

哈希函数还有几个特点:(1)单向,计算哈希值容易,但很难从哈希值计算出原始输入值;(2)雪崩效应,输入值稍有变化,输出的hash值就完全认不出来了;(3)输出唯一性,两个输入值很难得出相同的hash值。

哈希函数主要用于验证数据没有被篡改。比如我们下载一个大文件的时候,在下载过程中很容易出现小错误。然后下载网站也会公布文件的hash值。我们下载文件后,进行哈希运算,看得到的哈希值是否与网站公布的一致。如果一致,说明下载过程中没有错误。

在区块头中,时间戳、目标值、nouce都与“挖矿”有关。

先用确定目标值:最大目标值/难度值。其中,最大目标值是预先固定不变的,数值巨大。难度值是根据过去一段时间的挖矿情况自动调整的数量。它是自动调整的,使每个出块的时间保持相似,即整体挖矿难度基本保持不变。过去一段时间,如果算力变强,难度值会自动增加,使目标值变小(目标值越小,实现目标越难,详见下文)。

然后,矿工(节点上的所有参与者)开始挖矿。算法是:用穷举法不断改变nouce值,然后对整个块头的credit进行两次hash运算,将得到的hash值与目标值进行比较。如果小于目标值,则矿工完成。这次的工作量(所以目标值越小,越难达到目标)。然后,第一个完成工作量的矿工可以宣布记账……也就是先提出来的将军。其他参与者可以对矿工找到的nouce值进行hash,看结果是否正确,便于验证。

Because it takes a certain amount of time to complete the workload each time, it also means that each time someone completes the workload, the transactions during this period are aggregated into a block, and then written into the blockchain.

The entire calculation process is an exhaustive method, with low technical content, but not low cost, and requires a lot of computing power (the computing power consumes real human resources such as electricity). But completed miners can also be rewarded in Bitcoin. Therefore, it is not meaningful for bad people to participate in lying and tampering with data, because the computing power of modifying more than 50% of the node data is far more than mining, so it is not as beneficial as honest mining. In this way, the problem of unreliable nodes is contained to a certain extent. Therefore, the essence is to use a lot of resources such as electricity to achieve a certain degree of tradability in a distributed network composed of strangers who do not trust each other.

Therefore, through the above-mentioned asymmetric encryption, consensus mechanism and other methods, some functions similar to currency are finally realized in a distributed accounting system that is completely trustless between people