中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

免費(fèi)網(wǎng)站推廣軟文發(fā)布中國國家數(shù)據(jù)統(tǒng)計(jì)網(wǎng)

免費(fèi)網(wǎng)站推廣軟文發(fā)布,中國國家數(shù)據(jù)統(tǒng)計(jì)網(wǎng),公司建設(shè)官方網(wǎng)站,wordpress 商務(wù)區(qū)塊鏈技術(shù)與應(yīng)用 數(shù)組 列表 二叉樹 哈希函數(shù) BTC中的密碼學(xué)原理 cryptographic hash function collsion resistance(碰撞抵抗) 碰撞指的是找到兩個不同的輸入值,使得它們的哈希值相同。也就是說,如果存在任意兩個輸入x和y,滿足x ≠ y…

區(qū)塊鏈技術(shù)與應(yīng)用

數(shù)組

列表

二叉樹

哈希函數(shù)

BTC中的密碼學(xué)原理

cryptographic hash function

  • collsion resistance(碰撞抵抗)

碰撞指的是找到兩個不同的輸入值,使得它們的哈希值相同。也就是說,如果存在任意兩個輸入x和y,滿足x ≠ y,但哈希函數(shù)計(jì)算后得到的哈希值H(x) = H(y),那么就存在一個碰撞。

碰撞抗性的原理在于,對于一個安全的哈希函數(shù),找到一個碰撞是非常困難的。也就是說,計(jì)算出一個碰撞的時(shí)間和計(jì)算哈希函數(shù)的時(shí)間相比要非常長。這種困難性是基于哈希函數(shù)的設(shè)計(jì)和理論假設(shè),例如散列算法的復(fù)雜性、數(shù)學(xué)難題或者密碼學(xué)的安全假設(shè)。

  • hiding

哈希函數(shù)的計(jì)算過程是單向的,不可逆的。但前提要滿足輸入控件足夠大,且分布均勻。通常我們在實(shí)際操作中會使用添加隨機(jī)數(shù)的方法。假設(shè)給定一個輸入值X,可以算出哈希值H(x),但是不能從H(x)推出X。

  • puzzle friendly(只能暴力碰撞)

通常我們限定輸出的哈希值在一定范圍內(nèi),即H(block header + nonce) < target (block header是區(qū)塊鏈的鏈頭),這個確定鏈頭范圍的過程即為挖礦

BTC用的HASH函數(shù)SHA-256(Secure Hash Algorithm)

BTC簡單流程

區(qū)塊頭(Block Header):每個區(qū)塊都有一個區(qū)塊頭,它包含了一些重要的信息,如前一個區(qū)塊的哈希值、交易信息、時(shí)間戳等。在挖礦中,挖礦節(jié)點(diǎn)會對區(qū)塊頭進(jìn)行計(jì)算,以尋找符合特定條件的哈希值。

目標(biāo)值(Target):目標(biāo)值是一個用于控制挖礦難度的參數(shù)。它通常表示為一個固定長度的二進(jìn)制數(shù),在挖礦過程中被用來限定哈希值的范圍。挖礦節(jié)點(diǎn)的目標(biāo)是找到一個符合要求的哈希值,使得該哈希值小于目標(biāo)值。

哈希值計(jì)算:挖礦節(jié)點(diǎn)會將區(qū)塊頭與一個隨機(jī)的值(稱為nonce)進(jìn)行組合,然后通過哈希函數(shù)對組合后的數(shù)據(jù)進(jìn)行計(jì)算,得到一個哈希值。該哈希值應(yīng)該是不可預(yù)測且隨機(jī)的。

比較與驗(yàn)證:計(jì)算得到的哈希值與目標(biāo)值進(jìn)行比較。如果哈希值小于目標(biāo)值,則該區(qū)塊被認(rèn)為是有效的。挖礦節(jié)點(diǎn)將這個有效的區(qū)塊廣播給網(wǎng)絡(luò)中的其他節(jié)點(diǎn),并將其添加到區(qū)塊鏈上。

難度調(diào)整:為了保持挖礦的平均時(shí)間間隔,比特幣等一些區(qū)塊鏈系統(tǒng)會根據(jù)全網(wǎng)的算力情況動態(tài)調(diào)整目標(biāo)值。如果全網(wǎng)的算力上升,目標(biāo)值將會降低,以增加挖礦難度;如果全網(wǎng)的算力下降,目標(biāo)值將會提高,以降低挖礦難度。

密碼學(xué)運(yùn)用

公鑰加密和簽名:比特幣賬戶使用公鑰加密和簽名算法,如橢圓曲線數(shù)字簽名算法(ECDSA)。在創(chuàng)建賬戶時(shí),會生成一對密鑰:公鑰私鑰。

公鑰用于生成賬戶地址,私鑰用于對交易進(jìn)行簽名以驗(yàn)證身份和授權(quán)交易。

在這里插入圖片描述

助記詞和種子短語:助記詞(seed phrase)是一串由單詞組成的短語,它是通過密碼學(xué)安全的算法從隨機(jī)數(shù)生成的種子短語(seed phrase)。助記詞用于備份和恢復(fù)比特幣錢包,保證了即使設(shè)備丟失或損壞,仍能夠恢復(fù)錢包和資金。

隨機(jī)性和密鑰生成:比特幣賬戶的密鑰對是通過密碼學(xué)安全的隨機(jī)數(shù)生成算法生成的。安全的隨機(jī)數(shù)是在密碼學(xué)中至關(guān)重要的,確保密鑰的隨機(jī)性和不可預(yù)測性,以保護(hù)賬戶的安全性。

