當前位置:首頁 » 比特幣問答 » 比特幣簽名和簽名腳本

比特幣簽名和簽名腳本

發布時間: 2023-04-30 00:01:18

比特幣開發者指南(二)續--- P2PKH腳本驗證和P2SH腳本

驗證過程需要對簽名腳本和公鑰腳本進行求值,在P2PKH 輸出中,公鑰腳本的格式是盯戚:

發送方的簽名腳本被解析作為整個腳本的頭部。在P2PKH交易中,簽名腳本包含了一個secp256k1的簽名,和完整的公鑰,這樣和上面的公鑰腳本連在一起就創建了完整的腳本

腳本語言是一個基於棧的、故意被設計成無狀態、非圖靈完備的語言。無狀態確保交易一旦被放到區塊鏈上,就不會出現輸出永遠不能被花費的情況。非圖靈完備陵笑(缺少循環和goto語句)讓腳本語言更加靈活(flexible)和可預見,大大簡化了安全模型。

為了測試交易是否有效,簽名腳本和公鑰腳本的操作逐語句執行,從Bob的簽凱汪陵名腳本開始直到Alice的公鑰腳本。下面的圖展示了腳本的執行過程。

公鑰腳本由發送方創建,發送方並不在乎公鑰腳本是幹嘛用的。接收方很關心公鑰腳本,如果他們想,會讓發送方使用一個特殊的公鑰腳本。不幸的是,一般的公鑰腳本不像比特幣地址那樣簡單,而且在不同的程序之間無法互通(在BIP70支付協議實現之前)。

為了解決這個問題,pay-to-script-hash(P@SH)交易在2012念的時候被創建。它允許用戶創建一個公鑰腳本,這個公鑰腳本包含第二個腳本的哈希和回收腳本的。

基本的P2SH工作流如下圖所示,看起來幾乎和P2PKH的工作流一樣。Bob創建一個回收腳本,然後進行哈希,並且將回收腳本給Alice,Alice創建一個P2SH-style輸出用於包含Bob的回收腳本。

當Bob需要花那個輸出中的錢的時候,他在他的簽名腳本中包含回收腳本和他的簽名。P2P網路確保完整的回收腳本的哈希和Alice在他的輸出中所給出的一致。然後執行回收腳本,執行成功就允許Bob花費那個輸出,否則執行失敗。

回收腳本的哈希和公鑰腳本的哈希有同樣的功能---因此只需要通過一點點改動,它也可以被轉換成標準的比特幣地址。這是的搜集P2SH風格的地址和P2PKH風格的一樣簡單。哈希同樣可以隱藏哈希的具體內容,所以P2SH腳本和P2PKH腳本一樣安全。

❷ 腳本解鎖訂閱原理

腳本解鎖是一個「解決」或滿足被鎖定腳本在一個輸出上設定的花費條件的腳本,同時它將允許輸出被消費。解鎖腳本是每一筆比特幣交易輸出的一部分,而且往往含有一個被用戶的比特幣錢包(通過用戶的私鑰)生成的數字簽名。由於解鎖腳本常常包含一個數字簽名,因此它曾被稱作ScriptSig。在大多數比特幣應用的源代碼中,ScriptSig便是我們所說的解鎖腳本。考慮到更寬泛的鎖定腳本要求,在本書中,我們將它稱為「解鎖腳本」。但並非所有解鎖腳本都一定會包含簽名

❸ 比特股的交易

比特股X認識到,當所有的交易數據都在使用同樣的腳本時,那麼保持腳本語言的靈活性是不必要的。

在比特幣的案例中,腳本語言的使用是受限的,因此我們無法使用比特幣的交易腳本來創建比特股X的交易宣告數據。

因此,定義了一套包含七種宣告條件的交易類型:

以簽名宣告

在交易數據輸出時,允許持有人簽名進行宣告。

這就跟標準的比特幣交易輸出腳本一樣。

以M分之N的簽名宣告

在交易數據輸出時,允許M位持有者當中的N位簽名進行宣告。

