比特幣學(xué)習(xí)

1.密碼學(xué)以及加密貨幣簡(jiǎn)單介紹

我們知道加密貨幣是基于密碼學(xué)的,密碼學(xué)運(yùn)用了一些很巧妙的但是很高深的數(shù)學(xué)理論您觉,而比特幣只是使用了相對(duì)簡(jiǎn)單的密碼學(xué)的知識(shí)楣号,哈希和數(shù)字簽名刽脖。

1.1 Hash函數(shù)

Hash函數(shù)有以下幾點(diǎn)屬性:

  • 輸入可以是任意大小的string
  • 輸出大小是固定的
  • 計(jì)算n位字符串耗時(shí)O(n)

對(duì)于比特幣的Hash函數(shù)(比特幣用的SHA - 256举庶,輸出大小是256位):

  • collision‐resistance
    collision:兩個(gè)不同的x执隧、y,H(x) == H(y)
    ?collision‐resistance是指沒(méi)人能找到collision 灯变,但是collision是存在的
    ?為了找到collision,計(jì)算機(jī)需要計(jì)算2^256 +1次(最壞情況)捅膘,2^128 次(平均情況)
    ?這是什么概念添祸?把所有計(jì)算機(jī)從宇宙開始至今找到collision的幾率都非常低
    ?但是沒(méi)有任何一個(gè)hash 函數(shù)被證明是collision‐resistance的,因?yàn)楦怕侍貏e低寻仗,所以我們可以認(rèn)為它是collision‐resistance
    ?例子:兩個(gè)文件的hash值相同刃泌,我們就可以認(rèn)為是同一個(gè)文件
  • hiding
    假設(shè)r取值范圍是非常發(fā)散的,給定y = H(r||x)署尤,找到x是不太可行的(||串聯(lián))
  • puzzle‐friendliness
    假設(shè)r取值范圍是非常發(fā)散的耙替,給定y = H(r||x),y是n位輸出曹体,在時(shí)間小于O(2^n)不可能找到x
    ?這意味著想要hash函數(shù)輸出一個(gè)特定的值俗扇,如果隨機(jī)選取x,那么找到特定值是非常困難的

目前有很多種Hash函數(shù)箕别,比特幣使用的是SHA - 256 算法:

1.2 Hash指針

Hash指針不僅能獲取信息铜幽,也能驗(yàn)證該信息是否被改變
在普通使用指針的數(shù)據(jù)結(jié)構(gòu)中,都可以把指針替換為Hash指針串稀,例如除抛,鏈表(blockchain)、二叉樹(Merkle樹)

  • blockchain
    blockchain的一個(gè)有用的使用場(chǎng)景是防篡改日志母截,當(dāng)前只會(huì)保存創(chuàng)世塊的Hash指針到忽,假設(shè)a塊被篡改為a1塊,此時(shí)b塊存貯a塊的Hash值就會(huì)不一致清寇,因?yàn)閏ollision‐resistance喘漏,因?yàn)閍!=a1 所以H(a) != H(a1),此時(shí)就會(huì)檢測(cè)到不一致,如果還想成功篡改华烟,那么就需要篡改b塊的數(shù)據(jù)陷遮,以此類推會(huì)一直到創(chuàng)世塊,但是創(chuàng)世塊的Hash值是已經(jīng)被記錄的垦江,所以篡改始終會(huì)被檢測(cè)到


    image.png
  • Merkle樹
    Merkle樹就是用Hash指針的二叉樹帽馋,data都是葉子節(jié)點(diǎn)搅方,每?jī)蓚€(gè)葉子節(jié)點(diǎn)組成的父節(jié)點(diǎn)包含兩個(gè)相應(yīng)的Hash指針,如下圖


    image.png

    根據(jù)blockchain绽族,Merkle樹也是能夠檢測(cè)到篡改的姨涡,只需要記錄根節(jié)點(diǎn)的Hash指針

1.3 數(shù)字簽名

比特幣使用的是ECDSA,橢圓曲線數(shù)字簽名算法吧慢,是一種非對(duì)稱加密的算法
公鑰的主要作用:加密涛漂;驗(yàn)證簽名。私鑰的主要作用:簽名检诗;解密匈仗。
通過(guò)私鑰可以計(jì)算出公鑰,反之則不行逢慌。
公鑰加密:公鑰加密的內(nèi)容可以用私鑰來(lái)解密——只有私鑰持有者才能解密悠轩。
私鑰簽名:私鑰簽名的內(nèi)容可以用公鑰驗(yàn)證。公鑰能驗(yàn)證的簽名可以認(rèn)為是私鑰簽名的攻泼。

signature = sign(sk, msg) //sk: secret key
isValid = verify(pk, msg, signature) // pk: public key
ECDSA算法:
    Private key: 256位
    Public key, uncompressed: 512位
    Public key, compressed: 257位
    Message to be signed: 256位(限制大小火架、提高效率; 經(jīng)過(guò)RSA-256算法哈希過(guò)的message就是256位)
    Signature: 512位

技巧:1.msg大小是任意的忙菠,所以可以簽名H(msg)何鸡。 2.簽名Hash指針,這樣整個(gè)區(qū)塊都會(huì)被保護(hù)(可以只簽名blockchain 的最后一個(gè)區(qū)塊的Hash指針牛欢,這樣整個(gè)blockchain都被保護(hù))

公鑰的Hash作為身份標(biāo)識(shí)(比特幣的地址)

2.比特幣如何實(shí)現(xiàn)去中心化

比特幣實(shí)現(xiàn)去中心化是通過(guò)技術(shù)與激勵(lì)機(jī)制結(jié)合實(shí)現(xiàn)的骡男,但是沒(méi)有真正意義上的去中心化