防篡改的區(qū)塊鏈:比特幣使用密碼學(xué)中的哈希指針和區(qū)塊鏈技術(shù),確保賬戶和交易的不可篡改性。區(qū)塊鏈的每個區(qū)塊都包含了前一個區(qū)塊的哈希值,通過這種鏈接方式,保證了賬戶余額和交易歷史的可驗(yàn)證性和不可篡改性。

在這里插入圖片描述

區(qū)塊1
-------
|     |
| 哈希 |
|     |
-------
| 上一個區(qū)塊的哈希 |
-------------------
|    時(shí)間戳      |
-------------------
|      數(shù)據(jù)      |
-------------------區(qū)塊2
-------
|     |
| 哈希 |
|     |
-------
| 上一個區(qū)塊的哈希 |
-------------------
|    時(shí)間戳      |
-------------------
|      數(shù)據(jù)      |
-------------------區(qū)塊3
-------
|     |
| 哈希 |
|     |
-------
| 上一個區(qū)塊的哈希 |
-------------------
|    時(shí)間戳      |
-------------------
|      數(shù)據(jù)      |
-------------------

BTC的數(shù)據(jù)結(jié)構(gòu)

區(qū)塊鏈

用hash指針代替了普通指針

Block(區(qū)塊)

比特幣的區(qū)塊是由多個交易組成的數(shù)據(jù)結(jié)構(gòu)。

區(qū)塊的哈希計(jì)算方法

  1. 獲取區(qū)塊頭數(shù)據(jù):區(qū)塊的哈希值是基于區(qū)塊頭(Block Header)計(jì)算的。區(qū)塊頭包含了一些重要的信息,包括前一個區(qū)塊的哈希、交易信息、時(shí)間戳等。

  2. 拼接數(shù)據(jù):將區(qū)塊頭中的各個字段按照特定的順序拼接在一起。

    通常的拼接順序是:版本號、前一個區(qū)塊的哈希、默克爾根(Merkle Root)、時(shí)間戳、難度目標(biāo)和隨機(jī)數(shù)(Nonce)。

  3. 哈希計(jì)算:對拼接后的數(shù)據(jù)應(yīng)用SHA-256哈希函數(shù)進(jìn)行計(jì)算。

    計(jì)算結(jié)果是一個256位的二進(jìn)制數(shù),通常以十六進(jìn)制表示。

  4. 驗(yàn)證難度目標(biāo):將計(jì)算得到的哈希值與當(dāng)前區(qū)塊鏈的難度目標(biāo)進(jìn)行比較。難度目標(biāo)是一個固定長度的二進(jìn)制數(shù),用于控制挖礦的難度。哈希值必須小于難度目標(biāo)才能滿足挖礦的要求。

  5. 重復(fù)過程:如果計(jì)算得到的哈希值不滿足難度目標(biāo),需要調(diào)整區(qū)塊的隨機(jī)數(shù)(Nonce),再次進(jìn)行哈希計(jì)算。這個過程稱為挖礦,旨在尋找符合要求的哈希值。

  6. 區(qū)塊的哈希值:一旦找到滿足要求的哈希值,這個哈希值將成為該區(qū)塊的標(biāo)識,稱為區(qū)塊的哈希值。

Merkle Tree(默克爾樹)是一種樹狀的數(shù)據(jù)結(jié)構(gòu),用于有效地驗(yàn)證大量數(shù)據(jù)的完整性。它在區(qū)塊鏈和其他分布式系統(tǒng)中廣泛使用。

            Root Hash (Merkle Root)/            \Hash A                 Hash B/       \              /       \Hash 1   Hash 2      Hash 3   Hash 4

通過默克爾根可以快速驗(yàn)證交易是否被篡改。同時(shí),在區(qū)塊鏈中,默克爾樹還用于優(yōu)化存儲和同步數(shù)據(jù)的過程,提高網(wǎng)絡(luò)效率。

Merkle proof

->驗(yàn)證數(shù)據(jù)交易的可信鏈

在這里插入圖片描述

proof of membership->Merkle proof

proof of membership->Sorted Merkle Tree

class CBlockHeader
{
public:// headerint32_t nVersion;           // 當(dāng)前使用的比特幣版本,不可更改uint256 hashPrevBlock;      // 前一個區(qū)塊的Hash,不可更改uint256 hashMerkleRoot;     // MerkleTree的根Hashuint32_t nTime;             // 時(shí)間戳,因?yàn)楸忍貛啪W(wǎng)絡(luò)不要求絕對的時(shí)間同步,所以這個值可以小范圍的調(diào)整uint32_t nBits;             // 目標(biāo)閾值,根據(jù)協(xié)議定期調(diào)整uint32_t nNonce;            // 隨機(jī)數(shù)......
}

BTC協(xié)議

去中心化貨幣需要解決的兩個問題:

  1. 數(shù)字貨幣的發(fā)行

  2. 怎么驗(yàn)證

它的解決方案是

  1. 比特幣的發(fā)行是由挖礦決定的
  2. 依靠區(qū)塊鏈的數(shù)據(jù)結(jié)構(gòu)

在這里插入圖片描述
比特幣的發(fā)行者 A 擁有鑄幣權(quán)(create coin),假如發(fā)行 10 個比特幣,A(10) 分別給 B 和 C 各五個bitcoin → B(5) C(5),該交易需要有 A 的簽名,證明經(jīng) A 同意(signed by A)。同時(shí)還要說明花掉的10個比特幣從哪來的。我們可以看到第二個方框中 A 的錢是從第一個框內(nèi)鑄幣交易中來的。

比特幣系統(tǒng)中每個交易都包含輸入和輸出兩部分。輸入部分要說明幣的來源,輸出部分要給出收款人公鑰的哈希