這就像是比特幣的多重簽名交易輸出。

以買單宣告

在特定的資產已經以指定的價位支付給買家之下,允許輸出執行支付。

一筆買單可以被部份達成,只要同時產生一個包含了變更的買單即可。

買單只能夠在新的區塊依照市場撮和演算法產生時,以其他的買單宣告、做多宣告、平倉宣告的交易輸出等明確的方式來進行撮和。

一項買單宣告的交易輸出也可以經由買家的簽名進行支付,此情形下買家可以取消掛單。

以做多宣告

當有人在某個價位做空 (以平倉宣告)時,允許此類交易輸出宣告。

空頭頭寸必須和另一個鑄造了等量的新BitUSD以簽名宣告的交易輸出相契合。

這種交易輸出也可以經由其持有者簽名進行支付,此情形下該持有者可以取消掛單。

以平倉宣告

允許從為空倉背書的抵押金中收取費用,該費用應與同一筆交易當中所銷毀的BitUSD成相應比例。

BitUSD的銷毀方式是將其包含在交易輸入數據中,但是不包含在交易輸出數據中達成的。

這筆交易輸出只能夠經由持有者補平,除非該輸出是被用於包含在掛單撮和演算法中作為追加保證金的一部分。

以期權執行宣告

在設定的日期之前,將期權買方將指定金額付給期權賣方的情況下,允許交易輸出進行支付。

在設定的日期之後,交易輸出只能由期權賣方來宣告。

以密碼宣告

用於跨鏈交易,在以下兩種情況下允許交易輸出執行支付: 提供兩組簽名或是一組簽名和一組密碼。

交易費用被設定為需支付的每位元組數據對應BTSX的價格。

簡譽伍單地說,交易費用即是市場執行訂單撮和演算法所收取的費用。

確切的交易費用根據每一筆掛單金額而有所變動。

關於具體的交易費用,我們計劃在比特股X已經運營一段時間並獲得一些歷史數據後再做公布。

要尋求更詳細的解釋請參見後面的「訂單撮和演算法」部分。

制定受託人銷毀比率以實現盈利

比特股X將比特股X視為一個分布式自治公司(DAC)並尋求盈利。

因此它應當為持股人賺取利潤。

盈利的實現,除了依靠股份市值的增長之外,還可以藉由制定銷毀比率來銷毀交易費用實現。

在經濟學角度上看,減少BTSX的供應量就如同將交易費用成比例以分紅的形式發給所有BTSX持股人。

雖比特股X會把用戶的BTSX的余額占總流通量的多寡按百分比進行顯示,因此會看到余額會隨著產塊的過程逐漸增加。

當用戶花費BTSX時,用戶界面在交易發生之前將顯示的佔百分比換算回真實的股份數量,然後再發送到區塊鏈上。

比特股X使用了非傳統的掛單撮和演算法。

傳統的掛單撮和演算法選擇提供給買家所要求的最少數量,有時會多一些,而比特股X的撮合演算法將總是提供給買家所要求恰好的數量。

如果出現最高買入價大於最低賣出價的情況時 – 其差額將會被系統收取為手續費。

在比特股X當中買家和賣家沒有本質的區別,因為一個用美元購入BTSX的人和用BTSX購入美元的人沒有分別。

雙方的交易都在各自指定的價位上成交,而非雙方使用了共同的價格。

其差額會被系統留存作為手續費。

比特股掛單撮和演算法

採用這種演算法的原因是為了懲罰那些想要製造大量掛單操縱單邊市場的人,因為在此演算法之下手續費的數目將會隨著掛單的數量成比例地增加。

這項設計是為了增強基於價值的投資而非純技術流的交易。

我們預期這將會減低市場波動性以及流動性,因為擾亂式的交易被移除了。

市場的參與者們對自燃源己的掛單能夠精準成交應該不會有抱怨,這樣一來大家只會理性地以他們認為合理的方式下單。

在開市並創建第一個比特資產之前,應該先以共識價格建立最小的市場深度。

