密码学原理- hash 函数

性质

1」collision resistance: 防止篡改
例如:一个m的hash(m),当m发生改变,装不到另一个m‘,使得hash(m’)=hash(m)
【collision free: 无法人为制造hash碰撞】
【brute-force:遍历所有的输入找到发生的hash碰撞】

2」hiding:单向(只可以从输出算出输出,反向不可行)

  • 蛮力求解;遍历所有输入找到相同的输出hash(m‘)=hash(x),则找到x=m’, 此时就要求x的范围足够大
  • digital commitment(digital equaivalent of sealed envelope)

3」puzzle friendly
我们利用改变不同的nonce,找到使hash(block header)<=target 的nonce。这种需要很多次计算的方法成为 pow(proof of work), 找到合适的nonce很困难,但是我们反向验证十分方便,此为puzzle friendly

SHA256——Bitcoin中使用的hash function

签名

1」bitcoin账户管理

去中心化,每个用户自己决定开户,即自己创建公钥(public key)和私钥(private key)

  • 来源于非对称加密体系(asymmetric encryption algorithm):

加密用公钥(相当于银行账号),解密用私钥(保存在本地,相当于银行账号密码):解决秘钥传输不方便

  • 私钥的用途:

用于签名,方便其他账户知道此次转账确实为本人操作(验证签名:用公钥)

2」a good source of randomness??

数据结构 — hash pointer

1」blockchain

  • 第一个区块(genesis block),最近产生的区块(most recent block)
  • 每一个block都包含前一个block

2」merkle tree

  • 与二叉树(binary tree)类似,用hash pointer 代替普通指针

  • 最底层leaf node:数据块(data block),上面的每一层均为hash pointer

—data block的哈希值存在上层的 hash pointer,两个data block(类似于二 叉树)的哈希值的和再去哈希值再存储到上一层的 hash pointer,直到根结点(root)
—根结点的哈希值为root hash

—只要知道root hash,可以检测对任何节点的修改

  • 数据块(data block)每个数据块是一个交易(transaction):分为块头(header) 和块身

—块头(header):没有交易的具体信息只有root hash value
—块身(body):储存交易列表

  • 用途:merkle proof
    又称为proof of membership , proof of inclusion

如何像轻节点证明交易完成:
找到交易的位置,从交易位置到root的路径一路计算hash直到根结点,再与保存的root hash进行比较,称为merkle proof

—全节点:保存 header + body:保存路径中所有用到的hash
—轻节点:只保存 header
—时间复杂度为log(n);不存在证明时间复杂度为(n)

2.1」sorted merkle tree
对底层(leaf node)的hash value进行排序,可以更好的进行不存在证明,时间复杂度为log(n),bitcoin不需要

bitcoin(1)相关推荐

  1. 基于区块链的健康链系统设计与实现(2)区块链平台Web服务器

    2.2 区块链平台分析 Bitcoin(比特币)作为区块链技术的起源,是目前发展最成熟的开源区块链平台之一,拥有大量的开发人员和活跃的开发社区.Ethereum(以太坊)核心是支持智能合约的EVM(以 ...

  2. HyperLeger Fabric学习(一)

    HyperLeger Fabric学习(一) 一.HyperLeger简介 1.HyperLeger简介 2.Hyperledger社区组织结构 3.Hyperledger顶级项目 二.Hyperle ...

  3. Bitcoin ABC首席开发者回应有关比特币现金的提问(二)

    提问:hunk_quark 对Phil Wilson有什么想法吗? 回答:Amaury Séchet 没有.但如果一定要说有什么想法,我认为他让澳本聪的故事更加合乎情理,但另一方面,他们都没有提供任何 ...

  4. Bitcoin 中的挖矿算法(2) 难度值说明

    1. Bitcoin的难度值 定义创世区块中的 target, 其 difficulty = 1既是规定一个256位的整数0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF ...

  5. 股市币市:数据分析与交易所最新公告(20190303)

    BTC比特币 1. 比特币分位数数据 2. 比特币交易图 3. 比特币分位数图 4. 比特币筹码分布图 数据来源: https://coinmarketcap.com/currencies/bitco ...

  6. 股市币市:数据分析与交易所最新公告(20190302)

    BTC比特币 1. 比特币分位数数据 2. 比特币交易图 3. 比特币分位数图 4. 比特币筹码分布图 数据来源: https://coinmarketcap.com/currencies/bitco ...

  7. 股市币市:数据分析与交易所最新公告(20190301)

    沪深300 1. 沪深300分位数数据 2. 沪深300股指图 3. 沪深300分位数图 4. 沪深300筹码分布图 数据来源: https://finance.sina.com.cn/stock/ ...

  8. 股市币市:数据分析与交易所最新公告(20190228)

    沪深300 1. 沪深300分位数数据 2. 沪深300股指图 3. 沪深300分位数图 4. 沪深300筹码分布图 数据来源: https://finance.sina.com.cn/stock/ ...

  9. 股市币市:数据分析与交易所公告(20190227)

    沪深300 1. 沪深300分位数数据 2. 沪深300股指图 3. 沪深300分位数图 4. 沪深300筹码分布图 数据来源: https://finance.sina.com.cn/stock/ ...

最新文章

  1. CentOS 7最小安装之后应该尽快做好的几件事情
  2. JMeter常用组件
  3. 运维分级发布_华为杨超斌发布面向“1+N”目标网的5G全系列解决方案
  4. AutoComplete - 自动完成插件
  5. aes c android ios,AES加密在iOS和Android中产生不同的结果
  6. STL之双向循环链表(List)的内部关系
  7. html中第一行代码,HTML5 CSS3初学者指南(1) – 编写第一行代码
  8. [转载] 2011 ScrumGathering大会简要记录 - 周金根
  9. mysql-----触发器
  10. Esp8266(1)
  11. 计算机组成原理期末笔记,计算机组成原理复习笔记.pdf
  12. PreScan快速入门到精通第十一讲之PreScan道路标记,建筑物、抽象物体及交通标识
  13. zai php 里面写js,php中写入js代码
  14. ros中的电机速度控制_ROS与RACECAR教程-电调控制
  15. 用Canvas画一棵二叉树
  16. github能访问但是ping不通
  17. Android中实现图片编辑功能
  18. matlab 截屏为什么没有呢,录屏没有呀!什么都没有,只有截屏,原来明明有的,现在不知道为什么就突然没有了(手机华为青春版)...
  19. Linux下SD卡开发笔记(一)-SD 相关基础概念
  20. person search代码使用小教程

热门文章

  1. IEEE 754 浮点数的详细分析
  2. android-刷机-filezilla-不要跟着做
  3. PHP 阿里云实人认证
  4. 【opencv 450 Image Processing】Periodic Noise Removing Filter周期性去噪滤波器
  5. 段码液晶屏怎么焊接?
  6. 小米历史版本在哪下载
  7. 【恩墨有约成都站】Kamus和老熊与你相约,不止是技术
  8. oracle 行级死锁_解决Oracle数据库死锁
  9. 从三网融合看音视频即时通讯的市场与挑战
  10. Java中IO(三、转换流与打印流)