有的交易部分比較復(fù)雜,如 C 的貨幣來源是第二、第三個方框的交易,要標(biāo)識清楚。

上圖就構(gòu)成了一個小型的區(qū)塊鏈,這里有兩種哈希指針,一種哈希指針是連接在各個區(qū)塊之間的,把它們串起來構(gòu)成一個鏈表,前面學(xué)的就是這種哈希指針。而在該圖中還有第二種哈希指針,是指向前面某個交易的指針,用來指明幣的來源。

double speeding attack

為什么要說明幣的來源?:證明幣不是憑空捏造的,是有記錄的,同時(shí)也是為了防范雙花攻擊(double spending attack)

現(xiàn)在來看第二個方框里 A 向 B 的轉(zhuǎn)賬,該交易需要 A 的簽名和 B 的地址。比特幣系統(tǒng)里收款的地址是通過公鑰推算出來的。比如 B 的地址就是 B 的公鑰取哈希,然后經(jīng)過一些轉(zhuǎn)換得到的。

A 如何知道 B 的地址呢?比特幣系統(tǒng)中沒有查詢對方地址的功能,必須通過其他渠道。比如某個電商網(wǎng)站,接受比特幣支付,就可以公開它的地址或公鑰

那如何才能知道 A 的公鑰?實(shí)際上交易里就包含了。輸入時(shí)不僅要輸入幣的來源,還要輸入公鑰。那這就存在了安全漏洞,假如 B 的同伙偽造了這次交易呢?其實(shí)第一個方框里鑄幣交易的輸出就有 A 的公鑰的哈希,所以第二個方框交易里 A 的公鑰要跟前面哈希對的上

上圖是對交易系統(tǒng)進(jìn)行的簡化,實(shí)際上每個區(qū)塊(對應(yīng)圖中的每個方框)可以有很多交易,這些交易組成默克爾樹(merkle tree)。每個區(qū)塊分為塊頭(block header)和塊身(block header)。

區(qū)塊

塊頭(block header)

塊頭是一個固定長度的數(shù)據(jù)結(jié)構(gòu),包含了關(guān)于區(qū)塊的元信息。

  • 版本號(Version):表示該區(qū)塊的版本。
  • 上一個區(qū)塊的哈希(Previous Block Hash):指向上一個區(qū)塊的哈希值,用于鏈接區(qū)塊鏈中的前后關(guān)系。(Hash of previous block header)
  • Merkle 樹根哈希(Merkle Root Hash):是一個哈希值,用于校驗(yàn)區(qū)塊中所有交易的完整性。
  • 時(shí)間戳(Timestamp):記錄了區(qū)塊的生成時(shí)間。
  • 難度目標(biāo)(Difficulty Target):表示該區(qū)塊的工作量證明難度目標(biāo)。->挖礦的難度值
  • 隨機(jī)數(shù)(Nonce):用于工作量證明的計(jì)算。

在這里插入圖片描述

Block Body

Merkle Root Hash->保證交易完整性

交易列表(Transaction List):這是一個包含多個交易的列表,每個交易記錄了參與者之間的資產(chǎn)轉(zhuǎn)移和交易細(xì)節(jié),如發(fā)送方、接收方、金額等。這些交易構(gòu)成了區(qū)塊鏈上的賬本數(shù)據(jù)。

交易(Transaction): 比特幣的交易是指貨幣或其他資產(chǎn)的轉(zhuǎn)移記錄。每個交易都包含以下關(guān)鍵信息:

  • 輸入(Inputs):指明要使用的先前交易的輸出,以及用于證明擁有這些輸出的數(shù)字簽名。
  • 輸出(Outputs):指明將資產(chǎn)發(fā)送給的目標(biāo)地址及其相應(yīng)金額。
  • 鎖定腳本(Locking Script):用于驗(yàn)證發(fā)送者擁有先前交易輸出的數(shù)字簽名。
  • 解鎖腳本(Unlocking Script):包含發(fā)送者提供的數(shù)字簽名和其他必要信息,以驗(yàn)證交易的有效性。

full node(全節(jié)點(diǎn))->fully validating node保存Block Header和Block Body

light node(手機(jī)或者邊緣節(jié)點(diǎn)只保存block header)

在這里插入圖片描述

系統(tǒng)的賬本要取得分布式的共識

分布式的哈希表

distributed hash table

分布式系統(tǒng)的不可能結(jié)論

FLP impossiblity result

FLP(Fischer-Lynch-Paterson)不可能性結(jié)果是分布式計(jì)算中的一個基本結(jié)果,它表明在在asynchronous(異步)網(wǎng)絡(luò)中,即使只有一個進(jìn)程崩潰,也不存在能夠容忍的確定性共識算法。

在異步網(wǎng)絡(luò)中,無法區(qū)分一個已崩潰的進(jìn)程和一個需要任意長時(shí)間才能響應(yīng)的進(jìn)程。這種不確定性導(dǎo)致了在這種系統(tǒng)中實(shí)現(xiàn)一致性的不可能性。

CAP theorem

Consistency(一致性) ->Paxos

Availability

Partition torlerance

分布式數(shù)據(jù)系統(tǒng)無法同時(shí)提供三個保證:一致性(Consistency)、可用性(Availability)和分區(qū)容錯性(Partition Tolerance)。

比特幣中的共識協(xié)議

工作量證明(Proof of Work,PoW):PoW是比特幣最早采用的共識機(jī)制。它要求節(jié)點(diǎn)通過解決一道復(fù)雜的數(shù)學(xué)難題(稱為挖礦)來證明自己的工作量,并獲得記賬權(quán)。具有最大計(jì)算能力的節(jié)點(diǎn)有更高的概率獲得記賬權(quán),但需要大量的計(jì)算能力和能源消耗。