相關的規則正在慶段或評估中,目前的設計是這樣的:

· 撮合所有的空單和多單 – 這將消除重疊掛單並建立一個初始的買/賣散布單。

· 核算參考價格 – 計算剩餘的最高買入價以及最低的賣出價得出平均值。

· 驗證+/-15%參考價格以內的市場深度 – 當買入以及賣出的量超過了最小臨界值,稱之為開放深度,交易將會被允許並正式開始。

藉由觸發市場需求或是買下所有掛單的行為可能會造成操縱市場攻擊並破壞市場的情況發生。

為此,當+/-15%參考價格以內的市場深度低於運行深度時,交易會中止。

如果價格在某交易回合中波動超過1%,那麼交易會暫停5分鍾。

這些保護措施避免了操縱市場造成的價格快速波動,並給交易者機會增加抵押品或是增加新掛單來穩定價格。

❹ 4. 比特幣的密鑰、地址和錢包 - 精通比特幣筆記

比特幣的所有權是通過密鑰、比特幣地址和數字簽名共同確定的。密鑰不存在於比特幣網路中,而是用戶自己保存,或者利用管理私鑰的軟體-錢包來生成及管理。

比特幣的交易必須有有效簽名才會被存儲在區塊中,因此擁有密鑰就擁有對應賬戶中的比特幣。密鑰都是成對出現的,由一個公鑰和一個私鑰組成。公鑰相當於銀行賬號,私鑰就相當於銀行卡密碼。通常情況下密鑰由錢包軟體管理,用戶不直接使用密鑰。

比特幣地址通常是由公鑰計算得來,也可以由比特幣腳本得來。

比特幣私鑰通常是數字,由比特幣系統隨機( 因為演算法的可靠性與隨機性正相關,所以隨機性必須是真隨機,不是偽隨機,因此比特幣系統可以作為隨機源來使用 )生成,然後將私鑰作為輸入,使用橢圓曲線演算法這個單向加密函數生成對應的公鑰,再將公鑰作為輸入,使用單向加密哈希函數生成地址。例如,通過公鑰K得到地址A的計算方式為:

其中SHA256和PIPEMD160被稱為雙哈希或者HASH160,Base58Check是帶有驗證功能的Base58編碼,驗證方式為先計算原始數據(編碼前)的驗證碼,再比較編碼後數據的驗證碼,相同則地址有效,否則無效。而在使用Base58Check編碼前,需要對數據做處理。
處理方式為: 版本前綴 + 雙哈希後的數據 + 校驗碼
其中版本前綴是自定義的,如比特幣私鑰的前綴是0x80,校驗碼是把版本前綴和雙哈希後的數據拼接起來,進行兩次SHA256計算,取前4位元組。得到處理的數據後,再進行Base58編碼,得到最終的結果。

下圖是Base58Check版本前綴和Base58編碼後的結果

密鑰可以採用不同的編碼格式,得到的編碼後結果雖然不同,但密鑰本身沒有任何變化,採用哪種編碼格式,就看情況而論了,最終目的都是方便人們准確無誤的使用和識別密鑰。
下圖是相同私鑰採用不同編碼方式的結果:

公鑰也有很多種格式,不過最重要的是公鑰被分為壓縮格式和非壓縮格式,帶04前綴的公鑰為非壓縮格式的公鑰,而03,02開頭的標識壓縮格式的公鑰。

前面說過,公鑰是橢圓曲線上的一個點,由一對坐標(x, y)表示,再加上前綴,公鑰可以表示為:前綴 x y。
比如一個公鑰的坐標為:

以非壓縮格式為例,公鑰為(略長):

壓縮格式的公鑰可以節省一定的存儲,對於每天成千上萬的比特幣交易記錄來說,這一點點的節省能起到很大效果。

因為橢圓曲線實際上是一個方程(y2 mod p = (x3 + 7)mod P, y2是y的平方,x3是x的立方),而公鑰是橢圓曲線上的一個點,那麼公鑰即為方程的一個解,如果公鑰中只保留x,那麼可以通過解方程得到y,而壓縮公鑰格式有兩個前綴是因為對y2開方,會得到正負兩個解,在素數p階的有限域上使用二進制算術計算橢圓曲線的時候,y坐標或奇或偶,所以用02表示y為奇數,03表示y為偶數。

