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。

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 涉及到的数据结构和算法分析的更多相关文章
- <数据结构与算法分析>读书笔记--运行时间计算
有几种方法估计一个程序的运行时间.前面的表是凭经验得到的(可以参考:<数据结构与算法分析>读书笔记--要分析的问题) 如果认为两个程序花费大致相同的时间,要确定哪个程序更快的最好方法很可能 ...
- C语言学习书籍推荐《数据结构与算法分析:C语言描述(原书第2版)》下载
维斯 (作者), 冯舜玺 (译者) <数据结构与算法分析:C语言描述(原书第2版)>内容简介:书中详细介绍了当前流行的论题和新的变化,讨论了算法设计技巧,并在研究算法的性能.效率以及对运行 ...
- 数据结构与算法分析——C语言描述 第三章的单链表
数据结构与算法分析--C语言描述 第三章的单链表 很基础的东西.走一遍流程.有人说学编程最简单最笨的方法就是把书上的代码敲一遍.这个我是头文件是照抄的..c源文件自己实现. list.h typede ...
- <数据结构与算法分析>读书笔记--最大子序列和问题的求解
现在我们将要叙述四个算法来求解早先提出的最大子序列和问题. 第一个算法,它只是穷举式地尝试所有的可能.for循环中的循环变量反映了Java中数组从0开始而不是从1开始这样一个事实.还有,本算法并不计算 ...
- <数据结构与算法分析>读书笔记--数学知识复习
数学知识复习是<数据结构与算法分析>的第一章引论的第二小节,之所以放在后面,是因为我对数学确实有些恐惧感.不过再怎么恐惧也是要面对的. 一.指数 基本公式: 二.对数 在计算机科学中除非有 ...
- [数据结构与算法分析(Mark Allen Weiss)]不相交集 @ Python
最简单的不相交集的实现,来自MAW的<数据结构与算法分析>. 代码: class DisjSet: def __init__(self, NumSets): self.S = [0 for ...
- [数据结构与算法分析(Mark Allen Weiss)]二叉树的插入与删除 @ Python
二叉树的插入与删除,来自Mark Allen Weiss的<数据结构与算法分析>. # Definition for a binary tree node class TreeNode: ...
- <数据结构与算法分析>读书笔记--函数对象
关于函数对象,百度百科对它是这样定义的: 重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象.又称仿函数. 听起来确实很难懂,通过搜索我找到一篇 ...
- <数据结构与算法分析>读书笔记--利用Java5泛型实现泛型构件
一.简单的泛型类和接口 当指定一个泛型类时,类的声明则包括一个或多个类型参数,这些参数被放入在类名后面的一对尖括号内. 示例一: package cn.generic.example; public ...
随机推荐
- 二十、dbms_stats(用于搜集,查看,修改数据库对象的优化统计信息)
1.概述 作用:用于搜集,查看,修改数据库对象的优化统计信息. 2.包的组成 1).get_column_stats作用:用于取得列的统计信息语法:dbms_stats.get_column_stat ...
- 公客网beta阶段项目展示
课程评价网站--公客网 为大学生选课排忧解难 公正客观的评课网站 为大学生提供发表自己看法的平台 为每一门课程打出公正的评分 beta阶段的新功能 beta阶段发布说明 评价的增删改 对课程发表评价 ...
- 转:SQL Server服务器名称与默认实例名不一致的修复方法
--原因分析: --SERVERPROPERTY 函数的 ServerName 属性与@@SERVERNAME 返回相似的信息. --ServerName 属性提供Windows 服务器和实例名称,两 ...
- 2018-2019-2 网络对抗技术 20165202 Exp6 信息搜集与漏洞扫描
博客目录 一.实践目标 二.实践内容 各种搜索技巧的应用 DNS IP注册信息的查询 基本的扫描技术:主机发现.端口扫描.OS及服务版本探测.具体服务的查点 漏洞扫描:会扫,会看报告,会查漏洞说明,会 ...
- Entity Framework技术系列
http://www.cnblogs.com/yilin/tag/Entity%20Framework/
- Shell 从日志文件中选择时间段内的日志输出到另一个文件
Shell 从日志文件中选择时间段内的日志输出到另一个文件 情况是这样的,某系统的日志全部写在一个日志文件内,所以这个文件非常大,非常长,每次查阅的时候非常的不方便.所以,相关人员希望能够查询某个时间 ...
- [置顶]
完美解决Android Studio 运行时出现的警告信息?
今天群友看到他说运行的时候报下面的错,我记得我之前导入百度地图也是遇到过,运行的时候一堆警告信息,然后编译失败等的,特别郁闷,其实后来在网上查了下,原来是很多第三方里面加个混淆,然后你有找不到那些方法 ...
- Swift UIAlertController、UISegmentedControl
// MARK: 提示框 func _initAlertView() { let btn = UIButton(type: UIButtonType.ContactAdd) btn.frame = C ...
- Form表单如何传递List数组对象到后台的解决办法(转)
举例说明: [后台有一个对象 User 一个PhotoDo对象],结构如下: public class User{ private String username; private List&l ...
- 日志组件logback的介绍及配置使用方法(二)
四.Logback的默认配置 如果配置文件 logback-test.xml 和 logback.xml 都不存在,那么 logback 默认地会调用BasicConfigurator ,创建一个最小 ...