在這里插入圖片描述

分叉攻擊(forking attack)

最長合法鏈

攻擊方法

長度分叉攻擊:攻擊者試圖創(chuàng)建一個比網(wǎng)絡(luò)上其他節(jié)點(diǎn)更長的區(qū)塊鏈分支,以取代原始的區(qū)塊鏈。攻擊者可能通過控制網(wǎng)絡(luò)節(jié)點(diǎn)、延遲區(qū)塊傳播或者通過其他手段來構(gòu)造一個具有更長鏈的分支,從而使其他節(jié)點(diǎn)接受這個分支并放棄原有的區(qū)塊鏈。
在這里插入圖片描述

比特幣系統(tǒng)的實(shí)現(xiàn)

比特幣是基于交易的賬本模式(transaction-based ledger)

UTXO

UTXO全名是Unspent Transaction Outputs,未花費(fèi)交易輸出,它的總體的設(shè)計(jì)是基于這樣一種思路,如果A要花費(fèi)一筆錢比如100元,這筆錢不會憑空產(chǎn)生,那么必然由B先花費(fèi)了100元,被A賺到這100元,然后A才能繼續(xù)花費(fèi)這一筆錢。這個鏈條的源頭就是先產(chǎn)生這筆錢,在比特幣中這被稱為鑄幣(coinbase)。然后會產(chǎn)生這樣一個鏈條,鑄幣->B->A->? 整個過程從鑄幣開始,一直可以追溯到當(dāng)前的狀態(tài),當(dāng)接收到一個UTXO輸入的時(shí)候,可以基于這個模型判斷這筆錢有沒有被在別的地方花費(fèi)過。

在這里插入圖片描述

手續(xù)費(fèi)和初塊獎勵(每隔21萬個區(qū)塊獎勵減半)

account based ledger->以太坊

挖礦過程的解釋

每次挖礦過程就是一次Bernoulli trail

a random experiment with binary outcome

每次試nouce求解,構(gòu)成了Bernoulli process(無記憶性)

a sequence of independent Bernoulli trait

實(shí)驗(yàn)次數(shù)很多,每次實(shí)驗(yàn)成功率很低->Poisson process

progress free->挖礦公平性保證

在這里插入圖片描述

比特幣總量

在這里插入圖片描述

Bitcoin is secured by mining

問題:假設(shè)大部分算力掌握在誠實(shí)的節(jié)點(diǎn)手里,可否保證所有寫入?yún)^(qū)塊的交易都是合法的?

(記賬權(quán))

攻擊成功的標(biāo)志是誠實(shí)的節(jié)點(diǎn)接受惡意節(jié)點(diǎn)的需求

在這里插入圖片描述

雙花攻擊的防范,6 confirmation

在這里插入圖片描述

區(qū)塊鏈?zhǔn)莍rrevocable ledger,但這種不可篡改性只是概率上的保證,剛寫入Block的交易是容易篡改的

在這里插入圖片描述

selfish Mining 分叉攻擊(減少競爭)

比特幣網(wǎng)絡(luò)工作原理

The BitCoin Network

Application layer(應(yīng)用層):運(yùn)行Bitcoin block chain

network layer(底層):運(yùn)行p2p overlay network(節(jié)點(diǎn)通信)

比特幣的網(wǎng)絡(luò)設(shè)計(jì)原則:simple robust but not efficient

每個節(jié)點(diǎn)都要維護(hù)一個等待上鏈放入交易的集合

轉(zhuǎn)發(fā)交易->flooding(洪泛)

如果同時(shí)接受到兩個交易

在這里插入圖片描述

商家如何防范先后不成功(無法及時(shí)支付)

區(qū)塊鏈的挖礦難度的調(diào)整

SHA256

H(block header)<=target
在這里插入圖片描述

挖礦難度太小的問題?

分叉會容易出現(xiàn),而且不止二分叉,分叉過多對達(dá)成共識沒有好處,回危害系統(tǒng)的安全性(分散算力)

ETH——>出塊速度15秒

分支協(xié)議Ghost協(xié)議中orphan block不能簡單丟棄而是由uncle reward

如何調(diào)整挖礦難度?

每隔2016個區(qū)塊(約兩周)調(diào)整一次目標(biāo)閾值
t a r g e t = t a r g e t ? a c t u a l t i m e ( 系統(tǒng)產(chǎn)生2016實(shí)際花費(fèi)的時(shí)間) e x p e c t e d t i m e ( 產(chǎn)生 2016 區(qū)塊預(yù)估的時(shí)間 ) target=target*\frac{actual\space time(\text{系統(tǒng)產(chǎn)生2016實(shí)際花費(fèi)的時(shí)間)}}{expected\space time(產(chǎn)生2016區(qū)塊預(yù)估的時(shí)間)} target=target?expected?time(產(chǎn)生2016區(qū)塊預(yù)估的時(shí)間)actual?time(系統(tǒng)產(chǎn)生2016實(shí)際花費(fèi)的時(shí)間)?
比特幣算力的變化

在這里插入圖片描述
在這里插入圖片描述

比特幣挖礦

在這里插入圖片描述

在這里插入圖片描述

挖礦設(shè)備

第一代:CPU

第二代:GPU

第三代:ASIC(Application Specific Intergreted circuit)

在這里插入圖片描述

要找到nouce,使得其hash值前多少位為0符合要求,礦主只要規(guī)定找到nouce使得其hash前60位為0即可獲得1個share,最后真挖到BTC后,用share來分享收益

假設(shè)礦池掌握51%的算力,具體可以發(fā)動的攻擊?

1.forking attack