所以壓縮格式的公鑰可以表示為:前綴x
以上述公鑰的坐標為准,y為奇數為例,公鑰K為:

不知道大家發現沒有,這種壓縮方式存在一個問題,即一個私鑰可以得出兩個公鑰,壓縮和非壓縮公鑰,而這兩個公鑰都對應同一個私鑰,都合法,但生成的比特幣地址卻不相同,這就涉及到錢包軟體的實現方式,是使用壓縮公鑰還是非壓縮公鑰,或者二者皆用,這個問題後面來介紹。

比特幣錢包最主要的功能就是替用戶保管比特幣私鑰,比特幣錢包有很多種,比如非確定性(隨機)錢包,確定性(種子)錢包。所謂的非確定性是指錢包運行時會生成足夠的私鑰(比如100個私鑰),每個私鑰僅會使用一次,這樣私鑰管理就很麻煩。確定性錢包擁有一個公共種子,單向離散方程使用種子生成私鑰,種子足夠回收所有私鑰,所以在錢包創建時,簡單備份下,就可以在錢包之間轉移輸入。

這里要特別介紹下助記碼詞彙。助記碼詞彙是英文單詞序列,在BIP0039中提出。這些序列對應著錢包中的種子,種子可以生成隨機數,隨機數生成私鑰,私鑰生成公鑰,便有了你需要的一切。所以單詞的順序就是錢包的備份,通過助記碼詞彙能重建錢包,這比記下一串隨機數要強的多。

BIP0039定義助記碼和種子的創建過程如下:

另外一種重要的錢包叫做HD錢包。HD錢包提供了隨機(不確定性) 鑰匙有兩個主要的優勢。
第一,樹狀結構可以被用來表達額外的組織含義。比如當一個特定分支的子密鑰被用來接收交易收入並且有另一個分支的子密鑰用來負責支付花費。不同分支的密鑰都可以被用在企業環境中,這就可以支配不同的分支部門,子公司,具體功能以及會計類別。
第二,它可以允許讓使用者去建立一個公共密鑰的序列而不需要訪問相對應的私鑰。這可允許HD錢包在不安全的伺服器中使用或者在每筆交易中發行不同的公共鑰匙。公共鑰匙不需要被預先載入或者提前衍生,但是在伺服器中不具有可用來支付的私鑰。

BIP0038提出了一個通用標准,使用一個口令加密私鑰並使用Base58Check對加密的私鑰進行編碼,這樣加密的私鑰就可以安全地保存在備份介質里,安全地在錢包間傳輸,保持密鑰在任何可能被暴露情況下的安全性。這個加密標准使用了AES,這個標准由NIST建立,並廣泛應用於商業和軍事應用的數據加密。

BIP0038加密方案是: 輸入一個比特幣私鑰,通常使用WIF編碼過,base58chek字元串的前綴「5」。此外BIP0038加密方案需要一個長密碼作為口令,通常由多個單詞或一段復雜的數字字母字元串組成。BIP0038加密方案的結果是一個由base58check編碼過的加密私鑰,前綴為6P。如果你看到一個6P開頭的的密鑰,這就意味著該密鑰是被加密過,並需個口令來轉換(解碼) 該密鑰回到可被用在任何錢包WIF格式的私鑰(前綴為5)。許多錢包APP現在能夠識別BIP0038加密過的私鑰,會要求用戶提供口令解碼並導入密鑰。

最通常使用BIP0038加密的密鑰用例是紙錢包一一張紙張上備份私鑰。只要用戶選擇了強口令,使用BIP0038加密的私鑰的紙錢包就無比的安全,這也是一種很棒的比特幣離線存儲方式(也被稱作「冷存儲」)。

