区块链与加密货币

Posted 你代码写的像诗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了区块链与加密货币相关的知识,希望对你有一定的参考价值。


对区块链和加密货币做了下简单研究,这里记录下。

区块链的目的

区块链的实质是公共账本,目的是降低交易中的信任成本

  1. 公共账本中,如何验证一笔交易是否是交易双方的真实意愿,而非伪造的交易?

    电子签名。

    电子签名的生成原理

    几个要素:

    • 私钥 s k sk sk
    • 公钥 p k pk pk
    • 加密函数 S i g n Sign Sign
    • 验证函数 V e r i f y Verify Verify
    • 信息本身 M e s s a g e Message Message
    • 签名 S i g n a t u r e Signature Signature

    S i g n ( M e s s a g e , s k ) = S i g n a t u r e Sign(Message,sk)=Signature Sign(Message,sk)=Signature

    为什么要使用私钥和信息本身生成签名?

    • 使用私钥可以保证只有私钥持有人能够生成该签名

    • 使用信息保证了其他人不能把签名简单地复制到另一条信息里,来伪造签名

    V e r i f y ( M e s s a g e , S i g n a t u r e , p k ) = T r u e / F a l s e Verify(Message,Signature,pk)=True/False Verify(Message,Signature,pk)=True/False

    用来验证签名是否是由 p k pk pk所对应的 s k sk sk生成的。

    由于生成假签名(只能借助 V e r i f y Verify Verify函数和公钥暴力破解)难度极大,因此如果 V e r i f y Verify Verify函数返回true,就可以认为该签名是由私钥的拥有者生成的。

  2. 如何防止有人在公共账本上使用正确的信息和签名,重复记账?

    每笔交易信息中都包含独一无二的id即可。

理解加密货币的本质

Tips

  • 每种加密货币都是一个公共账本

  • 货币的本质是交易的历史

去中心化

公共账本保存在哪里? 添加新交易记录的规则是什么?

公共账本保存在所有用户手里,当一笔交易发生,必须广播给所有用户,并在所有账本中添加记录。

那么问题来了,如何保证所有用户的账本记录的交易是一样的,并且顺序也相同呢? 这是区块链技术的核心问题。中本聪关于比特币的论文解决的就是这个问题,他的解决方案是工作量证明。
比特币的公共账本结构大致如下:


由串起来的区块组成(所以又被称为区块链),每个区块包含了前一块的哈希,多条交易记录,和一个工作量证明。只有计算出工作量证明的人,才能打包区块并向全网广播该区块。

工作量证明

工作量证明是接在一段交易记录后的一个数,记为 w w w w w w需要满足以下条件:可以使得交易记录+ w w w这段信息的 H a s h Hash Hash值的前 n n n位值为0。(对于比特币来说, n n n是变化的,以保持平均约10分钟产生一个区块。以太坊约15秒)

工作量证明的特点

  1. 计算 w w w所需算力很大,但验证 w w w的正确性很简单。

这就使得如果篡改了交易记录,则需要花费大量的算力去计算新的 w w w

由于每个区块都加入前一块的Hash值,因此更改了任一历史区块,或者互换了两个区块,后续区块的工作量证明均需重新计算。

总结下打包一个区块的流程:

  1. 一笔交易发生,并向全网广播了这笔交易

  2. 所有节点(俗称“矿工”)开始计算 w w w

  3. 某一个节点计算出了 w w w,则打包区块并向全网广播该区块

    在比特币协议中,打包成功的节点可以在该区块的末尾添加一笔特殊交易,即给自己的奖励。该笔交易无需签名。因此每打包成功一个区块,系统中的比特币都会增加。

问题

  1. 收到不同的区块链广播,选择相信哪个?

    选择相信最长的那一个。如果区块链长度相同,则等待新的区块产生,使得其中的某一条链最长。(假设有人想伪造一个区块,则后续区块的工作量证明均需要重新计算,构成一条“伪造链”。除非伪造者拥有超过全网50%的算力,否则“伪造链”的长度迟早被其他矿工计算得到的链超过)

附录

密码哈希函数(比如SHA256)的特点

  1. 输入任意长度,输出是固定长度

  2. 计算hash值的速度比较快

  3. 防碰撞特性

    任意两个不同的输入值 x 、 y x、y xy,使得 H a s h ( x ) = H a s h ( y ) Hash(x)= Hash(y) Hash(x)=Hash(y)是困难的。 注意这里强调是“困难”的,而非“不可能“的。完全没有哈希碰撞,在理论上不可能

  4. 单向性

    难以从 H a s h ( x ) Hash(x) Hash(x)反推 x x x

  5. puzzlefriendly

    无法从输入数据,判断输出到底是什么样子。这意味着你无法通过控制输入值x来获得想要的输出值 H ( x ) H(x) H(x),比如无法预先判断哪些输入会使得一个hash值前K位是0。

参考链接

以上是关于区块链与加密货币的主要内容,如果未能解决你的问题,请参考以下文章

区块链与密码学第1-2讲:“疯狂”的加密数字货币

区块链与密码学第1-3讲:加密数字货币的通俗故事

区块链猎头分析区块链与密码货币如何相辅相成?

区块链与法律:非法集资

加密货币监控和区块链分析如何帮助避免加密货币欺诈?

区块链加密货币诈骗常见的八种类型介绍