礦池可以在不被檢測到的情況下將一筆交易的貨幣發(fā)送到接收方,并且同時(shí)將相同的貨幣發(fā)送到自己的地址。因?yàn)榈V池?fù)碛薪^大部分的算力,所以它們可以更快地產(chǎn)生一個替代鏈,使得這筆雙重支付的交易在整個網(wǎng)絡(luò)上被確認(rèn)。

礦池可以通過先產(chǎn)生一個較長的替代區(qū)塊鏈,然后將其與當(dāng)前區(qū)塊鏈進(jìn)行替換,從而抹去之前確認(rèn)的交易和塊。這可以用來逆轉(zhuǎn)交易或雙重支付。

在這里插入圖片描述

2.Boycott

在這里插入圖片描述

3.盜幣->不大可能

礦池可以選擇不在新的區(qū)塊中包含特定的交易,從而阻止交易的確認(rèn)。

比特幣腳本語言

基于棧的語言

在這里插入圖片描述

模式一 P2PK(Pay to Public Key)

input script:
PUSHDATA(Sig)
output script:
PUSHDATA(PubKey)
CHECKSIG

簽名腳本(Signature Script): 用于驗(yàn)證你是否擁有私鑰的腳本。在比特幣交易中,你需要提供一個簽名,以證明你有權(quán)使用公鑰對應(yīng)的私鑰進(jìn)行交易。

PUSHDATA(Sig): 將簽名數(shù)據(jù)(Signature)推送到棧頂
# 這個指令用于將簽名數(shù)據(jù)推送到腳本執(zhí)行環(huán)境的棧頂,以便后續(xù)操作使用。
# 簽名數(shù)據(jù)是用發(fā)送方的私鑰對交易數(shù)據(jù)進(jìn)行簽名得到的,用于證明該交易的合法性和真實(shí)性。PUSHDATA(PubKey): 將公鑰(Public Key)推送到棧頂
# 這個指令用于將接收方的公鑰推送到腳本執(zhí)行環(huán)境的棧頂,以便后續(xù)操作使用。
# 公鑰是比特幣地址背后的關(guān)鍵組成部分,用于驗(yàn)證由發(fā)送方的私鑰簽名的交易。CHECKSIG: 驗(yàn)證簽名
# 這個指令用于從棧頂獲取簽名數(shù)據(jù)和公鑰,并驗(yàn)證簽名的有效性。
# 它首先從棧頂彈出公鑰和簽名數(shù)據(jù),然后使用公鑰驗(yàn)證簽名是否與交易數(shù)據(jù)匹配,
# 如果驗(yàn)證成功,則交易被認(rèn)為是有效的,可以被添加到區(qū)塊鏈上;否則,交易會被拒絕。

在這里插入圖片描述

模式二 P2PKH(Pay to Public Key Hash)

input script:
PUSHDATA(Sig)
PUSHDATA(PubKey)output script:
DUP
HASH160
PUSHDATA(PubKeyHASH)
EQUALVERIFY
CHECKSIG

執(zhí)行腳本

PUSHDATA(Sig): 將簽名數(shù)據(jù)(Signature)推送到棧頂
# 這個指令用于將簽名數(shù)據(jù)推送到腳本執(zhí)行環(huán)境的棧頂,以便后續(xù)操作使用。
# 簽名數(shù)據(jù)是用發(fā)送方的私鑰對交易數(shù)據(jù)進(jìn)行簽名得到的,用于證明該交易的合法性和真實(shí)性。PUSHDATA(PubKey): 將公鑰(Public Key)推送到棧頂
# 這個指令用于將接收方的公鑰推送到腳本執(zhí)行環(huán)境的棧頂,以便后續(xù)操作使用。DUP: 復(fù)制棧頂元素
# 這個指令用于復(fù)制棧頂元素,即復(fù)制公鑰。HASH160: 對棧頂元素彈出進(jìn)行哈希
# 這個指令用于對棧頂?shù)墓€執(zhí)行哈希操作,得到哈希160值,壓入棧PUSHDATA(PubKeyHash): 將公鑰哈希(Public Key Hash)值推送到棧頂
# 這個指令用于將接收方的公鑰哈希值推送到腳本執(zhí)行環(huán)境的棧頂,以便后續(xù)操作使用。
# 公鑰哈希是由接收方的公鑰經(jīng)過哈希函數(shù)(如SHA-256和RIPEMD-160)得到的,它是比特幣地址的一部分。# EQUALVERIFY: 比較并驗(yàn)證棧頂?shù)膬蓚€元素是否相等
# 這個指令用于比較棧頂?shù)膬蓚€元素(發(fā)送方提供的公鑰哈希和輸出腳本中推送的公鑰哈希)是否相等。
# 如果不相等,交易將被認(rèn)為無效,腳本的執(zhí)行將終止。# CHECKSIG: 驗(yàn)證簽名
# 這個指令用于從棧頂獲取簽名數(shù)據(jù)和公鑰,并驗(yàn)證簽名是否與交易數(shù)據(jù)匹配,
# 如果驗(yàn)證成功,則交易被認(rèn)為是有效的,可以被添加到區(qū)塊鏈上;否則,交易會被拒絕。

在這里插入圖片描述

模式三 P2SH(Pay to Script Key Hash)

采用BIP16的方案

輸入腳本 (Input Script):

# PUSHDATA(Signature1)
# PUSHDATA(Signature2)
# ... (可能有多個簽名數(shù)據(jù),根據(jù)多重簽名的情況)# PUSHDATA(serialized RedeemScript)

輸出腳本 (Output Script):

redeem是贖回