P2SH函數最常見的實現時用於多重簽名地址腳本。顧名思義,底層腳本需要多個簽名來證明所有權,然後才能消費資金。這類似在銀行開設一個聯合賬戶。

你可以通過計算,生成特殊的比特幣地址,例如我需要一個Hello開頭的地址,你可以通過腳本來生成這樣一個地址。但是每增加一個字元,計算量會增加58倍,超過7個字元,需要專門的硬體或者礦機來生成,如果是8~10個字元,那麼計算量將無法想像。

❺ 比特幣的數字簽名簡介

比特幣中的數字簽名,是交易中的發起方產生的,為了保證這筆交易確實是由此人發起,並且數據在傳輸時沒有被篡改。數字簽名簡單點來說,就是完整的交易信息,通過數字摘要技術壓縮成固定格式的字元串,然後通過非對稱加密技術,生成一個私鑰。將完整的交易信息和數字簽名傳送給礦工,礦工用交易發起方的公鑰對數字簽名進行解密,解密成功,就將此交易數據寫到區塊中。

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

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

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

P2PKH的交易腳本

舉個真實的例子:
ScriptSig:
PUSHDATA(72)[9701] PUSHDATA(33)
[]

這裡面的一個scriptSig由2部分組成,第一部分是簽名,第二部分是公鑰,PUSHDATA(N),表示要壓入棧頂的byte,1個byte表示2個字元,PUSHDATA(72)表示壓入144個字元

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

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

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

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

ScriptSig:
0[] PUSHDATA(72)[1201] PUSHDATA(71)[01] PUSHDATA1[]

HASH160 PUSHDATA(20)[] EQUAL

結合P2SH的新特徵

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

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

總結:先驗證這筆output是不是屬於該用戶,再驗證該用戶的簽名是否有效

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

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

❼ 『學概念找員外』門限密碼與多重簽名

密鑰分存還是有一個問題:密鑰分存之後,如果後面要用原密鑰來簽名,那就需要取得子密鑰,還原成原密鑰,然後才能簽名。這個過程有可能被黑客乘虛而入,盜取密鑰。

密碼學可以解決這個問題。如果子密鑰儲存在不同的設備中,可以以去中心化的方式還原原密鑰,而不是在某台設備上完成,這種技術叫門限簽名(threshold signature)技術。典型的例子就是使用雙重安全機制的電子錢包(N=2且K=2),如果兩個子密鑰分別保存在個人電腦和手機上,你可以在電腦上發起付款,這時,電腦會生成一個簽名片段,並發送到你的手機上,然後,手機會提示你付款信息(包括收款人、金額等),然後等待你確認。如果你確認了付款信息,這時,手機會利用它的子密鑰完成整個簽名,然後廣播到區塊鏈上。萬一黑客控制了你的電腦,試圖把比特幣轉到他的賬戶,你根據手機上的付款信息就知道有問題了,從而不會確認這筆交易。門限密碼涉及的數學細節比較復雜,員外也看不懂,所以就不展開討論了。

門限簽名是密碼學中的一項技術,將一個密鑰切分成不同片段,分別儲存,在交易簽名時無須還原原密鑰。而多重簽名是比特幣腳本的特性,把一個比特幣賬戶的控制權交給多個密鑰,這些密鑰共同保障賬戶安全。門限簽名和多重簽名都能克服密鑰單點保存的缺陷。

還有另外一種方法可以克服密鑰單點保存的缺陷,即多重簽名(multisignatures),這個名詞在第3章曾出現過。通過比特幣腳本,可以直接把一個比特幣賬戶的控制權交給多個密鑰,而不是將密鑰分存。這些密鑰可以保存在不同的地點,並分別生成簽名。當然,最終完成的交易的信息還是會保存在某台設備上,但即使黑客控制了這台設備,他所能做的也只不過阻止這個交易被廣播到整個網路上去。沒有其他設備參與,他無法生成出一個正當有效的多重簽名。

