主页 > imtoken无法提币 > 数学之美:人人可读的数字货币原理

数学之美:人人可读的数字货币原理

imtoken无法提币 2023-05-09 07:32:29

来源 | 国信证券经济研究所金融行业首席分析师 王健视角

作者| 王健

本文共8640字,预计阅读时间:22分钟

第一个比特币如何产生_比特币被盗原理_比特币产生的原理

认识信用货币

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

信用货币的本质是“债权”和“欠条”。 这张借条有一个发行人,发行人就是发行这张借条的债务人。 他欠这张欠条的持有人钱,而持有人就是债权人。 欠条上有数字代表所欠的金额。 持有借条的人(这里称为“买家”),用这张借条购买东西,付款给卖家,并从卖家那里拿走物品。 因此,卖方成为新的债权人。 也就是说,当买方从卖方手中购买东西时,他必须支付相应的价值,这个价值作为债权。 换句话说,买方对卖方货币的付款实质上是对卖方债权的付款。

卖方接受付款,因为他也信任发行人。 如果他不信任发行者,他会要求买方支付类似价值的东西,比如另一种商品。 如果用于交换的商品被普遍接受用于支付,则称为一般等价物。

因此,现代人对货币的理解并不是一般等价物向信用货币的演变。 而是货币大部分时候是信用货币,也就是记账。 大家出各种借条记账,有一个大家都可以信赖的记账系统。 一般等同只是在缺乏可信赖的会计系统时的权宜之计,例如跨部落(后来的跨国)交易双方都没有足够的信任。

既然货币是信用货币,是欠条,那么就有一个问题,用什么材料来记录这笔债务。 人类用过金属(无价金属硬币是信用货币)、贝壳,现在主流的是印有数字的纸,也就是纸币。 现代纸币一般由政府统一发行,即政府充当中央发行人,即债务人。 当然,在大多数国家,中央银行代表政府充当实际发行人。

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

(1) 匿名性:这些借条是不记名的,上面不会写持有人的名字,因为流通快,必须随意支付。 纸币上通常会有一个流水号,在某些情况下可以追溯纸币的流向(例如ATM和交易柜台可以记录流水号),但大多数时候很难轻易实现,所以交易是匿名的。

(2)方便、成本低:携带方便,制作成本低(实际上有些国家的纸币采用了复杂的防伪技术,成本不低),纸币本身几乎没有任何价值。 金属币的信用货币有一点价值,也就是那一点金属的价值,但远小于它的面值。

(3) 真伪:需要复杂的防伪技术来防止随意复制,并且有技术来验证其真伪。

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

银行存款货币

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

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

比特币被盗原理_第一个比特币如何产生_比特币产生的原理

比特币产生的原理_比特币被盗原理_第一个比特币如何产生

货币数字化

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

其实用一个数字信号来表示一个IOU,看起来是非常容易的。 这就是“数字货币”,以前叫“电子货币”。 但是,这种数字货币要想真正发挥货币的功能,还必须像纸币一样实现几个特性:

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

(2)真实性:数字货币作为数字信号,会不会被Ctrl+C、Ctrl+V轻易操控? 如果无限复制,就会出现假币。 而且,这与假钞不一样。 假钞至少可以通过验钞机进行检查。 如果直接复制粘贴数字货币,复制出来的副本和原来的一模一样。 不能说是“假的”。 因此,数字货币需要加载一套复杂的加密技术。

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

(4)廉价:货币是人们经济生活的基础设施,成本不宜过高。 与纸币不同,数字货币每次印刷都有成本。 只要整个系统建立起来,新发行数字货币的边际成本几乎可以忽略不计。 然而,构建整个系统(包括居民所需的数字钱包设备)可能需要高昂的成本。

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

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

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

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

比特币被盗原理_第一个比特币如何产生_比特币产生的原理

盲签和零知识证明

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

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

1. 盲签和零知识证明

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

比特币被盗原理_比特币产生的原理_第一个比特币如何产生

我先举个虚拟的例子(参考蟹仔的学习笔记,有修改):平遥银行日升昌,客户(A)存入10两白银,要求开汇票(bearer),然后他去买东西有了汇票,卖家(B)收到汇票后会去日升昌取银两,但不想让日升昌知道是A付给他的。 假设有单号的人眼尖,一眼就能记住笔迹,这样下次看到汇票的时候,就能记住是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加密算法原理为例。 该算法基于一种易于理解的单向函数:将两个巨大的质数相乘很容易,但很难将此乘积分解为两个质数。

方法如下(参考Tiny bear,有修改)

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( mod φ(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),其设计是:

区块链记录分布式网络上各个分布式节点的所有交易,每个时间段的交易形成一个区块,整个区块链由多个区块首尾相连。 每个区块包括区块头和区块体,所有的交易信息都记录在区块体中。 记录完所有交易后,为其中的所有交易信息生成哈希值,作为区块头的“默克尔根”。 区块头还包括版本、父区块哈希值(前一个区块的哈希值)、时间戳、难度值、nouce等信息,但是整个区块头信息并不是特别多。 如下图(引用自ustcsse308):

比特币被盗原理_比特币产生的原理_第一个比特币如何产生

散列值

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

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

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

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

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

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

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

由于每次完成工作量都需要一定的时间,这也意味着每次有人完成工作量,这段时间的交易都会被汇总成一个区块比特币产生的原理,然后写入区块链。

整个计算过程是穷举法。 技术含量不高,但成本不低,需要大量的算力(算力的背后,消耗的是电力等真实的人力资源)。 但完成的矿工也会获得比特币作为奖励。 因此,坏人参与说谎和篡改数据意义不大,因为修改50%以上节点数据的算力远超挖矿,因此不如诚实挖矿有利。 这样在一定程度上遏制了节点不可靠的问题。 因此,本质是在一个由相互不信任的陌生人组成的分布式网络中,利用电力等昂贵资源实现一定程度的可交易性。

因此,通过上述非对称加密、共识机制等方式,最终在人与人之间完全不信任的分布式记账系统中实现了一些类货币的功能。 这就是数学的力量。

第一个比特币如何产生_比特币产生的原理_比特币被盗原理