`
surpass
  • 浏览: 87577 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

开源 Bitcoin P2P电子货币系统背后的技术 (一)

阅读更多

转载:http://www.showmuch.com/article/article_115.html

开源 Bitcoin P2P电子货币是点对点的电子现金系统,创建于2009年[http://en.wikipedia.org/wiki/Bitcoin]。无需金融机构直接点对点支付。该电子货币系统的特色是无需信托中间人,能够方便的进行互联网上的汇款。第三方不能够控制或者阻止您的交易。Bitcoin 交易几乎免费, 而信用卡的网上在线支付系统通常收取 1-5% 的交易费用,加上其他各种费用高达数百美元。避免了中央储备银行的不良政策和不稳定性所造成的安全隐患. Bitcoin系统的有限货币通胀是均匀分布(由CPU决定)于整个网络, 而不是由银行垄断。

这被某些人认为是最危险的开源项目,但我觉得恰恰相反,这是有史以来最令人兴奋的开源项目。这样发行的币才是真正的“人 民 币”,人民才是被服务,而不是被管理。P2P必将从商业、政治、生活各个方面重新定义新的更加公平公正的意识形态。

名词解释以及背后的技术

Bitcoin涉及到很多有意思的技术,要想搞懂bitcoin首先必须对这些技术理解和把握然后是对Bitcoin术语的理解,bitcoin最重要的技术支撑是P2P,数字签名(EC DSA),散列(SHA256, RIPEMD-160), POW,和HashCash。而术语则是:transaction, block,  address, Merkle Tree.

工作证明 POW(Proof-Of-Work)机制

工作证明POW系统是要求对方服务前,必须要出据某种工作证明的机制。主要用于防止拒绝服务攻击和反垃圾信息。通常这种“工作证明”会花费一定的时间计算才能得到。最常见的例子是CAPTCHA。另外用于防止DoS和垃圾信息的机制是HashCash,bitcoin使用的原理就类似于HashCash.

HashCash 机制

hashcash 的灵感来自于这样一个想法,即一些数学结果难于发现而易于校验。一个众所周知的例子是因数分解一个大的数字(尤其是因数较少的数字)。将数字相乘来获得它们的积的代价是低廉的,但首先找到那些因数的代价却要高得多。

对交互式质询来说,因数分解足以胜任。比如,希望客户端能象征性地为其付出代价方能访问在线资源。这个时候可以定义协议,首先服务器向客户端发送一个消息,说“只要您能因数分解这个数,我将让您得到这个资源”。没有诚意的客户端将无法得到我的资源,只有那些能够证明自己有足够的兴趣、付出一些 CPU 周期来回答这个质询的才能得到这个资源。

不过,有一些资源无法很方便地进行交互式协商。比如电子邮件反垃圾或者支付交易,怎么才能避免邮箱不被垃圾邮件所占据?“我并不介意陌生人给我写信,但是,我希望他们能以稍微认真的态度,亲自通过对我有价值的邮件与我取得联系。至少,我不希望他们是垃圾邮件制造者,那些人向我和上百万的其他人发送包含同样消息的邮件(double-spending),期望我们中的某些人能购买某种产品或者落入一个骗局。”而对于电子货币,内容的复制几乎是没有代价的,如何保证电子货币(内容)没有被交易(发送)多次?这和反垃圾邮件是同样的问题。

hashcash的解决之道就是:在电子邮件的消息头中,增加一个 hashcash 戳记(hashcash stamp)散列值;该散列中包含收件人地址,发送时间,salt,该散列值特别之处在于它至少前20位必须是0才是一个合法的hashcash戳记。为了得到合法的散列值,发送者必须经过许多次尝试(改变salt值)才能获得。一旦生成戳记,不希望每一个给我发送邮件的垃圾邮件制造者都能重复使用它。所以,hashcash 戳记要带一个日期。这样可以指定时间更早的戳记是非法的。另外 hashcash 的接收端要实现一个double-spending数据库,用来记录戳记的历史信息。

Bitcoin中的术语解释

散列:bitcoin在计算散列时一般会计算2次。第一轮总是使用SHA-256散列,而第二次在大多数情况下,也是使用SHA-256散列,但用于生成较短的散列(例如生成 bitcoin接收地址的时候)会用RIPEMD-160散列。

hello
 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 ( sha-256)
 9595c9df90075148eb06860365df33584b75bff782a510c6cd4883a419833d50 (sha-256)

生成比特币地址时(RIPEMD-160):

hello
 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (sha-256)
 b6a9c8c230722b7c748331a8b450f05566dc7d0f (ripemd-160)

Addresses: Bitcoin Address是ECDSA公钥(public key)的散列,计算方法如下:

if 正式网络
  Version=0x00
else if 测试网络
  Version=0x6F
end
key_hash=Version+RIPEMD-160(SHA-256(public_key))
Checksum = SHA-256(SHA-256(Key hash))[0..3]  #取两次散列值后的前4位
Bitcoin_Address = Base58Encode(Key_hash+Checksum)
#Base58编码做了特殊处理,与通用的base58有一些区别:转换的时候
#前面的0被作为单个0保留。
 

分享到:
评论

相关推荐

    BITCOIN挖掘机开源(PCB、固件)

    bitcoin挖掘机全部开源。。。有原理图、PCB板和固件、BOM

    一个用于 Bitcoin 加密货币的核心集成和暂存树:它支持比特币的核心功能,并为整个加密货币生态系统的发展提供了基础

    一个用于 Bitcoin 加密货币的核心集成和暂存树。作为 Bitcoin 协议的官方实现,这个项目提供了一个基础平台,供开发者参与 Bitcoin 网络的开发、测试和维护。它支持比特币的核心功能,并为整个加密货币生态系统的...

    bitcoin算法之一

    bitcoin算法之一的源代码,我是从其他网站花了银子下载下来的,我自己提取并移植的有用的部分在使用,希望对大家有帮助

    bitcoin whitepaper.pdf

    白皮书详细阐述了一种不需要中间金融机构参与的电子货币系统,该系统可以防止双重支付,即同一笔资金被重复消费的问题。 在传统的金融体系中,金融机构担任着可信赖的第三方角色,来确保电子支付的安全性。然而,...

    ubuntu下编译bitcoin

    在Ubuntu系统中编译Bitcoin涉及一系列步骤,包括安装必要的依赖库、下载源码以及编译和安装过程。下面是详细的步骤: 1. **安装基础依赖**: 首先,你需要确保系统拥有编译和构建软件的基础环境。通过运行以下命令...

    bitcoin技术白皮书

    bitcoin技术白皮书bitcoin技术白皮书bitcoin技术白皮书

    bitcoin-0.3.0_bitcoin0.3_bITCoin_

    bitcoin0.3.0源代码,谢谢,20个字,谢谢。

    master bitcoin

    master bitcoin,master bitcoin,master bitcoin 区块链 的好书

    bitcoin-rpc.jar.zip

    在数字货币领域,比特币(Bitcoin)作为一种去中心化的加密货币,其底层技术——区块链,受到了广泛的关注。而与比特币交互的一种常见方式就是通过远程过程调用(RPC,Remote Procedure Call)。本文将详细介绍如何...

    区块链架构之美,通过对Bitcoin,Ethereum,Fabric的技术原理分析,自底而上的介绍区块链底层技术原理

    通过对Bitcoin,Ethereum,Fabric的技术原理分析,自底而上的介绍区块链底层技术原理。

    bitcoin0.13源码编译步骤有图ubuntu16.04

    本文将详细介绍如何在 Ubuntu 16.04 系统上进行 Bitcoin 0.13 版本的源码编译过程,并记录在此过程中遇到的一些常见问题及其解决方法。 #### 一、环境准备 为了能够在 Ubuntu 16.04 上成功编译 Bitcoin 0.13 的源...

    bitcoin.conf

    bitcoin RPC节点配置文件示例

    bitcoin源码分析文档

    * CBlockHeader:CBlockHeader 是 Bitcoin 源码中一个重要的数据结构,包括了版本号、前一区块记录、Markle 树根节点、时间戳、目标值、随机数等属性。 * CTransaction:CTransaction 是 Bitcoin 源码中另一个重要的...

    SIMPLE BITCOIN WALLET DOCUMENTATION

    This is a simple bitcoin wallet application that can help those who are getting started with bitcoin programming using python. In this project I use python version 3.6 and Pycharm. File free to fork ...

    bitcoin客户端 2013年最新版

    bitcoin客户端 2013年官方最新版

    python-bitcoin-blockchain-parser, 一个 python 3比特链.zip

    python-bitcoin-blockchain-parser, 一个 python 3比特链 bitcoin-blockchain-parser 这个 python 3库为bitcoind存储的原始数据提供了一个解析器。特性检测输出类型检测输出中的地址解释脚本支持 SegWit支持有序块...

    From Bitcoin to Burning Man & Beyond

    比特币不仅是一种数字货币,更是一种分布式账本技术(即区块链技术)的应用实例,其背后蕴含着对于去中心化、透明度和信任机制等核心理念的思考。 #### 部分内容解析 **第一章:“社交计算与大数据”** 本章由...

    princeton_bitcoin_book

    princeton_bitcoin_book

    bitcoin-trace-master.zip

    因此,一个名为“bitcoin-trace-master”的项目应运而生,它旨在提供一个系统化、综合性的平台,用于追踪和分析比特币交易行为。 比特币追踪系统的开发与应用涉及多个方面,包括但不限于交易数据的收集、处理、存储...

Global site tag (gtag.js) - Google Analytics