比特幣的加密(秘鑰、地址相种、腳本驗證)

秘鑰生成和作用

  1. 私鑰
  • 私鑰是一個256位的2進(jìn)制隨機(jī)數(shù)威恼,可以取從0到22??-1之間的任意值
  • 私鑰可以根據(jù)不同的編碼標(biāo)準(zhǔn),生成不同編碼的私鑰格式寝并,不同格式之間可以相互轉(zhuǎn)換(Raw箫措、WIF、WIF-compressed)
  • 私鑰生成公鑰衬潦,所以根據(jù)私鑰是可以推導(dǎo)出公鑰的斤蔓,但是公鑰不能推出私鑰
  • 私鑰用來生成數(shù)字簽名用的
  1. 公鑰
  • 對私鑰進(jìn)行橢圓曲線加密處理,得到的公鑰
  • 公鑰在交易的時候:P2PKH的賬戶之間交易别渔,scriptSig里面需要有公鑰信息附迷,用來解鎖output惧互,因為output里面有 pubkHASH
  • 公鑰用來不可逆的生成公鑰哈希
  1. 公鑰哈希值
  • 公鑰哈希值=RIMPED160(SHA256(公鑰))
  • 為了保護(hù)公鑰哎媚,所以有pubkHash的概念,用在output.scriptPubKey的腳本里面喊儡,作為收款人的地址
  • 公鑰哈希值可以根據(jù)不同的編碼方式拨与,生成不同的地址,編碼方式不同艾猜,交易的鎖定腳本和解鎖腳本不同

Address

https://en.bitcoin.it/wiki/Address

image

  1. 根據(jù)地址的生成算法不同买喧,有3種類型的地址算法,和對應(yīng)的開頭: 1匆赃、3淤毛、bc1
    There are currently three address formats in use:
  • P2PKH which begin with the number 1, eg: 1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2.
  • P2SH type starting with the number 3, eg: 3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy.
  • Bech32 type starting with bc1, eg: bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq.
  1. 比特幣地址是一串由字母和數(shù)字組成的26-35位字符串,看起來有些像亂碼算柳,長短不同時因為前置的0低淡,被省略了
  2. 比特幣用戶和比特幣地址是一對多的關(guān)系,一個用戶可以生成多個比特幣地址(甚至可以離線生成)瞬项,但是一個比特幣地址只指向一個用戶蔗蹋。
  3. 不同算法的scriptPubKey不同

P2PKH地址的生成方式

https://www.cnblogs.com/zhaoweiwei/p/address.html
生成方式:

  1. 計算出pubKeyHash:公鑰哈希值=RIMPED160(SHA256(公鑰))
  2. 計算出校驗碼:校驗碼=前四字節(jié)(SHA256(SHA256(000+公鑰哈希值))) 如比特幣主網(wǎng)版本號“0x00"
  3. 最后計算出Address: 比特幣地址=1+Base58(0+公鑰哈希值+校驗碼) //16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM

P2PKH的交易腳本

  • scriptPubKey: OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
  • scriptSig: <sig> <pubKey>

舉個真實的例子:
ScriptSig:
PUSHDATA(72)[3045022100f8df16671995baaecab5a8d91fc3c78f22c156918cefb90dd1092fcd8578567d022041395667d7e99d131bffcb908904a2417cfb74b46df8bded2517a02beda0279701] PUSHDATA(33)
[021fc349da71680b2482e4c307adbd7aa2fc16d2cd564843ab873a8efff748d87b]

這里面的一個scriptSig由2部分組成,第一部分是簽名囱淋,第二部分是公鑰猪杭,PUSHDATA(N),表示要壓入棧頂?shù)腷yte妥衣,1個byte表示2個字符皂吮,PUSHDATA(72)表示壓入144個字符

Output Scripts
HASH160 PUSHDATA(20)[d3ecd0e0d42d4b617767d9d1b966216c77ebb513] EQUAL
DUP HASH160 PUSHDATA(20)[7c45023433aea27b48251d4c5a52b1d73caba74e] EQUALVERIFY CHECKSIG

第二個找零output地址因為是P2PKH開頭的戒傻,所以格式和描述的一樣

Pay-to-Script-Hash

https://www.hibtc.org/2428.html
結(jié)合多重簽名一起使用
scriptSig: ..signatures... <serialized script>
scriptPubKey: OP_HASH160 <scriptHash> OP_EQUAL

表示一共有n個參與方,只要有m個參與方同意了這筆交易蜂筹,則這筆交易就生效了稠鼻,具體的規(guī)則是通過scriptHash里面的腳本內(nèi)容決定的
m-of-n multi-signature transaction:
scriptSig: 0 <sig1> ... <script>
script: OP_m <pubKey1> ... OP_n OP_CHECKMULTISIG

ScriptSig:
0[] PUSHDATA(72)[30450221009b37b97eb11341a5fa69d191312df12a41449cf922dbf8e72e93eb6ca7515cb60220759126a28f69525903da3e79e873c59ee7355b6a4874eed06ed6f616712ee51201] PUSHDATA(71)[304402202da30a860b7a2ee3cf614aae2ae8fb5a75de3ea9d5274701ef0ceebc94f75801022063155b788bfb7cada4e8050992b23340d9324306fbd6a201a169ff4a676ea9d701] PUSHDATA1[52210246ccf4de0c54cc7f3354cdd993c2c50cf965fd82238b89659fbd73a1b4bf05a121024fc59f72272a897fe43803374969f396058152fe4765a8d15216f94624257b1b21022593bc69ecbf3bbcc3c58082267cb49dadaf4ca8dbf1b2297338a9d628c4297653ae]

