開源 Bitcoin P2P電子貨幣是點(diǎn)對(duì)點(diǎn)的電子現(xiàn)金系統(tǒng),創(chuàng)建于2009年[http://en.wikipedia.org/wiki/Bitcoin]。無需金融機(jī)構(gòu)直接點(diǎn)對(duì)點(diǎn)支付。該電子貨幣系統(tǒng)的特色是無需信托中間人,能夠方便的進(jìn)行互聯(lián)網(wǎng)上的匯款。第三方不能夠控制或者阻止您的交易。Bitcoin 交易幾乎免費(fèi), 而信用卡的網(wǎng)上在線支付系統(tǒng)通常收取 1-5% 的交易費(fèi)用,加上其他各種費(fèi)用高達(dá)數(shù)百美元。避免了中央儲(chǔ)備銀行的不良政策和不穩(wěn)定性所造成的安全隱患. Bitcoin系統(tǒng)的有限貨幣通脹是均勻分布(由CPU決定)于整個(gè)網(wǎng)絡(luò), 而不是由銀行壟斷。
這被某些人認(rèn)為是最危險(xiǎn)的開源項(xiàng)目,但我覺得恰恰相反,這是有史以來最令人興奮的開源項(xiàng)目。這樣發(fā)行的幣才是真正的“人 民 幣”,人民才是被服務(wù),而不是被管理。P2P必將從商業(yè)、政治、生活各個(gè)方面重新定義新的更加公平公正的意識(shí)形態(tài)。
名詞解釋以及背后的技術(shù)
Bitcoin涉及到很多有意思的技術(shù),要想搞懂bitcoin首先必須對(duì)這些技術(shù)理解和把握然后是對(duì)Bitcoin術(shù)語的理解,bitcoin最重要的技術(shù)支撐是P2P,數(shù)字簽名(EC DSA),散列(SHA256, RIPEMD-160), POW,和HashCash。而術(shù)語則是:transaction, block, address, Merkle Tree.
工作證明 POW(Proof-Of-Work)機(jī)制
工作證明POW系統(tǒng)是要求對(duì)方服務(wù)前,必須要出據(jù)某種工作證明的機(jī)制。主要用于防止拒絕服務(wù)攻擊和反垃圾信息。通常這種“工作證明”會(huì)花費(fèi)一定的時(shí)間計(jì)算才能得到。最常見的例子是CAPTCHA。另外用于防止DoS和垃圾信息的機(jī)制是HashCash,bitcoin使用的原理就類似于HashCash.
HashCash 機(jī)制
hashcash 的靈感來自于這樣一個(gè)想法,即一些數(shù)學(xué)結(jié)果難于發(fā)現(xiàn)而易于校驗(yàn)。一個(gè)眾所周知的例子是因數(shù)分解一個(gè)大的數(shù)字(尤其是因數(shù)較少的數(shù)字)。將數(shù)字相乘來獲得它們的積的代價(jià)是低廉的,但首先找到那些因數(shù)的代價(jià)卻要高得多。
對(duì)交互式質(zhì)詢來說,因數(shù)分解足以勝任。比如,希望客戶端能象征性地為其付出代價(jià)方能訪問在線資源。這個(gè)時(shí)候可以定義協(xié)議,首先服務(wù)器向客戶端發(fā)送一個(gè)消息,說“只要您能因數(shù)分解這個(gè)數(shù),我將讓您得到這個(gè)資源”。沒有誠意的客戶端將無法得到我的資源,只有那些能夠證明自己有足夠的興趣、付出一些 CPU 周期來回答這個(gè)質(zhì)詢的才能得到這個(gè)資源。
不過,有一些資源無法很方便地進(jìn)行交互式協(xié)商。比如電子郵件反垃圾或者支付交易,怎么才能避免郵箱不被垃圾郵件所占據(jù)?“我并不介意陌生人給我寫信,但是,我希望他們能以稍微認(rèn)真的態(tài)度,親自通過對(duì)我有價(jià)值的郵件與我取得聯(lián)系。至少,我不希望他們是垃圾郵件制造者,那些人向我和上百萬的其他人發(fā)送包含同樣消息的郵件(double-spending),期望我們中的某些人能購買某種產(chǎn)品或者落入一個(gè)騙局。”而對(duì)于電子貨幣,內(nèi)容的復(fù)制幾乎是沒有代價(jià)的,如何保證電子貨幣(內(nèi)容)沒有被交易(發(fā)送)多次?這和反垃圾郵件是同樣的問題。
hashcash的解決之道就是:在電子郵件的消息頭中,增加一個(gè) hashcash 戳記(hashcash stamp)散列值;該散列中包含收件人地址,發(fā)送時(shí)間,salt,該散列值特別之處在于它至少前20位必須是0才是一個(gè)合法的hashcash戳記。為了得到合法的散列值,發(fā)送者必須經(jīng)過許多次嘗試(改變salt值)才能獲得。一旦生成戳記,不希望每一個(gè)給我發(fā)送郵件的垃圾郵件制造者都能重復(fù)使用它。所以,hashcash 戳記要帶一個(gè)日期。這樣可以指定時(shí)間更早的戳記是非法的。另外 hashcash 的接收端要實(shí)現(xiàn)一個(gè)double-spending數(shù)據(jù)庫,用來記錄戳記的歷史信息。
Bitcoin中的術(shù)語解釋
散列:bitcoin在計(jì)算散列時(shí)一般會(huì)計(jì)算2次。第一輪總是使用SHA-256散列,而第二次在大多數(shù)情況下,也是使用SHA-256散列,但用于生成較短的散列(例如生成 bitcoin接收地址的時(shí)候)會(huì)用RIPEMD-160散列。
hello 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 ( sha-256) 9595c9df90075148eb06860365df33584b75bff782a510c6cd4883a419833d50 (sha-256)
生成比特幣地址時(shí)(RIPEMD-160):
hello 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (sha-256) b6a9c8c230722b7c748331a8b450f05566dc7d0f (ripemd-160)
Addresses: Bitcoin Address是ECDSA公鑰(public key)的散列,計(jì)算方法如下:
? 1 2 3 4 5 6 7 8 9 10if
正式網(wǎng)絡(luò)
Version=0x00
else
if
測(cè)試網(wǎng)絡(luò)
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有一些區(qū)別:轉(zhuǎn)換的時(shí)候
#前面的0被作為單個(gè)0保留。