舉例來說,假設A、B、C、D、E是一家公司的創始人,這家公司有許多的比特幣。我們可能會用多重簽名來保護這些比特幣。這5個人,每人都有一對密鑰,我們可以用其中的3個簽名來保護冷儲存,一筆交易需要5個人中至少3個人的簽名才能完成。

這樣,只要我們5個人在不同地方且使用不同的安全措施保存各自的密鑰,那麼比特幣就會相當安全。黑客必須盜取我們當中3個人的密鑰,才能盜取比特幣。即便我們其中一個或兩個背棄了我們,他(們)也無法捲款而逃,因為他們還需要另一個簽名。同時,如果我們其中一個遺失了密鑰,其他人還是可以取出比特幣,並轉到新的賬戶,重新設置密碼。總而言之,多重簽名可以比較妥善地管理在冷儲存端的大額比特幣,任何重大事項都需要多人的參與才能實現。

上文中,我們說到,人們使用門限簽名技術的原因是為了實現雙重安全機制或多重安全機制,使用多重簽名技術的原因是為了實現多人對共同財產實現共同控制。實際上,這兩種技術都可以實現上述兩種目的。

❽ 如何使用比特幣離線簽名交易

GUA單GUADAN

❾ 什麼是比特幣延展性攻擊

交易的延展性,也被稱作為是可鍛性,啥叫可鍛,也即同樣一個東西(如一坨金屬),它的本質和質量都沒有改變,但是它的形狀改變了。而這個可鍛性,會造成交易ID——TXID的不一致,從而導致用戶找不到發送的交易。
現在比特幣的交易數據格式中,將交易簽名部分也納入了整體交易中,最後對整體交易做哈希,而交易簽名又可以有多種寫法,攻擊者篡改了它們,它們作用上是一樣的,但是位元組發生了變化,導致這個簽名不一樣了,前段時間甚至有一個礦池挖出了一個包含所有交易都是延展攻擊了的,給一些應用帶來了麻煩。
TXID發生變化可能會導致一些應用在查找TXID時找不到,從而影響一些錢包充值或提現的狀態,給運營者和用戶帶來麻煩,隔離見證是為了解決這個問題而提出的,將交易數據和簽名數據分開,這樣一筆交易的TXID一定唯一。

❿ 比特幣的數字簽名是什麼

比特幣的數字簽名,就是只有比特幣轉賬的轉出方生成的,一段防偽造的字元串。通過驗證該數字串,一方面證明該交易是轉出方發起的,另一方面證明交易信息在傳輸中沒有被更改。
數字簽名通過數字摘要技術把交易信息縮短成固定長度的字元串。舉個栗子,牛牛發起一筆比特幣轉賬,需要先將該交易進行數字摘要,縮短成一段字元串,然後用自己的私鑰對摘要進行加密,形成數字簽名。完成後,牛牛需要將原文(交易信息)和數字簽名一起廣播給礦工,礦工用牛牛的公鑰進行驗證,如果驗證成功,說明該筆交易確實是牛牛發出的,且信息未被更改。
同時,數字簽名加密的私鑰和解密的公鑰不一致,採用非對稱加密技術。看起來好復雜,其實轉賬只需要你輸入私鑰就瞬間完成啦!

熱點內容
區塊鏈usdt源碼 發布:2025-07-01 02:20:05 瀏覽:700
火礦幣 發布:2025-07-01 02:17:29 瀏覽:953
幣圈交易策略分析 發布:2025-07-01 02:09:59 瀏覽:657
數字區塊鏈哪家好 發布:2025-07-01 02:01:20 瀏覽:762
挖比特幣都有哪些礦機品牌 發布:2025-07-01 01:55:50 瀏覽:789
幣圈資訊哪裡人多 發布:2025-07-01 01:55:45 瀏覽:816
冷錢包有啥 發布:2025-07-01 01:46:20 瀏覽:715
數字貨幣被騙怎麼報案 發布:2025-07-01 01:03:27 瀏覽:460
國家會打區塊鏈 發布:2025-07-01 00:53:28 瀏覽:928
比特幣爆倉提醒app 發布:2025-07-01 00:49:49 瀏覽:532