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。

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

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

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

private key -> digital signature / witness

public key -> digital fingerprint / bitcoin address

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

Bitcoin 涉及到的数据结构和算法分析的更多相关文章

  1. <数据结构与算法分析>读书笔记--运行时间计算

    有几种方法估计一个程序的运行时间.前面的表是凭经验得到的(可以参考:<数据结构与算法分析>读书笔记--要分析的问题) 如果认为两个程序花费大致相同的时间,要确定哪个程序更快的最好方法很可能 ...

  2. C语言学习书籍推荐《数据结构与算法分析:C语言描述(原书第2版)》下载

    维斯 (作者), 冯舜玺 (译者) <数据结构与算法分析:C语言描述(原书第2版)>内容简介:书中详细介绍了当前流行的论题和新的变化,讨论了算法设计技巧,并在研究算法的性能.效率以及对运行 ...

  3. 数据结构与算法分析——C语言描述 第三章的单链表

    数据结构与算法分析--C语言描述 第三章的单链表 很基础的东西.走一遍流程.有人说学编程最简单最笨的方法就是把书上的代码敲一遍.这个我是头文件是照抄的..c源文件自己实现. list.h typede ...

  4. <数据结构与算法分析>读书笔记--最大子序列和问题的求解

    现在我们将要叙述四个算法来求解早先提出的最大子序列和问题. 第一个算法,它只是穷举式地尝试所有的可能.for循环中的循环变量反映了Java中数组从0开始而不是从1开始这样一个事实.还有,本算法并不计算 ...

  5. <数据结构与算法分析>读书笔记--数学知识复习

    数学知识复习是<数据结构与算法分析>的第一章引论的第二小节,之所以放在后面,是因为我对数学确实有些恐惧感.不过再怎么恐惧也是要面对的. 一.指数 基本公式: 二.对数 在计算机科学中除非有 ...

  6. [数据结构与算法分析(Mark Allen Weiss)]不相交集 @ Python

    最简单的不相交集的实现,来自MAW的<数据结构与算法分析>. 代码: class DisjSet: def __init__(self, NumSets): self.S = [0 for ...

  7. [数据结构与算法分析(Mark Allen Weiss)]二叉树的插入与删除 @ Python

    二叉树的插入与删除,来自Mark Allen Weiss的<数据结构与算法分析>. # Definition for a binary tree node class TreeNode: ...

  8. <数据结构与算法分析>读书笔记--函数对象

    关于函数对象,百度百科对它是这样定义的: 重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象.又称仿函数. 听起来确实很难懂,通过搜索我找到一篇 ...

  9. <数据结构与算法分析>读书笔记--利用Java5泛型实现泛型构件

    一.简单的泛型类和接口 当指定一个泛型类时,类的声明则包括一个或多个类型参数,这些参数被放入在类名后面的一对尖括号内. 示例一: package cn.generic.example; public ...

随机推荐

  1. qml 源码样例

    https://github.com/CodeBees/qtExample https://github.com/zhengtianzuo/QtQuickExamples/blob/master/RE ...

  2. 写给iOS开发者的React Native学习路线(转)

    我是一名iOS开发者,断断续续一年前开始接触React Native,最近由于工作需要,专职学习React Native也有一个多月了.网络上知识资源非常的多,但能让人豁然开朗.迅速学习的还是少数,我 ...

  3. 安装mysql 5.7版本遇到问题及解决办法

    遇见问题:1.执行MySql启动命令:net start mysql 报错:Mysql 服务正在启动Mysql 服务无法启动 服务没有报告任何错误. 解决办法:在mysql的安装目录下在my-defa ...

  4. APUE学习笔记——10.11~10.13 信号集、信号屏蔽字、未决信号

    如有转载,请注明出处:Windeal专栏 首先简述下几个概念的关系: 我们通过信号集建立信号屏蔽字,使得信号发生阻塞,被阻塞的信号即未决信号. 信号集: 信号集:其实就是一系列的信号.用sigset_ ...

  5. 剑指offer--50.滑动窗口的最大值

    时间限制:1秒 空间限制:32768K 热度指数:157641 题目描述 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值.例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的 ...

  6. 虚拟机中centos7与物理主机通讯

    本地物理机 WIN命令行:ipconfig 查看网络配置 在物理机的网络配置--> 配置VMnet8 打开VMware  编辑虚拟机设置,选择自定义NAT模式(VMnat8) 编辑->虚拟 ...

  7. ROS机器人操作系统官方教程、源码汇总

    1 wiki: http://wiki.ros.org/  2 code: https://github.com/ ---- 1 基础教程 https://github.com/ros/ros_tut ...

  8. Android 你可能忽略的提高敲代码效率的方式

    Android 你可能忽略的提高敲代码效率的方式

  9. 用前序和中序重建二叉树 python

    程序实现了用二叉树的前序遍历序列和中序遍历序列重建二叉树,代码用python实现. 首先定义二叉树节点的类: class TreeNode: def __init__(self, x): self.v ...

  10. python中封装

    封装 引子 从封装的本身意思去理解,封装就是用一个袋子,把买的水果.书.水杯一起装进袋子里,然后再把袋子的口给封上,照这样的理解来说,封装=隐藏,但是,这种理解是片面的 ## 如何封装 在python ...