HASH160 PUSHDATA(20)[d3ecd0e0d42d4b617767d9d1b966216c77ebb513] EQUAL

結(jié)合P2SH的新特征

  1. 多重簽名
    多重簽名是一種允許多個公鑰共同簽署一筆比特幣交易的技術(shù)。比如說狂票,使用多重簽名技術(shù)候齿,愛麗絲,鮑勃和查理可以共同監(jiān)管一個比特幣闺属,這樣慌盯,要動用該比特幣,至少需要他們之中的兩個人的同意掂器。
  • 比如類似于淘寶亚皂、京東這種中間商平臺介入的平臺, 實現(xiàn)2-3的支付模式
  • 防止單方擅用資產(chǎn)国瓮,2-2的模式灭必,只有2方同時同意才可以動用資產(chǎn)
  1. 延遲交易
    新的支付方式允許交易輸出在未來的某個時間點之前不可使用,OP_CHECKLOCKTIMEVERIFY

P2PKH賬戶的交易認(rèn)證

https://en.bitcoin.it/wiki/Transaction
目前比特幣支持兩種類型的交易:Pay-to-PubkeyHash乃摹、Pay-to-Script-Hash

  • txid
  • Input[] inputs
  • Output[] outputs
  1. Input的構(gòu)成
  • preTxid (該筆余額的來源交易hash)
  • index(屬于該筆交易的output[]下標(biāo))
  • scriptSig (<sig> <pubk>)(用秘鑰生成的簽名信息禁漓,和自己的公鑰信息)
  1. Output的構(gòu)成
  • value
  • scriptPubKey (pubkHash)

驗證一筆P2PKH交易的一個輸入是否合法:

  1. 先遍歷,根據(jù)每個Input的 Previous tx和Index孵睬,找到這筆input的輸出來源為哪筆交易的哪個輸出播歼。
  2. 并且把input的scriptSig ,pubkey 按照順序入棧
  3. 首先執(zhí)行OP_DUP掰读,這條指令是把棧頂元素pubkey 復(fù)制一份(scriptSig 秘狞,pubkey,pubkey)
  4. 緊接著執(zhí)行OP_HASH160蹈集,表示對棧頂進(jìn)行SHA256/RipeMD160烁试,實際就是計算公鑰hash:(scriptSig ,pubkey拢肆,pubkeyHash)
  5. 然后下一條是直接把數(shù)據(jù)46af3fb4…6829入棧(也就是對應(yīng)output里面的 pubkHash)
  6. 然后執(zhí)行OP_EQUALVERIFY减响,比較棧頂兩個元素是否相等,如果不相等善榛,整個腳本就執(zhí)行失敗
  7. 如果成功:最后執(zhí)行OP_CHECKSIG棧頂兩個元素進(jìn)行簽名校驗辩蛋,如果相等,出棧返回成功

總結(jié):先驗證這筆output是不是屬于該用戶移盆,再驗證該用戶的簽名是否有效

參考:
https://blog.csdn.net/jerry81333/article/details/56824166

初級版的比特幣交易
http://www.reibang.com/p/a57795ec562c

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末悼院,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子咒循,更是在濱河造成了極大的恐慌据途,老刑警劉巖绞愚,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異颖医,居然都是意外死亡位衩,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門熔萧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來糖驴,“玉大人,你說我怎么就攤上這事佛致≈疲” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵俺榆,是天一觀的道長感昼。 經(jīng)常有香客問我,道長罐脊,這世上最難降的妖魔是什么定嗓? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮萍桌,結(jié)果婚禮上宵溅,老公的妹妹穿的比我還像新娘。我一直安慰自己梗夸,他們只是感情好层玲,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布号醉。 她就那樣靜靜地躺著反症,像睡著了一般。 火紅的嫁衣襯著肌膚如雪畔派。 梳的紋絲不亂的頭發(fā)上铅碍,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機(jī)與錄音线椰,去河邊找鬼胞谈。 笑死,一個胖子當(dāng)著我的面吹牛憨愉,可吹牛的內(nèi)容都是我干的烦绳。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼配紫,長吁一口氣:“原來是場噩夢啊……” “哼径密!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起躺孝,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤享扔,失蹤者是張志新(化名)和其女友劉穎底桂,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惧眠,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡籽懦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了氛魁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暮顺。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖秀存,靈堂內(nèi)的尸體忽然破棺而出拖云,到底是詐尸還是另有隱情,我是刑警寧澤应又,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布宙项,位于F島的核電站,受9級特大地震影響株扛,放射性物質(zhì)發(fā)生泄漏尤筐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一洞就、第九天 我趴在偏房一處隱蔽的房頂上張望盆繁。 院中可真熱鬧,春花似錦旬蟋、人聲如沸油昂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽冕碟。三九已至,卻和暖如春匆浙,著一層夾襖步出監(jiān)牢的瞬間安寺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工首尼, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留挑庶,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓软能,卻偏偏與公主長得像迎捺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子查排,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

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