# HASH160: 對棧頂元素(即RedeemScript)進(jìn)行哈希
# 這個指令用于對棧頂?shù)腞edeemScript執(zhí)行哈希操作,得到哈希160值。# PUSHDATA( RedeemScriptHash): 將腳本哈希(Script Hash)推送到棧頂
# 這個指令用于將腳本哈希值推送到腳本執(zhí)行環(huán)境的棧頂。
# 腳本哈希是由RedeemScript經(jīng)過哈希函數(shù)(如SHA-256和RIPEMD-160)得到的。# EQUAL: 比較棧頂?shù)膬蓚€元素是否相等
# 這個指令用于比較棧頂?shù)膬蓚€元素(發(fā)送方提供的腳本哈希和輸出腳本中推送的腳本哈希)是否相等。
# 如果不相等,交易將被認(rèn)為無效,腳本的執(zhí)行將終止。

在這里插入圖片描述

redeemScript的形式

  • P2PK形式
  • P2PKH形式
  • 多重簽名形式

用P2SH實(shí)現(xiàn)P2PK

在這里插入圖片描述

執(zhí)行腳本

第一階段

FALSE(應(yīng)對bitcoin已有的Bug)

在這里插入圖片描述

第二階段

反序列化并展開執(zhí)行贖回腳本

PUSHDATA(PubKey)
CHECKSIG

Proof of Burn

AltCoin(Alterbative Coin)需要銷毀bitcoin

在這里插入圖片描述

區(qū)塊鏈永久保存

digital commitment

(coinbase只能由有記賬權(quán)的節(jié)點(diǎn))

在這里插入圖片描述

比特幣分叉

fork

  • state fork(對比特幣狀態(tài)產(chǎn)生分歧)

    • forking attack(deliberate fork)
  • protocol fork(因?yàn)锽TC協(xié)議產(chǎn)生分歧而造成的分叉)

    • hard fork

    硬分叉是一種比較徹底的協(xié)議更新方式。當(dāng)區(qū)塊鏈的規(guī)則發(fā)生重大改變時(shí),以至于舊版本的節(jié)點(diǎn)無法與新版本節(jié)點(diǎn)共享交易和區(qū)塊數(shù)據(jù)時(shí),就會發(fā)生硬分叉。在硬分叉發(fā)生后,區(qū)塊鏈將被分為兩個不兼容的分支,形成兩個獨(dú)立的區(qū)塊鏈網(wǎng)絡(luò)。

在這里插入圖片描述

  • soft fork

軟分叉是一種相對較小的協(xié)議更新方式。當(dāng)區(qū)塊鏈的規(guī)則進(jìn)行較小的更改,以至于新版本節(jié)點(diǎn)產(chǎn)生的區(qū)塊和交易仍然可以被舊版本節(jié)點(diǎn)接受和處理時(shí),就會發(fā)生軟分叉。新版本節(jié)點(diǎn)產(chǎn)生的區(qū)塊在舊版本節(jié)點(diǎn)看來仍然是有效的,因此整個網(wǎng)絡(luò)仍然保持一致。

  • 舊版本節(jié)點(diǎn)可以繼續(xù)與新版本節(jié)點(diǎn)共享交易和區(qū)塊數(shù)據(jù),因?yàn)樾乱?guī)則是對舊規(guī)則的一種擴(kuò)展。
  • 不需要全網(wǎng)節(jié)點(diǎn)的升級支持,因?yàn)榕f版本節(jié)點(diǎn)可以繼續(xù)驗(yàn)證新版本節(jié)點(diǎn)產(chǎn)生的區(qū)塊。
  • 但是,如果大部分網(wǎng)絡(luò)節(jié)點(diǎn)不升級,新規(guī)則將無法得到充分利用,因此為了實(shí)現(xiàn)軟分叉的目的,大多數(shù)礦工和節(jié)點(diǎn)最好還是升級到新版本。

在這里插入圖片描述

修改coinbase中域的內(nèi)容

每個區(qū)塊中都包含一個鑄幣交易,在該交易中包含一個coinbase域。在比特幣交易中,這個域是不做檢測的,這意味著可以在這個域中隨意寫入。在《數(shù)據(jù)結(jié)構(gòu)》章節(jié)中介紹MerkleTree時(shí)講過,MerkleTree任意葉子節(jié)點(diǎn)的修改都會影響到MerkleTree的根Hash值。因此,當(dāng)block header中的4個字節(jié)的nonce不夠用的時(shí)候,可以使用其它字節(jié),比如將coinbase域的前8個字節(jié)當(dāng)做extra-nonce來使用,這樣搜素空間就擴(kuò)展到了 2 96 2^{96} 296

在這里插入圖片描述

軟分叉著名例子:P2SH

redeem Script

小結(jié)

Q1:轉(zhuǎn)賬交易的時(shí)候如果接受者不在線怎么辦

A:只需要接受者的公鑰,不需要接受在線

Q2:私鑰丟失如何處理?

A:丟了就沒了,死錢,有交易所的話,就會由交易所保管,類似

Q3:轉(zhuǎn)賬寫錯地址怎么辦?

A:沒辦法取消交易,轉(zhuǎn)到不存在的地址,也沒有辦法追回

Q4:既然所有寫入?yún)^(qū)塊的交易都需要被驗(yàn)證正確性,那為什么proof of ban中的OP_RETURN(無條件遇到錯誤)會被區(qū)塊接受

A:對于某個交易,我們需要驗(yàn)證當(dāng)前交易的輸入腳本和之前交易的輸出腳本,而OP_RETURN是寫在當(dāng)前交易的輸出腳本的,因此本次驗(yàn)證不會被檢查到(或者執(zhí)行到)

Q5:如何防范別的礦工偷取nouce

