zoukankan      html  css  js  c++  java
  • Bitcoin 涉及到的数据结构和算法分析

    Bitcoin

    2008 年中本聪提出 Bitcoin 的概念。

    2009 年项目上线。

    所有 coin 由 mining 产生,一共 2100 万枚。通过调整 difficulty, 确保每隔10min 产生新的 block。

    PoW + chaining,使得修改交易记录基本不可能。

    Bitcoin 由四部分组成:

    • 去中心化的 P2P 网络( bitcoin 协议 )
    • 公开的交易账本( blockchain ,区块链 )
    • 用于交易验证和货币发行的一套规则( consensus rules,共识规则 )
    • 选择全局认同的区块链( PoW algo,工作量证明)

    Merkle tree : hash tree

    leaf node: hash(data block)

    non-leaf node: hash(children nodes)

    hash tree 的优点:高效、安全地验证数据内容。

    确定一个叶子节点是否属于一棵二叉树:O(log(# leaf nodes))。

    hash list: O(# leaf nodes)。

    Uses:确定数据 undamaged,unaltered,not fake。Git/Mercurial 使用了 Merkle tree。

     Merkle tree

    Cryptographic hash function

    Mathematical algorithm: 将任意长度的数据转换为固定长度的比特字符串。

    one-way function: message->hash 很容易, 但 hash->message 很难,几乎不可能。

    输入数据:message。

    输出数据:hash value (hash,message digest,digest)

    理想的 cryptographic hash function 具有 5 个性质:

    1. deterministic,确定性/唯一性。相同的输入总会得到相同的 hash。

    2. 可以很快计算出任一给定 message 的 hash value。

    3. 从 hash value 反推出 message 是不可行的。除了尝试所有可能的 message(暴力破解)。

    4. 如果 message 有了很小的变化,那么 hash value 会有很大的变化(雪崩效应,这一点与 simhash 相反)。

    5. 找到具有相同的 hash value 的 两个不同的 message 是不可行的。

    cryptographic hash function 也可用于快速查找,不过成本比较高。

    cryptographic hash function 的安全级别有以下几个性质:

    1. Pre-image resistence

    从 hash value 找出 message 很难。

    2. Second pre-image resistence

    给定 m1,很难找到一个不同的 m2,满足 hash(m1) = hash(m2)。

    3. Collision resistence

    很难找到两个不同的 m1、m2,满足 hash(m1) = hash(m2)。

    要求 hash value 的长度是 pre-image resistence 需要的两倍。不然会在 birthday attack 中发生碰撞。

    Public key cryptography

    • prime number exponentiation
    • elliptic curve multiplication

    Diffie-Hellman key exchange agreement(Merkle 提出相关概念)

    在 public channel 上安全地交换 cryptographic key。

    和 RSA 一样,是一种 public key encryption algo。

    private key -> digital signature / witness

    public key -> digital fingerprint / bitcoin address

    public key -> SHA256 -> RIPEMD160 -> public key hash -> Base58check Encode

  • 相关阅读:
    elasticsearch 调整参数 调参 -- 副本 分片 读写流程 -- elasticsearch配置
    对创新的理解 -- 价值共生、协同生长
    update_by_query ingest pipeline
    create index pattern Forbidden error
    apache转发规则 + nginx location 正则匹配经典案例
    拨测ip+port 告警 telnet nc
    configMap简单理解
    sidecar收集Tomcat日志-普通用户
    使用DBeaver连接pheonix
    bladex开发自己的服务不推送服务器的方法
  • 原文地址:https://www.cnblogs.com/huangzejun/p/9491383.html
Copyright © 2011-2022 走看看