📜 [專欄新文章] ELI5! 區塊鏈到底在幹嘛?
✍️ Juin Chiu
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
用生活化的例子輕鬆學會區塊鏈技術的重要概念
前言
我們熟知的世界正在慢慢地被區塊鏈技術瓦解與重建。不論背景,有愈來愈多人想對區塊鏈技術一探究竟,或許更進一步成為從業者、貢獻者或佈道者。
不幸的是,初學者若想學習區塊鏈技術,第一個問題可能會是高學習門檻,這是因為目前在各種主流平台上所流傳的區塊鏈知識或資源,都不免會大量使用艱澀的術語,長久以來便塑造出區塊鏈高大上的距離感,好似區塊鏈是只專屬於一小群駭客或者專業人士才能理解的技術。然而這是不準確的,事實上,區塊鏈技術中許多概念都能用一般常識理解,頂多只需要國小數學。
本文中,筆者將化繁為簡,試著把區塊鏈技術中的每個元素都使用生活化的例子比擬,讓區塊鏈愛好者與初學者不需用到密碼學/經濟學/資訊科學,也能領會區塊鏈技術的精髓之處。
本文將提及的概念如下:
什麼是帳本?
什麼是交易?
為什麼需要區塊?
有哪些共識機制?
區塊鏈安全嗎?
智能合約如何運作?
以下正文開始:
區塊鏈:一個公平的記錄系統
簡單來說,區塊鏈技術旨在打造一個去中心化的(Decentralized)狀態紀錄系統,更準確一點:區塊鏈技術旨在打造是一個追求真正「公平」的系統。
區塊鏈實現公平的關鍵在於:它完全仰賴自然法則運作,只透過一系列精細的規則就能保證系統的正確,這打破了人類社會一直以來的仰賴的中心化系統,使促成不平等的最大因素不復存在。
區塊鏈技術可以打造出具世界規模的去中心化運算平台,由數千甚至數萬個參與者共同維護狀態並提供計算資源。如果這個運算平台是應用在貨幣與資產的場景中,那麼這個平台可被稱為分散式帳本。
在接下來的段落,筆者將用一個例子展示一個極度精簡、只用紙跟筆的就可以運作的分散式帳本。在這個例子中,一群學生可以使用區塊鏈技術發行屬於他們自己的虛擬幣:「考卷幣」(Exam Paper Coin, EPC)。
考卷幣:使用區塊鏈技術發行的虛擬幣
考卷幣(EPC)是一種使用區塊鏈技術發行的虛擬幣,並存在於分散式帳本中。它的用途是為考卷加分,這將會吸引想考高分或者擔心被當的人學生持有。為什麼 EPC 只能被稱作虛擬幣,而不被稱作密碼貨幣?這是因為 EPC 的發行不會使用任何有關密碼學的技術,因此 EPC 嚴格來說不是密碼貨幣。
在分散式帳本被創建之初,沒有任何人擁有 EPC ,那麼 EPC 是怎麼「鑄造」與分配的?至少可以肯定的是,EPC 不能憑空產生,否則所有參與者就能不斷製造 EPC,使分散式帳本崩潰。事實上,EPC 的價值奠基於參與者的「付出」。
分散式帳本中最重要的角色非記帳者莫屬。每當記帳者成功完成工作,它便可以獲得固定數量的 EPC 作為報酬。於是,分散式帳本中的 EPC 便如此逐步地被鑄造出來。將 EPC 賦予具有貢獻的記帳者除了能夠公平分配 EPC,同時也是一種激勵機制(Incentivizing Mechanism),提供參與者維護帳本的動機。
那麼每個人所具有的 EPC 是怎麼記錄在帳本中的?
帳本: EPC 都要記錄下來
帳本即為依時間順序與特定格式記錄價值的系統。在分散式帳本中,每一批紀錄都會由某一個特定的「記帳者」維護,而記帳者會以特定的規則從所有的參與者中選出,因此分散式帳本是具有多個「記帳者」的系統。
為了確保能公平選出 EPC 的所有記帳者,分散式帳本不會使用任何記帳者的個人資訊,例如姓名、電話,做為帳本上的識別。記帳者可以自由地使用假名(Pseudonym)作為帳本上唯一的識別(Identifier),或者稱為地址(Address)。所以王小庭同學可以使用 Alice 這個假名,而且如果王小庭同學喜歡的話,他也可以同時使用 Bob 這個假名。
EPC 使用如下的格式記錄每個地址幣的數量:
Alice 100 EPCBob 0 EPCCharlie 0 EPCDavid 0 EPCEva 0 EPC
多數區塊鏈稱其識別為地址(Address),其為非對稱密碼學中公鑰(Public Key)的雜湊值(Hash)。地址具有統一的格式,例如以太坊的地址為長度 160 位元的 16 進位數字。
交易:把我的 EPC 轉移給別人
EPC 是可以轉移的,現在 Alice 可以將它持有的 100 EPC 中的 60 EPC 轉移給 Bob,以幫助 Bob 在下一次考試中免於被當。這樣的轉幣紀錄稱為交易(Transaction, Tx),可以如下表示:
Tx1
60 EPC, from [Alice] to [Bob]
而這筆交易會由 Alice 以上述格式記在紙條上,以 Tx1 表示。
簽章:讓參與者的所有動作都不可抵賴
EPC 的每個參與者的每個行為,例如交易,都必須附帶簽章(Signature),證明「這個動作確實是由我本人發起的」,簽署者不可抵賴,任何沒有附帶簽名的動作都是不被承認的。一個附帶簽名的交易紙條會像這樣:
Tx1
60 EPC, from [Alice] to [Bob], ALICE
簽章分為簽署(Sign)及驗證(Verify)兩個動作。驗證即是確認簽章是否確實是由行為發起者所簽署。在這個例子中,僅用一個簡單的驗證:若簽章與識別相符,則驗證成功。例如 Tx1 中,簽名 ALICE 確實與交易發起者 Alice 相符,因此驗證成功。
簽章就是區塊鏈的數位簽章(Digital Signature),其使用私鑰(Private Key)簽署,公鑰(Public Key)驗證,非常難以偽造。
訊息的散佈:怎麼讓所有參與者都收到訊息?
由於 Tx1 是由 Alice 發起的,因此 Alice 將於它自己的帳本記下這筆交易,接著 Alice 必須把這筆交易的內容也轉達所有的參與者,讓所有參與者皆具有所有的交易內容。
EPC 的參與者們不以口語,而是以傳紙條的方式互相交換訊息。紙條要如何有效率地傳播訊息給所有在教室中的參與者呢?可以使用「一傳十、十傳百」的策略。也就是:一次傳 10 張紙條給自己周圍的參與者,參與者收到後再抄寫 10 次後傳給周圍尚未收到該紀錄的其他參與者,逐步將訊息擴散致所有參與者。
這樣的傳播策略正如同流言被散佈的方式,因此也被稱為流言散佈協定(Gossip Protocol)。紙條傳播的網路就是對等網路(Peer-to-peer Network),紙條就是對等網路的封包(Packet)。關於對等網路的介紹,可以參考筆者日前的撰文:
隱私、區塊鏈與洋蔥路由
區塊:記錄一段時間內的交易順序
經過一段時間之後,每個 EPC 參與者手上都會有許多來自別的參與者的紙條,每張紙條都記載著不同的交易。在理想狀況下,如果所有參與者收到紙條的順序都相同,且每個參與者都收到了所有紙條,則所有參與者的帳本上的狀態,也就是餘額,都會相同。然而,若採用上述的訊息散佈策略,會發生兩種情況:每個參與者收到紙條的順序會不同,或者某些紙條可能會被遺漏。這些情況都會讓每個參與者的帳本產生差異,使帳本不可靠。而一個不可靠的帳本,不能作為貨幣發行的工具。
有沒有辦法能使所有 EPC 參與者用相同的交易順序記帳呢?這便是區塊鏈技術的奧秘之處。
為此,我們需要使用一個精心設計的結構:區塊(Block)。每個參與者皆會將一段時間內收到的交易紙條的編號,依照自己的順序寫在另一張紙條上,這張紙條就是區塊紙條,簡稱區塊,產出區塊的參與者則稱為區塊生產者。收到區塊紙條的其他參與者便會知道區塊生產者在這段時間內的交易順序。
為了要讓所有帳本都具有一致的狀態,EPC 的所有參與者必須要選出其中一個區塊作為所有參與者的共識(Consensus)。所有參與者都必須要遵照共識區塊的交易順序來更新自己的帳本,而這個區塊生產者就是記帳者。由於記帳者可以獲得報酬,因此在利益的驅使下,所有參與者都會努力生產區塊以爭取記帳權。
值得注意的是,每個區塊當中都會記錄前一個已達成共識的區塊的編號。例如接下來的範例,Bk15 的前一個已達成共識的區塊為 Bk3:
Bk15
Last Block: Bk3
Height: 15
Transactions:- Tx1- Tx5- Tx4- Tx10- Tx7- Tx13
Nonce: 1
Signature: CHARLIE
由於每個新的共識區塊都會指向前一個共識區塊,如此便會形成一條長鏈般的結構,已形成共識的區塊接成一條鏈,這就是區塊鏈(Blockchain)名稱的由來。
而當 EPC 參與者在收取共識的區塊後,將按照共識依序為每個交易內容進行帳本餘額的轉換。如此,所有的帳本都將具有一致的狀態。
依據特定輸入及轉換函數(Transition Function)執行狀態更新的系統,稱為狀態機複製(State Machine Replication)
摘要:濃縮紙條上的訊息
在介紹達成共識的方法前,筆者要先來介紹一個樸實無華但重要的概念:摘要(Digest),其顧名思義就是一段內容經過消化的產物。假設有一種摘要產生器,這個機器可以放入一張紙條,然後透過 3 個步驟計算出紙條的摘要。
摘要產生器將記載訊息的紙條切成一條一條固定寬度的細長條狀紙帶,如下圖:
2. 將這些紙帶依照順序接成一個長條紙帶。紙帶上有字跡的黑色部分與沒字跡的白色部分會出現不規則相間,測量每個黑色區塊之間相鄰的距離,如下圖:
3. 每段距離的數字相乘後的數字就是這個紙條的摘要(Digest)。
每個 EPC 參與者都會有一台摘要產生器,而它需要上緊發條才能開始工作,且每計算完一張紙條便須重新上一次發條。
摘要的計算雖然簡單,卻具有一些很有用的特性:
首先,摘要會隨著紙條內容的變動而更動。只要更動了任何一點紙條內容,例如區塊的交易順序,或者流水號(Nonce),都會使摘要改變。因此一個附上摘要的紙條,可以讓收到紙條的人在收到後再自行計算一次摘要並比對兩者,以驗證紙條的內容是否被修改過。因此,摘要是可驗證的(Verifiable)。
若想在不更動摘要的情況下同時變動紙條內容,只能不斷嘗試用不同內容產生摘要,直到發生碰撞(Collision) — 意即兩個不同內容的紙條出現相同摘要。
其次,摘要也是單向的:一個紙條很容易產出摘要,但摘要很難還原出原本的紙條內容。這也代表摘要是隨機且難以預測的,因此摘要可以作為一種亂數(Random Number)來源。
正式的區塊鏈使用更難預測且更不易碰撞的的密碼雜湊函數(Cryptograpgic Hash Function)產生訊息摘要。
理解關於區塊鏈技術的基本要件後,接下來就來看看區塊鏈技術的精妙之處:共識機制。
共識機制:如何達成共識?
在區塊鏈技術中,大致上有兩種方式可以產生共識:抽彩(Lottery)或表決(Vote),它們各自有不同特性,每一種分散式帳本都會使用其中之一作為共識機制。
抽彩
在抽彩機制中,唯有摘要小於門檻值的「合法」區塊才會被所有參與者收受。然而,區塊生產者無法預測摘要,且可驗證的摘要使區塊生產者難以作弊。因此若想生產數字小於門檻值的摘要,區塊生產者必須不斷改動區塊內容,例如流水號或者交易順序,直到找到摘要小於門檻值的區塊,就像抽彩一樣。只有合法的區塊才會被區塊生產者散佈給其他 EPC 參與者。
在這樣的規則下,可能會同時出現多個合法區塊。還記得區塊鏈中「鏈」的部分嗎?當收受多個低於門檻的區塊時,該選哪個區塊作為上一個區塊呢?這裡我們可以用一些簡單的規則來做抉擇:選擇合法區塊中高度(Height)最高的區塊,若高度一樣則選擇摘要數字較低的區塊。
區塊紙條的摘要就是正式區塊鏈中的區塊雜湊值。在正式的區塊鏈中,門檻值愈低,困難度(Difficulty)也愈高。區塊的選擇規則也稱為分岔選擇規則(Fork Choice Rule),使用可驗證的亂數作為共識的做法又稱為中本共識(Nakamoto Consensus)。
表決
有別於複雜的抽彩,表決機制相當直觀:所有參與者針對某個預先選出的領袖(Leader)的提案(Proposal),也就是區塊,進行投票。領袖是怎麼選出的?一個直覺的做法是按照假名的順序,按照 Alice / Bob / Charlie 的順序,所有參與者輪流擔任領袖。
所有參與者在收到提案後,可以選擇同意或反對這個區塊的內容,若同意的話,則將自己對提案的同意票記在紙條上,並將這個投票紙條散佈給所有其他參與者。若多數的參與者同意了提案,則所有參與者皆須認定該提案為共識。
然而,表決機制雖然直觀,卻不如抽彩具有可驗證性,參與者若想作弊則相對容易:例如,參與者可以重複投票,或者串通其他參與者一起不投票,以破壞帳本;另一方面,表決比抽彩來得有效率,因其不需要所有參與者都費功去製造可能將不被收受的區塊。
拜占庭錯誤(Byzantine Fault)特指這些不在預期內的行為,表決機制事實上也就是拜占庭容錯(Byzantine-fault-tolerant, BFT)演算法。PBFT 家族的協定是目前拜占庭容錯演算法的主流,然而其至多只能容忍不超過參與者總數一半的拜占庭錯誤。若想了解更多 PBFT 的細節,可以參考筆者日前的撰文:
若想搞懂區塊鏈就不能忽視的經典:PBFT
女巫:如何避免帳本被單一個體掌控?
上文提到:為了保證公平的記帳權,帳本上的識別都是假名,如上文提及,Alice 跟 Bob 實際上都是由同一個參與者王小庭所控制,其他參與者不僅難以得知,而且王小庭喜歡的話,他愛用幾個假名就用幾個假名 — 掌控多個假名的王小庭就成為了「女巫」(Sybil)。
不論是採取何種共識機制,女巫的存在都會破壞分散式帳本的安全性:
在抽彩機制中,如果多數的參與者皆由女巫控制,則女巫有很大的機會可以無視規則,不需抽彩便竄改帳本。
在表決機制中,如果由女巫控制的參與者可以集體進行不在預期內的行為,例如重複投票或者不投票。
因此,抵抗女巫對於分散式帳本的安全至關重要。對此,一個直覺的思路是:讓每個假名的行為都必須付出有限的資源,例如錢跟力。因此有兩種方式可以抵抗女巫:要嘛出錢,要嘛出力。
出力:在抽彩機制中,每個合法區塊的生產都必須附有低於門檻的摘要,而摘要的計算需要參與者出力不斷地重上發條。
出錢:在表決機制中,抵押一定數量 EPC 的參與者才能獲選為領袖被生產提案,且若違反規則,參與者的押金將會被沒收。
出力即是工作證明(Proof of Work, PoW);出錢即是權益證明(Proof of Stake, PoS),抵抗女巫的機制稱為抗女巫機制(Sybil-control Mechanism)。
合約:進行條件式的交易
回顧一下本文開頭所提:區塊鏈技術可以用來打造去中心化的運算平台,它可以用以記錄任何資訊,不止餘額,例如一段合約(Contract)。合約就是指一段會依據不同條件而達成不同執行結果的語句。例如:
CheckAndPay
給定 A、B 兩個假名,若 A 的餘額大於/等於 30 EPC,則 A 支付 20 EPC 給 B ,否則 A 不支付任何 EPC。
這個合約就可以被記錄在帳本中:
Alice 100 EPCBob 0 EPCCharlie 0 EPCDavid 0 EPCEva 0 EPCCheckAndPay "給定 A、B 兩個假名,若 A 的餘額大於/等於 30 EPC,則 A 支付 20 EPC 給 B ,否則 A 不支付任何 EPC。"
之後 Alice 就可以發起像這樣的交易:
Tx 99
CheckAndPay, {[Alice], [Bob]}, ALICE
如此,若 Alice 的 EPC 餘額不足 30 EPC 則不會支付 Bob。
觸發合約的 Tx 99 ,它的執行過程比較煩瑣:執行 Tx 99 的參與者首先會從帳本中尋找 CheckAndPay 的合約內容,並從 Tx 99 中取出合約需要的輸入:A 與 B,接著參與者再解讀合約的語句,依照條件進行帳本的狀態轉換。其中,為了使參與者能解讀合約,合約需用所有參與者皆能看懂的語言書寫。
合約又稱智能合約(Smart Contract)。正式的區塊鏈使用虛擬機(Virtual Machine)來解讀與執行合約。事實上,智能合約能做的事情非常多,這使具有智能合約功能的分散式帳本得以成為去中心化的運算平台,例如以太坊(Ethereum)。
總結: 分散式帳本究竟是一個怎樣的系統?
如果以上環節皆運作順利,那麼便能成功只用紙筆便發行了專由學生使用的貨幣。最後再次強調一次:這是一個為了便於使初學者掌握核心觀念而極度簡化的例子。正式運行的區塊鏈,例如以太坊,其實際運作遠遠複雜得多。
還有一些比較進階的概念,雖然礙於篇幅未在此文章提及,但部分主題筆者曾撰文介紹:
可擴展性(Scalability):第二層方案(Layer 2)與分片(Sharding)
隱私(Privacy)與匿名(Anonymity)
共識機制的安全性(Safety)與活躍性(Liveness)
最後,如果日後朋友/家人問起「什麼是區塊鏈」時,我想你會知道如何解釋了:)
ELI5! 區塊鏈到底在幹嘛? was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
hash還原 在 Taipei Ethereum Meetup Facebook 的最佳解答
📜 [專欄新文章] Fraud and Data Availability Proofs
✍️ Brian Po-han Chen
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
這篇文章是被Kimi啟發,所以去研讀並且節錄一些重點還有我對這篇paper的理解
輕節點(Light clients, SPV clients)在整個區塊鏈網路中只下載少部分的資料來驗證區塊是否合法,而這個做法相比於全節點驗證全部資料來說,必須假設共識演算法中只有包含有效的區塊資料同時也假設大部分的全節點是誠實的.
如果讓全節點能夠產生 Fraud Proofs 來證明區塊確實違反了共識協定的規則同時搭配概率抽樣的方法來驗證全部的區塊資料可供下載,就可以大大的降低誠實節點的數量假設;藉由能夠保證鏈上資料都是可得並且有效,Fraud and Data Availability Proofs會是擴容技術(e.g., sharding, bigger blocks)的一大重點.
Erasure code and Reed-Solomon Codes
糾刪碼是將原來長度為k的訊息編碼成為長度為k+m的訊息,而原來的訊息可取編碼後的訊息子集來還原,也就是說這個技術可以容忍m個分散式節點故障,這邊就不詳述了,可參考Kimi的文章
Fraud Proofs
Block Structure
一個block header應該要包含以下元素
prevHash: 前一個block header的hash
dataRoot: 資料(e.g., transactions)組成Merkle tree的root hash
dataLength: 資料樹的葉節點數量
stateRoot: 狀態樹的root hash
additionalData: 額外的任意資料,像是nonce或是難度等等
2. State Root and Execution Trace Construction
transition function: 給一個state S並且去執行transaction T,成功則返回新的state S’ , 或者失敗了返回error
state witness: state tree中只有部分被transaction讀取或者改變的merkle proofs
rootTransition: 使用Merkle proofs來有效地表達一個子樹(root hash會跟整棵狀態樹一樣)
interRoot: rootTransition在一個區塊中執行每個transaction時產生暫時的state root,denote成trace
3. Data Root and Periods
shares: 資料樹的葉節點,包含一個完整個transaction, 部分的前一個transaction跟後一個transaction以及完整的transaction,這樣做法的好處是message parser不需要全部的message就可以建立message boundaries
利用parser將transactions取出之後就可以去驗證state transition是否正確
4. Proof of Invalid State Transition
一個不正常或者惡意的礦工可能會給出一個不正確的stateRoot,我們可以利用dataRoot下的資料(包含trace)來驗證部分的執行是有問題的;一個Fraud Proof 包含不正確state transition相關的shares, 這些shares的merkle proofs, 以及shares中的state witnesses
Verify function要檢查1. block hash跟client端存的是一樣的. 2. 每一個shares都在dataRoot底下. 3. parseShare執行完是整個區塊transition的子集. 4. 確認執行transaction後,trace_x會變成 trace_(x+1),執行無誤
Data Availability Proofs
惡意的區塊產生者為了避免全節點產生Fraud Proof,可能會扣留著資料而只送出block header,等到過了很久之後才送出資料,這樣可能會造成未來的transactions rollback,所以對於輕節點來說,高度保證正確的資料可得性是非常必要的
這篇paper提出一個基於Reed-Solomon erasure coding的data availability scheme,這個scheme假設網路上有足夠多的輕節點可以產生足夠數量shares來恢復完整資料
Strawman 1D Reed-Solomon Availability Scheme
首先,block producer將區塊資料編碼成k個shares並且利用RS編碼將資料擴展成2k個new_shares,在前面的RS coding中得知我們只需要隨機取得k個new_shares就可以恢復原來的資料.
如果block producer沒有正確的利用RS coding來擴展資料,則就算new_shares資料都可得,也無法正確的恢復原來的資料,也就是說客戶端必須把所有的資料重新編碼一次來判斷block producer有沒有正確產生dataRoot,也因此需要區塊大小的空間O(n)資料.
PS: 我認為要讓其他的全節點做驗證,因為輕節點沒有全部transaction資料
如果使用多維度的編碼則可以將proof size降到O(n^(1/d)),d為維度大小,簡單用2維空間來做解釋,但是實際的scheme是可以用到更高維
2. 2D Reed-Solomon Encoded Merkle Tree Construction
首先,將raw data 切成 k * k 個 new_shares
利用RS coding 將原來的資料水平以及垂直擴展,再將垂直擴展的shares再做一次RS coding就像fig 4.圖示,最後產生一個Matrix M_i for block i
計算每一個row, column所組成Merkle tree的root hash
最後計算rowRoot跟columnRoot的hash
最後資料樹的資料長度會是 2 * (2k)² 元素(經過編碼的new_shares),前半段的葉子點路徑包含row root,而後面一半則是包含column root;輕節點或是全節點可以透過所有的row root跟column root 去驗證 data root 是否正確,為了獲得資料可得性的保證,所有的輕節點都至少要下載區塊所有的row 及 column root,這樣才有辦法產生Fraud Proof
3. Random Sampling and Network Block Recovery
輕節點跟全節點協定如下
輕節點收到block header 以及 raw roots, column roots,驗證data root 是否正確,否則reject header
輕節點隨機取幾組座標(x, y),並且寄給一個或多個全節點
全節點如果有這組座標的shares以及相關的merkle proof就回傳給輕節點
輕節點檢查這個shares 以及相應的 merkle proof是否屬於相應的row root樹或者是 column樹
輕節點把shares 跟相應的merkle proof gossip給其他與他相連並且沒有這些shares資料的全節點
如果所有的proofs 都通過檢驗,則這個block被認為是可得的
4. Selectively Share Disclosure
如果區塊產生者有選擇性的釋出shares,儘管這些shares是unrecoverable,但是這個區塊還是會被認為是available;所以可以藉由假設網路上有足夠多的誠實節點並且有超過(k+1)²個shares 會被匿名的sample request呼叫來解決這個問題,也可以利用enhanced network model來強制不同sample的request不能給同一個client,請求順序也是隨機分布的.
5. Fraud Proofs of Incorrectly Generated Extended Data
如果一個全節點拿到足夠多的shares去recover特定的row或是column,並且發現recovered data不正確,那他就必須提出一個merkle proof包含足夠的shares可以recover那個data.(包含每個shares的merkle proof)
結論
這篇paper提出了一個data availabilty的方法,在額外的一些假設下(至少有一個誠實的節點會提出Fraud Proof,一定數量的輕節點會共同來恢復區塊),來讓輕節點的安全保證幾乎跟全節點一樣
Fraud and Data Availability Proofs was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
hash還原 在 寫點科普 Facebook 的最讚貼文
【SHA-1首度被Google破解了!】
SHA-1 (Secure Hash Algorithm-1, 安全雜湊演算法),是一種用來加密的演算法,最主要的用途是數位簽章、SSL憑證等。
如果我們下載一份文件,發現「原文件」和「下載文件」的數位簽章不同,就表示這份文件很有可能已遭到竄改或含有病毒!
😨 SHAttered attack 😨
Google在日前釋出了兩個含有不同內容、卻擁有相同數位簽章的PDF檔案,表示:安安我們成功破解SHA-1了!雖然耗費9,223,372,036,854,775,808次的碰撞... (碰撞見下述解釋)
SHA-1在很久以前就已被提出有漏洞,Google早在2015年就宣布逐步停止使用。只是Google費時近兩年、又花了一堆運算資源才在今年初成功破解SHA-1。
即便如此,需要的力氣也已遠低於當初的預期了;所以SHA-2, SHA-3以上的安全性更是遠遠高於SHA-1的,有運算資源大概也破不了。
那一般使用者該怎麼預防呢?Google官方做了個懶人包表示:
1. 使用SHA-3等加密能力更強的雜湊函數
2. 使用 shattered.io 網站上傳測試文件是否安全。
3. 使用Googe的產品 (絕對是安全的拉!)
🙃 雜湊函數 (Hash function) 防止訊息被竄改 🙃
原有的訊息經過雜湊函數,能簡化出一個「雜湊值」,也稱「訊息指紋」(message fingerprint),因此將資料量變得很小且具有固定大小。
SHA-1是基於下述目的,被開發出來的雜湊函數:
1. 「不可逆性 (One-Way Function)」:可以由訊息計算出雜湊值,但無法由雜湊值反向還原成原訊息。
2. 「碰撞抵抗力 (Collision Resistance)」:任兩組不同的訊息,雜湊值是不相同的。
🤡 傳送門 🤡
👉 Google發表破解SHA-1:https://goo.gl/BorJZl
👉 瀏覽器棄用SHA-1:https://goo.gl/cHN63f
👉 官方懶人包:https://goo.gl/sRDw7b
hash還原 在 煎薯餅|神還原美式早午餐.3步驟懶人料理|Hash ... - YouTube 的必吃
... <看更多>