A:在coinbase tx中,是有收款人地址,若想偷取nouce,需更改地址,會導(dǎo)致Merkle Tree發(fā)生改變,從而Root hash改變,從而block header 發(fā)生改變,nouce也不一樣了(作廢了)

比特幣的匿名性

Bitcoin and anonymity->privacy

pseudonymity(假名)

可能破壞比特幣匿名性的幾個方法

(一)即便一筆交易生成多個inputs和outputs,這些交易也有可能被人為關(guān)聯(lián)

inputs: addr 1(4 BTC) addr 2(5 BTC) addr1&addr2一般認(rèn)為是一個人

outputs: addr 3(6 BTC) addr 4(3 BTC) 可以分析出addr4是找零錢地址

(二)地址賬戶和現(xiàn)實(shí)世界的真實(shí)身份也可能產(chǎn)生關(guān)聯(lián)

地址關(guān)聯(lián):當(dāng)用戶在不同交易中使用相同的比特幣地址時(shí),可能會暴露其交易行為和資金流動。如果有人能夠識別特定地址的所有者,那么該用戶的交易歷史和資金流動就能被跟蹤。

比特幣的用戶在其他社交媒體或網(wǎng)站上透露了與其比特幣地址相關(guān)的信息,從而將其交易與身份聯(lián)系起來。

防范比特幣洗錢:盯住資金的轉(zhuǎn)入轉(zhuǎn)出鏈

(三)公開交易數(shù)據(jù):比特幣的交易歷史是公開的,所有交易都被記錄在區(qū)塊鏈上,每個人都可以查看。雖然交易中的參與者不一定是公開的身份,但一旦有人能夠?qū)⒌刂放c特定的個人或?qū)嶓w聯(lián)系起來,他們就可以對該用戶的交易進(jìn)行分析和跟蹤。

(四)IP地址泄露:在進(jìn)行比特幣交易時(shí),用戶通常需要通過與比特幣網(wǎng)絡(luò)連接的節(jié)點(diǎn)進(jìn)行通信。如果用戶的IP地址被暴露,他們的交易活動可能會被跟蹤和分析。

如何提高匿名性

在這里插入圖片描述

hide your identity from real world

  1. 每次使用新的地址
  2. 使用比特幣混幣服務(wù)
  3. 使用匿名網(wǎng)絡(luò)連接(虛擬私人網(wǎng)絡(luò)或者洋蔥網(wǎng)絡(luò))
  4. 使用CoinJoin:CoinJoin是一種隱私協(xié)議,多個用戶將交易混合在一起,使得交易更加復(fù)雜,難以追蹤。

零知識證明

零知識證明是指一方(證明者)向另一方(驗(yàn)證者)證明一個稱述的正確性,而無需透露與該事實(shí)相關(guān)的詳細(xì)信息用于驗(yàn)證某種陳述的真實(shí)性,同時(shí)不透露關(guān)于該陳述的任何其他信息。這種證明方法允許一個主體(證明者)向另一個主體(驗(yàn)證者)證明某個事實(shí)的正確性,

同態(tài)隱藏

  • 如果 x , y x, y x,y 不同, 那么它們的加密函數(shù)值 E ( x ) E(x) E(x) E ( y ) E(y) E(y) 也不相同。
  • 給定 E ( x ) E(x) E(x) 的值, 很難反推出 x x x的值。
  • 給定 E ( x ) E(x) E(x) E ( y ) E(y) E(y) 的值, 我們可以很容易地計(jì)算出某些關(guān)于 x , y x, y x,y 的加密函數(shù)值。
    • 同態(tài)加法: 通過 E ( x ) E(x) E(x) E ( y ) E(y) E(y) 計(jì)算出 E ( x + y ) E(x+y) E(x+y) 的值
    • 同態(tài)乘法: 通過 E ( x ) E(x) E(x) E ( y ) E(y) E(y) 計(jì)算出 E ( x y ) E(x y) E(xy) 的值
    • 一擴(kuò)展到多項(xiàng)式

例子:Alice想要向Bob證明她知道一組數(shù)x和y使得x+y=7,同時(shí)不讓Bob知道x和y的具體數(shù)值。

  • Alice把E(x)和E(y)的數(shù)值發(fā)給Bob
  • Bob通過收到的E(x)和E(y)計(jì)算出E(x+y)的值(利用了性質(zhì)3)
  • Bob同時(shí)計(jì)算E(7)的值,如果E(x+y)=E(7),那么驗(yàn)證通過,否則驗(yàn)證失敗。

盲簽方法

  • 用戶A提供SerialNum(暗文),銀行在不知道SerialNum的情況下返回簽名Token,減少A的存款
  • 用戶A把SerialNum(明文)和Token交給B完成交易
  • 用戶B拿SerialNum(明文)和Token給銀行(銀行不知道幣的來源)驗(yàn)證,銀行驗(yàn)證通過,增加B的存款
  • 銀行無法把A和B聯(lián)系起來。
  • 中心化

盲簽名(Blind Signature)是密碼學(xué)中的一種重要概念,是數(shù)字簽名和盲化技術(shù)的結(jié)合。它允許用戶在不暴露明文消息內(nèi)容的情況下,向簽名方請求簽名,從而保護(hù)消息的隱私性。

盲簽名的過程可以簡要概括為以下步驟:

  1. 盲化(Blinding):消息的發(fā)送者(通常被稱為用戶)使用一個隨機(jī)數(shù)(盲化因子)對消息進(jìn)行盲化操作,產(chǎn)生一個盲化消息。盲化是一種對消息進(jìn)行變換的操作,使得簽名方不能直接得知原始消息。
  2. 簽名請求:用戶將盲化后的消息發(fā)送給簽名方(通常被稱為簽名者)請求簽名。由于消息已被盲化,簽名者無法得知實(shí)際消息內(nèi)容。
  3. 盲化解除:簽名者對接收到的盲化消息進(jìn)行簽名,生成簽名值,但簽名者并不知道實(shí)際的消息內(nèi)容。
  4. 盲化因子消除:用戶通過對簽名值進(jìn)行反盲化操作,使用盲化因子取消盲化,得到簽名后的實(shí)際簽名值。