2.1 比特幣去中心化的5個(gè)問(wèn)題
2.2 分布式共識(shí)

比特幣基于p2p網(wǎng)絡(luò)的,當(dāng)Alice向Bob支付Btc的時(shí)候傍睹,實(shí)際上會(huì)廣播這一筆交易到所有的比特幣網(wǎng)絡(luò)節(jié)點(diǎn)洞翩。


image.png

注意Bob在不在線不會(huì)影響到他是否接收這筆錢
很多用戶都在廣播這些交易到整個(gè)網(wǎng)絡(luò),各個(gè)節(jié)點(diǎn)必須完成共識(shí)這些交易的的合法性焰望,以及發(fā)生的順序骚亿,這樣系統(tǒng)會(huì)有一個(gè)全局的賬本,為了提高效率熊赖,把很多交易打包成塊来屠,基于這些區(qū)塊完成共識(shí)就行了,賬本記錄了已經(jīng)達(dá)成共識(shí)的區(qū)塊組成一條blockchain
每個(gè)節(jié)點(diǎn) 都有一個(gè)池子震鹉,保存了收到的未完成的交易(還沒(méi)有被包含進(jìn)blockchain)因?yàn)槭莗2p網(wǎng)絡(luò)俱笛,每個(gè)節(jié)點(diǎn)池子里的交易可能不一樣,那么所有的節(jié)點(diǎn)怎么共識(shí)確定一個(gè)block呢传趾?
一種方法:假設(shè)每間隔固定時(shí)間(10分鐘)迎膜,每個(gè)節(jié)點(diǎn)從自己的池子里打包一些交易作為block,輸入某種共識(shí)協(xié)議中浆兰,最終會(huì)輸出一個(gè)合法的磕仅、已經(jīng)共識(shí)確認(rèn)的block作為blockchain的最后一個(gè)block珊豹,剩余未打包的交易,等待下次block確認(rèn)就行了
上面方法和比特幣有點(diǎn)類似榕订,但比特幣并不是這么工作的店茶。因?yàn)槟承┕?jié)點(diǎn)可能會(huì)崩潰,或者是惡意的劫恒;而且p2p網(wǎng)絡(luò)不是完美的贩幻,延遲等各種問(wèn)題讓所有節(jié)點(diǎn)運(yùn)行某種共識(shí)協(xié)議不太可行

  • 比特幣的共識(shí)機(jī)制(Proof Of Work)
    因?yàn)楸忍貛啪W(wǎng)絡(luò)所有節(jié)點(diǎn)都沒(méi)有身份標(biāo)識(shí)的,所以沒(méi)有辦法懲罰那些惡意節(jié)點(diǎn)(eg包含非法交易两嘴、二次消費(fèi))丛楚,但是正因?yàn)楸忍貛攀且环N貨幣,所以可以通過(guò)獎(jiǎng)勵(lì)比特幣的方式來(lái)獎(jiǎng)勵(lì)誠(chéng)實(shí)的節(jié)點(diǎn)憔辫,所有的節(jié)點(diǎn)在不斷地競(jìng)爭(zhēng)計(jì)算機(jī)的算力趣些,去解決一個(gè)hash 謎題,找到一個(gè)nounce值螺垢,連接前一個(gè)區(qū)塊的hash以及本區(qū)塊的交易喧务,然后hash計(jì)算得出一個(gè)值赖歌,這個(gè)值需要小于某個(gè)targe
H(nonce || prev_hash || tx || tx || ... || tx) < target

這樣就找到個(gè)下一個(gè)區(qū)塊⊥髌裕現(xiàn)在一個(gè)區(qū)塊就包含了一系列交易、上一個(gè)區(qū)塊的hash值庐冯、以及一個(gè)nounce值孽亲,由于puzzle‐friendliness屬性,想要找到這個(gè)nounce值只能一個(gè)個(gè)去試展父。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末返劲,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子栖茉,更是在濱河造成了極大的恐慌篮绿,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吕漂,死亡現(xiàn)場(chǎng)離奇詭異亲配,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)惶凝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門吼虎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人苍鲜,你說(shuō)我怎么就攤上這事思灰。” “怎么了混滔?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵洒疚,是天一觀的道長(zhǎng)歹颓。 經(jīng)常有香客問(wèn)我,道長(zhǎng)拳亿,這世上最難降的妖魔是什么晴股? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮肺魁,結(jié)果婚禮上电湘,老公的妹妹穿的比我還像新娘。我一直安慰自己鹅经,他們只是感情好寂呛,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瘾晃,像睡著了一般刁赦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上易遣,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天胚嘲,我揣著相機(jī)與錄音,去河邊找鬼强胰。 笑死舱沧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的偶洋。 我是一名探鬼主播熟吏,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼玄窝!你這毒婦竟也來(lái)了牵寺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤恩脂,失蹤者是張志新(化名)和其女友劉穎帽氓,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體俩块,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡黎休,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了典阵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奋渔。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖壮啊,靈堂內(nèi)的尸體忽然破棺而出嫉鲸,到底是詐尸還是另有隱情,我是刑警寧澤歹啼,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布玄渗,位于F島的核電站座菠,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏藤树。R本人自食惡果不足惜浴滴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望岁钓。 院中可真熱鬧升略,春花似錦、人聲如沸屡限。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)钧大。三九已至翰撑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間啊央,已是汗流浹背眶诈。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瓜饥,地道東北人逝撬。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像压固,于是被迫代替她去往敵國(guó)和親球拦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子靠闭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容