【區塊鏈】btc

學習視頻源鏈接:
https://www.bilibili.com/video/BV1Vt411X7JF/
本文是根據肖老師的視頻進行的筆記記錄

一、 cryptographic hash function

1.1. collision resistance抗碰撞性 :

collision 指的是hash碰撞

抗碰撞性 (Collision Resistance) 是密碼學哈希函數的一個重要安全屬性,指的是:很難找到兩個不同的輸入 x 和 y,使得它們的哈希值相同,即 hash(x) = hash(y)。

作用:

  • 數字簽名安全性:防止攻擊者找到與已簽名文檔具有相同哈希值的偽造文檔
  • 區塊鏈技術:確保交易和區塊的唯一性,防止偽造
  • 數據完整性:保證數據沒有被篡改
  • 在以太坊的上下文中,抗碰撞性在多個地方都很重要,比如:
  • 區塊頭的哈希計算
  • 交易哈希的生成
  • Merkle樹的構建
  • 賬戶地址的生成

后果: 如果一個哈希函數失去了抗碰撞性,攻擊者可能能夠構造碰撞來進行雙花攻擊或其他欺詐行為。(bitcoin這種pow就容易有double spending,以太坊po

以太坊主要使用Keccak-256(一種SHA-3變種)作為哈希算法,它被設計為具有強抗碰撞性。

(從數學上證明不出來抗碰撞行,就是實踐中驗證的。。。
md5 之前以為做不出來hash碰撞,但是后來證明可以做出了。。。)

1.1.2 hiding 單項One-way Function / Preimage Resistance

給定哈希值 h,計算上不可行找到任何輸入 x 使得 hash(x) = h
即從哈希值反推原始輸入在計算上是不可行的

成立前提:輸入的分布均勻,數量足夠大
單向函數 (One-way Function)

1.1.1、1.1.2 兩個性質和起來的作用: 可以形成digital commitment /digital equivalent of a sealed envelope 。

數字承諾(Digital Commitment)

1.1.3 puzzle friendly

挖礦就是 一直尋找隨機數(none) 讓 block header+ none 進行運算后的hash 函數值,在target 目標內
所以這個才能 proof of work 。

difficult to solve ,but easy to verify
一到有人找到這個none ,發布出去之后,驗證算一下就行。
挖礦很難,驗證很容易

2. 簽名

公私鑰來自非對象加密的概念
一個公私鑰就是一個賬戶

加密和解密用的是同一個人的公鑰和私鑰

公鑰相當于你的銀行賬戶。
公私鑰用來簽名。
如果我想轉給你的錢,我要用自己的私鑰進行簽名,然后其他人用我自己的公鑰 驗證 ,我是不是真的想轉給你這筆錢。
如果兩個人生成的公私鑰恰好相同,可以嗎? 256位hash,出現兩個人相同的公私鑰,概率微乎其微。 (假設產生公私鑰的時候有一個好的隨機源

先對一個message 取hash 然后再對這個hash值簽名

二、 數據結構

2.1 hash pointers

區塊鏈: 一個一個區塊 組成的鏈表
block chain is a linked list using hash pointers。
哈希指針(Hash Pointer) : 有環鏈表不能使用hash pointer

第一個區塊: Genesis block
最后一個: most recent block

每一個區塊都有指向前一個區塊的指針。
每一個區塊的hash值時前面+自己的hashpointer 一起取的hash 值算出來的

我們通過這種數據結構可以實現 tamper- evident log

所以保證了區塊鏈中間東西不能變,如果改變前面任何一個區塊,都會引發多米諾骨牌效應

防篡改日志(Tamper-Evident Log)

2.2 merkle tree

相對于
binray tree
用hash 指針代替普通指針
Merkle樹(Merkle Tree)
好處: 只要記住根hash值,就能記住樹中 對任何的修改。 這叫 maerkle proof

Merkle證明(Merkle Proof)

proof of membership / proof of inclusion

Merkle非成員證明 (Proof of Non-membership)

Btc 只用了 membership的證明
proof of membership

三、 btc 協議

如何防范 double spending attack
比特幣與以太坊防范雙重支付(Double Spending)的機制
鑄幣交易:

btc每個區塊鏈的組成:
輸入部分: 幣的來源,指向前面某個交易
輸出部分: 收款人公鑰的hash (相當于收款人地址)

為什么要說明幣的來源? 證明這個錢不是憑空捏造的,也防范double spending
付款方需要知道 收款方的地址(公鑰的hash值)
收款方需要知道 付款方的公鑰 ,a的公鑰代表a的身份,代表知道從哪來的
所有節點也要知道付款方的公鑰,為了認證這筆交易是不是合法的。
認證原則:因為有的節點是惡意的,所有的節點驗證時,都要獨立驗證。

怎么才能知道付款方的公鑰?

我給你發送信息,我是用你的公鑰加密,然后你收到后用你的私鑰解密。

比特幣區塊的組成結構

全節點(Full Node)與輕節點(Light Node)的區別

哪些交易應該放到下一個區塊中? 哪一個時合法的?
區塊鏈: 賬本的內容鑰取得分布式共識—— 又繞到了分布式共識算法中。

3.2 分布式共識 :

eg: distributed hash table
需要取得共識的是 hash表中的kv
有很多impossibility result
eg. FLP
在一個異步的系統里(asynchronous ,如果有一個成員時faulty 的,那么也無法達成共識

eg. CAP theorem

雖然這些和btc 應用

假定系統中小部分為惡意節點,大部分是好的,所以如何處理consensus in bitcoin

比如 hyperledger(如fabric) ,當membership 是有門檻的,所以可以使用投票協議。
如果沒有門檻,還采用投票協議,會出現sybil attack
Sybil攻擊(Sybil Attack)

3.2.1 bitcoin 如何解決?

只有找到nonce ,才會有記賬權,

記賬權(Bookkeeping Rights)
分叉攻擊? forking attack 。bitcoin 的規則是: 連接到最長合法鏈 。

longgest valid chain 。
比特幣中被廢棄的分叉:孤塊(Orphan Block)與陳舊塊(Stale Block)
求解 puzzle friendly 就是靠算力來投票。看每秒鐘能試出多少個nasco數 ,hash rate 決定投票權重

四、 btc 實現

UTXO(Unspent Transaction Output)未花費交易輸出
utxo 檢測是不是double spending

交易型賬本 vs 賬戶型賬本

挖礦的時候用 block header就能保證這個鏈沒有篡改。
區塊頭(Block Header)與區塊體(Block Body)比較

比特幣的Extra Nonce與挖礦雙層循環

挖礦公平性保證: progress free
Progress-Free(無進展性)
比特幣的挖礦 除了比拼算力外,沒有任何意義,稀缺性是人為造成的,他越來越少是因為初塊獎勵人為減少。
但是!bitcoin is secured by mining
只要大部分算力掌握在誠實節點手里,那么系統安全就能得到保證。
是不是說挖礦動力越來越小呢? 恰恰相反,競爭越來越激烈,bitcoin的價格飆升

挖礦是比較大的概率落到誠實的節點上。
就算落到不誠實節點,由于不誠實節點雖然獲得記賬權,但是他不知道別人的私鑰,那么這個錢就轉不走。
如果不誠實的節點獲得記賬權,亂記,誠實的節點不會接受這個交易,誠實節點會向上追溯,鏈接到上面去。

拋棄不誠實的節點。

  • 那么問題來了,不誠實的節點能做到double spending嗎?
    不行,如果不合法,誠實節點不會接受。

  • 那能不能分叉攻擊呢?
    也不行,因為挖礦的時候,設置的block header里要填上前一個區塊的hash,所以要差到前面的區塊的話,一開始就要差到前面。

分叉攻擊的目的是什么? 干掉其他鏈。開始m->a 成功后,非要再來個下面的m->m, 干掉下面的m->a
如何防范? 后面跟一個區塊后,后面再跟6個區塊,然后才認為前面的是不可篡改的。
一個區塊是10分鐘。
mining 機制的設立為了維護系統安全性

假設大部分的算力掌握在誠實的礦工手里,也不能保證所有寫入區塊鏈的交易是合法的。挖礦給出的是概率上的保證。

  1. btc 網絡 : the bitcoin network
    用戶把 交易發送的btc網絡上,節點收到交易,把這些交易打包到區塊里,然后把區塊發布到比特幣網絡上。
    那么btc網絡怎么傳播呢?

application layer: bitcoin block chain
network layer: p2p overlay network

這個p2p節點很簡單,每個節點都是對等的
simple ,robust,but not efficient
消息節點采用flooding
鄰居節點是隨機的,不考慮網絡拓撲,這樣增強了魯棒性(robust),但是降低了效率 。
轉發的前提是這個交易是合法的,
每個節點要維護一個等待上鏈的交易集合:
傳播屬于best effort
越是大的區塊,在網絡上傳播越慢
帶寬是瓶頸。限制是1m

挖礦難度

H(block header) <= target
采用的是SHA-256
通俗來說要是合法的區塊,要求hash 前面有多少個0

51% attack
出塊 時間是10min
以太坊 出塊速度變快為 15s ,就需要設置新的共識協議 ghost ,會產生了很多orphan block ,但是對orphan block 也會有獎勵

如何調整挖礦難度?
2016個區塊調整一下難度 ,每個區塊十分鐘,大概是14天調整一下區塊。
調整公式: target= target x (actual time / expected time)

expected time = 2016 x10 min
actual time 最近的2016 個區塊實際花費的時間

5 btc 腳本

6 分叉

比特幣中的分叉類型全解析:Forking Attack、Deliberate Fork 與 Protocol Fork

P2SH (Pay-to-Script-Hash) 詳解

  1. 匿名性

bitcoin and anonymity

bitcoin 匿名性<銀行存款< 現金

bitcoin 完全公開

如何保證匿名性: 建議出入使用不同賬戶但是找零

7.1 找零
把不同的地址關聯在一起: 找零
輸出地址之間有可能是一部分是同一個的。
但是找零的地址雖然不是固定位置,但是可以分析出來 。
7.2 資金轉入轉出
bitcoin 和實體賬戶換錢
怎么辦? 去交易所、場外交易
7.3 用btc 支付
在實體世界用btc 支付
交易費貴
等待確認時間長
引起隱私泄露,你的虛擬賬戶和真實世界產生聯系了

hide your identity from whom?
在application layer 層
但是可以在network layer

在線錢包、交易所 天然的 coin mixing

不可篡改實際上對隱私保護并不合適,是摘難性的,賬戶之間的關聯性是要小心的
可摘難性(NP-hardness)解釋

7.5 零知識證明 (zero-knowledge proof)
零知識證明是指一方(證明者)向另一方(驗證者)證明一個陳述是正確的,而無序透露除該成熟時正確的歪的忍者信息

eg: 數字簽名 不一定是零知識證明,因為透露了公鑰

7.6 同態隱藏
如果x,y 不同,那么他們的加密函數值 e(x),e(y) 也不相同
給定e(x)的 值,很難翻推出x的值
給定e(x) 和 e(y)的值,我們可以很容易地計算出某些關于x,y 的加密函數值。
同態加法: 通過ex和 ey 計算出e(x+y)的 值
同態乘法: 通·過ex 和 ey 計算出e(xy)的值
擴展到多項式

同態隱藏(Homomorphic Hiding)

虛擬貨幣編號不能是央行產生的,這樣信息泄漏了。

和 bitcoin 不一樣。 零幣就是破壞了關聯性。
為什么這些匿名性 不是主流貨幣: 1. 性能不行, 2. 對初始化要求比較高。3. 需要強匿名性的用戶不是很多。4. 和實體發生交互的時候還是要暴露身份。

零鈔(Zerocash)和零幣(Zerocoin)

Bitcoin區塊鏈的創世區塊溯源

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/897869.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/897869.shtml
英文地址,請注明出處:http://en.pswp.cn/news/897869.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言【數據結構】:時間復雜度和空間復雜度.詳解

引言 詳細介紹什么是時間復雜度和空間復雜度。 前言&#xff1a;為什么要學習時間復雜度和空間復雜度 算法在編寫成可執行程序后&#xff0c;運行時需要耗費時間資源和空間(內存)資源。因此衡量一個算法的好壞&#xff0c;一般是從時間和空間兩個維度來衡量的&#xff0c;即時…

QT:文件讀取

問題&#xff1a; 在文件讀取&#xff0c;判斷md5值時&#xff0c;遇到py文件讀取轉String后&#xff0c;再轉byte&#xff0c;md5前后不一致問題。 解決方法&#xff1a; python文件讀取要使用QTextStream&#xff0c;避免\t 、\r、\n的換行符跨平臺問題&#xff08;window…

32單片機——LED

LED原理圖如圖所示&#xff1a; 代碼 DS0和DS1每過500ms一次交替閃爍&#xff0c;實現類似跑馬燈的效果 GPIO輸出配置步驟 &#xff08;1&#xff09;使能對應GPIO時鐘 STM32在使用任何外設之前&#xff0c;我們都要先使能其時鐘&#xff08;下同&#xff09;。本實驗用到…

貪心算法和遺傳算法優劣對比——c#

項目背景&#xff1a;某鋼管廠的鋼筋原材料為 55米&#xff0c;工作需要需切割 40 米&#xff08;1段&#xff09;、11 米&#xff08;15 段&#xff09;等 4 種規格 &#xff0c;現用貪心算法和遺傳算法兩種算法進行計算&#xff1a; 第一局&#xff1a;{ 40, 1 }, { 11, 15…

【Java篇】一法不變,萬象歸一:方法封裝與遞歸的思想之道

文章目錄 Java 方法的使用&#xff1a;從基礎到遞歸的全面解析一、方法的概念及使用1.1 什么是方法 (method)?1.2 方法定義1.3 方法調用的執行過程1.4 實參和形參的關系1.5 沒有返回值的方法 二、方法重載2.1 為什么需要方法重載2.2 方法重載的概念2.2.4 C 和 Java 的比較&…

深入理解 HTML 中的<div>和元素:構建網頁結構與樣式的基石

一、引言 在 HTML 的世界里&#xff0c;<div>和元素雖看似普通&#xff0c;卻扮演著極為關鍵的角色。它們就像網頁搭建過程中的萬能積木&#xff0c;能夠將各種 HTML 元素巧妙地組合起來&#xff0c;無論是構建頁面布局&#xff0c;還是對局部內容進行樣式調整&#xff…

《大語言模型》學習筆記(一)

一、什么是大語言模型 大語言模型是指在海量無標注文本數據上進行預訓練得到的大型預訓練語言模型&#xff0c;例如GPT-3&#xff0c;PaLM和LLaMA。大語言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;是一種基于深度學習的自然語言處理模型&#xff0c;能…

電力行業中分布式能源管理(Distributed Energy Management System, DEMS)的實現

以下是電力行業中分布式能源管理(Distributed Energy Management System, DEMS)的實現方案,涵蓋系統架構、關鍵技術、核心功能及實施路徑,結合典型場景與代碼示例: 一、系統架構設計 采用云-邊-端三層架構,實現分布式能源的高效協同管理: 1. 終端層(感知層) 設備組…

實驗5 邏輯回歸

實驗5 邏輯回歸 【實驗目的】掌握邏輯回歸算法 【實驗內容】處理樣本&#xff0c;使用邏輯回歸算法進行參數估計&#xff0c;并畫出分類邊界 【實驗要求】寫明實驗步驟&#xff0c;必要時補充截圖 1、參照“2.1梯度下降法實現線性邏輯回歸.ipynb”和“2.2 sklearn實現線性邏輯…

思維訓練讓你更高、更強 |【邏輯思維能力】「刷題訓練筆記」假設法模式邏輯訓練題(1-5)

每日一刷 思維訓練讓你更高、更強&#xff01; 題目1 誰在說謊&#xff0c;誰拿走了零錢&#xff1f; 姐姐上街買菜回來后&#xff0c;就隨手把手里的一些零錢放在了抽屜里&#xff0c;可是&#xff0c;等姐姐下午再去拿錢買菜的時候發現抽屜里的零錢沒有了&#xff0c;于是&…

【愚公系列】《高效使用DeepSeek》004-DeepSeek的產品形態和功能詳解

標題詳情作者簡介愚公搬代碼頭銜華為云特約編輯,華為云云享專家,華為開發者專家,華為產品云測專家,CSDN博客專家,CSDN商業化專家,阿里云專家博主,阿里云簽約作者,騰訊云優秀博主,騰訊云內容共創官,掘金優秀博主,亞馬遜技領云博主,51CTO博客專家等。近期榮譽2022年度…

用python代碼將excel中的數據批量寫入Json中的某個字段,生成新的Json文件

需求 需求&#xff1a; 1.將execl文件中的A列賦值給json中的TrackId&#xff0c;B列賦值給json中的OId 要求 execl的每一行&#xff0c;對應json中的每一個OId json 如下&#xff1a; {"List": [{"BatchNumber": "181-{{var}}",// "Bat…

【Python】dash-fastapi前后端搭建

概述 項目中需要快速搭建一個前后端系統&#xff0c;涉及到dash-fastapi架構的時候&#xff0c;對該架構的時候進行總結。本文主要總結的是對該架構的基本使用&#xff0c;后續再對該架構的項目源碼進行總結分析 此處實現一個小的demo&#xff0c;迷你任務管理器&#xff0c;…

IDEA中鏈接使用mysql數據庫

一、連接mysql 1. 打開idea&#xff0c;在右上角側邊欄有數據庫database插件&#xff0c;打開側邊欄點擊加號->數據源&#xff0c;可以看到支持很多數據庫&#xff0c;選擇mysql。 2. 首次使用需要下載驅動程序&#xff0c;不然連接數據庫會報錯。找到mysql&#xff0c;點擊…

程序編譯生成的文件

目錄 .i 文件 .s 文件 .o文件 總結 在 C 編程中&#xff0c;.i、.s和 .o 文件是編譯過程中生成的不同階段的文件&#xff0c;它們代表不同的含義&#xff1a; .i 文件 全稱 &#xff1a;預處理后的文件&#xff08;Intermediate File&#xff09;。 含義&#xff1a;.i文件…

[S32K]SPI

SpiShiftClockidleLevel: CLK空閑時電平(CPOL)&#xff1b; SpiDataShifrEdge:數據移位邊沿(CPHA)&#xff1b; SpiDataWidth: SpiTransferStart: MSB(高位起始)&#xff0c;LSB(低位起始)&#xff1b;&#xff1b; SpiHwUnit: 這是一個具體的硬件&#xff1f; SpiDataShiftE…

系統思考:客戶價值

“真正的市場競爭&#xff0c;不是比誰更能制造產品&#xff0c;而是比誰更能創造價值。” ——杰夫貝索斯 在組織輔導中&#xff0c;我經常問團隊一個問題&#xff1a;“我們的客戶是誰&#xff1f;”大多數人的第一反應是——“支付費用的就是客戶。” 這在過去的市場擴張階…

ArcGIS Pro 車牌分區數據處理與地圖制作全攻略

在大數據時代&#xff0c;地理信息系統&#xff08;GIS&#xff09;技術在各個領域都有著廣泛的應用&#xff0c;而 ArcGIS Pro 作為一款功能強大的 GIS 軟件&#xff0c;為數據處理和地圖制作提供了豐富的工具和便捷的操作流程。 車牌數據作為一種重要的地理空間數據&#xf…

OpenCV圖像加權函數:addWeighted

1 addWeighted函數 在OpenCV 里&#xff0c;addWeighted 函數的作用是對兩個圖像進行加權求和&#xff0c;常用于圖像融合、圖像過渡等場景。函數如下&#xff1a; cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]])2 參數解釋 src1&#xff1a;第一個輸入圖…

Tcp網絡通信的基本流程梳理

先來一張經典的流程圖 接下介紹一下大概流程&#xff0c;各個函數的參數大家自己去了解加深一下印象 服務端流程 1.創建套接字&#xff1a;使用 socket 函數創建一個套接字&#xff0c;這個套接字后續會被用于監聽客戶端的連接請求。 需要注意的是&#xff0c;服務端一般有倆…