最終,用戶獲得了有效的簽名,而簽名者對消息的內(nèi)容一無所知。這就是盲簽名的核心原理,它確保了消息的隱私性,同時(shí)又提供了簽名的有效性。

零幣和零鈔

  • 零幣和零鈔在協(xié)議層就融合了匿名化處理,其匿名屬性來自密碼學(xué)保證。
  • 零幣(zerocoin)系統(tǒng)中存在基礎(chǔ)幣和零幣,通過基礎(chǔ)幣和零幣的來回轉(zhuǎn)換,消除舊地址和新地址的關(guān)聯(lián)性,其原理類似于混幣服務(wù)。
  • 零鈔(zerocash)系統(tǒng)使用zk-SNARKs協(xié)議,不依賴一種基礎(chǔ)幣,區(qū)塊鏈中只記錄交易的存在性和礦工用來驗(yàn)證系統(tǒng)正常運(yùn)行所需要關(guān)
    鍵屬性的證明。區(qū)塊鏈上既不顯示交易地址也不顯示交易金額,所有交易通過零知識驗(yàn)證的方式進(jìn)行。

比特幣引發(fā)的思考

Hash Pointer 指針只是形象的說法,實(shí)際系統(tǒng)只有hash沒有指針

/** Nodes collect new transactions into a block, hash them into a hash tree,* and scan through nonce values to make the block's hash satisfy proof-of-work* requirements.  When they solve the proof-of-work, they broadcast the block* to everyone and the block is added to the block chain.  The first transaction* in the block is a special one that creates a new coin owned by the creator* of the block.*/
class CBlockHeader
{
public:// headerint32_t nVersion;uint256 hashPrevBlock;uint256 hashMerkleRoot;uint32_t nTime;uint32_t nBits;uint32_t nNonce; 

(key,value)->levelDB

區(qū)塊戀

把私鑰分成兩份,表示感情

注意

截?cái)嗨借€的方法會降低安全性,而要用多重簽名的方法

三、分布式公式

為什么比特幣系統(tǒng)能夠繞過分布式共識中的不可能結(jié)論?

比特幣并沒有取得嚴(yán)格意義的共識:如分叉

四、比特幣稀缺性

五、量子計(jì)算

參考文獻(xiàn)

bitcoin/src at master · bitcoin/bitcoin (github.com)

https://www.bilibili.com/video/BV1Vt411X7JF?p=1

http://www.risenshineclean.com/news/52547.html

相關(guān)文章:

  • 網(wǎng)站備案密碼忘做seo需要哪些知識
  • 貴州網(wǎng)絡(luò)推廣公司百色seo快速排名
  • 阿里巴巴吧做網(wǎng)站關(guān)鍵詞排名優(yōu)化網(wǎng)站
  • wordpress foxpay企業(yè)站seo報(bào)價(jià)
  • 虛擬主機(jī)能干什么優(yōu)化網(wǎng)站打開速度
  • 確保網(wǎng)站地址沒有做301跳轉(zhuǎn)新網(wǎng)站怎么做推廣
  • 喬拓云智能建站官網(wǎng)登錄入口廈門關(guān)鍵詞排名提升
  • 網(wǎng)站ie不兼容如何開發(fā)網(wǎng)站
  • 唐山市住房城鄉(xiāng)建設(shè)部網(wǎng)站主頁營業(yè)推廣策劃
  • 朝陽網(wǎng)站建設(shè)seo是什么技術(shù)
  • 網(wǎng)站建設(shè)好的圖片seo優(yōu)化專員工作內(nèi)容
  • 網(wǎng)站建設(shè)的具體過程網(wǎng)絡(luò)營銷崗位職責(zé)和任職要求
  • wordpress搜索引擎源碼深圳seo招聘
  • 做配音任務(wù)的網(wǎng)站百度搜索推廣費(fèi)用
  • 免費(fèi)雙語網(wǎng)站模板如何把網(wǎng)站推廣
  • jsp網(wǎng)站購物車怎么做seo外鏈工具軟件
  • 濟(jì)南個人網(wǎng)站建設(shè)系統(tǒng)優(yōu)化軟件哪個最好的
  • 資訊網(wǎng)站模板周口seo公司
  • 物流網(wǎng)站建設(shè)與管理長沙網(wǎng)站策劃
  • 網(wǎng)上備案查詢seo自然搜索優(yōu)化排名
  • wordpress怎么新建欄目seo推廣排名公司
  • 在哪個網(wǎng)站做流程圖比較好看軟件開發(fā)網(wǎng)
  • 網(wǎng)站建設(shè)采購公告友情鏈接網(wǎng)
  • 基于web的網(wǎng)站開發(fā)技術(shù)路線seo優(yōu)化的基本流程
  • 做網(wǎng)上推廣網(wǎng)站免費(fèi)制作網(wǎng)站app
  • 分享類網(wǎng)站源碼軟文營銷的步驟
  • 洞口做網(wǎng)站推薦seo優(yōu)化服務(wù)商
  • 在家做兼職的比較靠譜的網(wǎng)站青島網(wǎng)站建設(shè)制作
  • WordPress文章生成海報(bào)代碼seo推廣策略
  • 好的專題網(wǎng)站鏈接生成器