你知道你買的比特幣是什麼嗎?淺解加密貨幣原理

最後更新日期 2023 年 3 月 16 日

         多數人進入幣圈的第一步驟就是註冊交易所、學習出入金後開始買賣幣,等熟悉操作後開始學習一些投資策略工具(如網格、期限套利等等),甚至更進一步踏入DeFi的世界。這是每個人都必經的過程,很少人真的去學習加密貨幣的原理。但仔細思考一件事:今天你在投資股票時會完全不理會公司基本面就直接砸錢進去嗎?

         今天的比特幣與股票的金融股有點類似,剛學加密貨幣不知道要從哪開始,選比特幣就對了。而兩者的差別是,股票市場大部分投資人對金融股背後的公司多少都有點理解,可是多數幣圈投資人可能完全不了解比特幣是什麼東西,只知道它是區塊鏈、是去中心化、能買賣賺錢。因此這篇文章不講投資,只講加密貨幣原理 ,讓大家能夠了解自己投資的是什麼。

加密貨幣的核心:分散式帳本技術

        在傳統金融領域中,當我們進行轉帳時,會向銀行或是相關金融機構提出轉帳申請,銀行在確認申請並核准後會執行轉帳並將該轉帳紀錄存放在資料庫中。這麼做的風險是,你的錢其實都掌握在機構手中。如果機構真的有心(雖然機率很低)竄改交易紀錄、捲款潛逃或是被駭客盜走資產,使用者是無法預防的。因此,就有人提出了分散式帳本的技術,將所有的帳戶以及轉帳資訊同時儲存在世界各地的使用者電腦中(我們稱之為節點),這樣一來能確保沒有任何單一節點能夠竄改這份帳本(不管是擅自改動或是被駭客攻擊),也不會因為單一節點的電腦壞掉導致整個記錄遺失(在傳統金融中,銀行伺服器掛掉資料就掰了,雖然銀行會做多重備份防止這種事情發生就是了)。而分散式帳本技術的實際成果就是區塊鏈,而加密貨幣則是指在區塊鏈上流通的貨幣。

        在區塊鏈中,每個節點都有一份帳本,而所有使用者都可以隨意查閱帳本內容,也可以傳送交易訊息給節點,請節點將交易訊息寫在帳本中。這就衍伸了一些安全問題:使用者要怎麼確認帳本的內容沒有被竄改過,以及節點要怎麼確認收到的交易訊息不是偽造的?這部分就會牽扯到所謂的 共識機制 以及 數位簽章 的部分了。

加密貨幣的共識機制

        剛才提到,在區塊鏈中每個節點都有一份帳本,大家都是平等的。也就是說,一個節點的帳本正確與否是由大家遵循共同規則去決定的,符合規則條件的帳本就是正確的帳本,沒有任何一個人或機構能獨斷決定哪份才是正確的帳本。這就是所謂的共識機制(所有參與的節點都對如何判斷帳本正確性的方法有相同的共識),新的節點必須認同這個共識才能加入,否則將不被群體內的其他人認同。

常見迷思:區塊鏈的共識機制等於投票制、多數決
Ans:不完全正確。共識機制是指”對相同的規則有著共識”,所有決定照著規則去走,而不是由投票決定結果。

       不同的區塊鏈存在不同的共識機制,而其中比特幣所使用的機制是工作量證明(Proof of Work, PoW)。工作量證明簡單來講就是「經過最多驗證的帳本就是正確的帳本」。如果有惡意人士想竄改帳本,他就必須付出比其他人更多的精力與成本去驗證帳本。為什麼這會被認為是安全的呢?以比特幣為例,在撰文當下比特幣的全網算力是每秒20.9億兆,而一張RTX 3090顯示卡算力大約是每秒1.24億。也就是說,你需要拿大約20兆張RTX 3090顯示卡去驗證帳本才有辦法竄改帳本。當然,這份安全只建立在全網算力高(節點數多)的區塊鏈,對於使用者少的鏈來說攻擊的難易度較低,安全性也較低。

        剛剛提到工作量證明的判斷依據是經過最多驗證的帳本,那什麼是驗證呢?驗證是將節點收到的交易請求進行打包,並將紀錄寫在帳本上,並在帳本上附註一些驗證資訊確保帳本內容不會被竄改。在實際講解內容之前,要來跟大家介紹一個概念叫做雜湊(Hash)。雜湊能將一段不固定長度的字串轉換為固定長度的亂碼,並具有以下幾個特性:
      。轉換沒有一定的規律,一個字串進行雜湊轉換後會長怎樣一定要算過才知道
      。對原本字串進行小幅改動(例如將其中一個句號改成逗號)結果會大大不同
      。無法回推,你無法從亂碼得知原本的字串長怎樣
      。相同的字串進行雜湊轉換後出來的結果必定相同

        藉由以上特性,雜湊被實用於區塊鏈帳本的驗證工作。每次驗證時,節點會先從眾多交易請求中挑選優先度較高的數個請求,並將那些交易請求作為字串計算雜湊值。而為了提高計算複雜度(提高安全性),區塊鏈加入了一個限制:在驗證的交易請求前面加入一個數字(這個數字稱為Nonce),使計算出來的雜湊值的前N個值為0。這個限制利用了前述特性的第一與第二點,第一點保證沒有人能夠預測Nonce是多少才會符合限制,必須逐一嘗試;第二點會使驗證完的交易請求不易被竄改,即使只改了其中一個字母,得出的雜湊值便會大幅偏離前N個值為0的限制,攻擊者必須重新猜Nonce直到找到符合限制的數字。

圖:不同Nonce會得到不同的雜湊值,其結果無法預測

        你可能會認為:那攻擊者只要猜到新的Nonce就好了,多少會花點時間但總是會成功的吧?沒錯,因此區塊鏈加入了另一個機制:在每一次的驗證前將上次驗證的雜湊值加入驗證內容(放在Nonce前面),利用雜湊值將每一次的驗證結果串聯起來,如果其中一次驗證被竄改,會連帶後續所有驗證結果都不同。因此即使攻擊者猜到了其中一次驗證的Nonce並產生出一個符合限制的雜湊值,攻擊者還是需要計算後續所有區塊的新雜湊值(而且必須算得比其他所有人快),否則不會被承認。順帶一提,如果將這個串聯的形式進行視覺化後感覺像多個區塊串成一個鏈,這就是區塊鏈名稱的由來。一個區塊中除了前次雜湊值和Nonce以外還包含許多其他資訊,這裡就不細談了。

圖:雜湊值將每一次的驗證結果串聯起來,形成區塊鏈

加密貨幣的數位簽章

        剛剛講完區塊鏈是如何利用共識機制防止帳本被有心人士竄改,但還有另一個問題:節點要如何確認交易請求是合法的?舉一個例子,假設我今天向驗證節點傳送一個”馬斯克轉移50比特幣給小郡”的請求,節點該如何確認該交易請求是由馬斯克本人同意並送出?區塊鏈利用數位簽章的方法解決了這個問題。實際內容則是採用了非對稱式加密技術。非對稱式加密的做法是先產生兩把鑰匙,一把公鑰、一把私鑰。公鑰是公開的,大家都能使用(在區塊鏈中,公鑰就是你的錢包地址);而私鑰則是由使用者自己保管,絕對不能給別人知道。兩把鑰匙有著幾個特性:
        。利用私鑰加密的內容可以用公鑰解密
        。無法透過公鑰推算出私鑰
        。但可以從私鑰推算出公鑰

圖:非對稱式加密

        而數位簽章的概念很簡單,當使用者傳送交易請求時,會同時傳送交易內容和利用私鑰加密過後的交易內容。而節點在收到請求後(例如馬斯克轉移50比特幣給小郡),會利用馬斯克的公鑰(錢包地址)去解密密文,如果解密完後的內容與交易內容不同,就代表密文不是利用馬斯克自己的私鑰進行加密的,節點便會認定這個交易請求是偽造的。目前比特幣是用的非對稱是加密方法是用橢圓曲線密碼學(ECC),這裡不解釋詳細內容,有興趣的可以去查查看。

        另一個問題來了,如果我不偽造交易請求,而是複製以前的交易請求不就沒問題了嗎?如果以前阿瑋有轉移0.1比特幣給小郡,那我只要複製那個交易請求(包含阿瑋的數位簽章),貼上100次不就可以從阿瑋那裡非法取得10比特幣了嗎?為了避免這情況發生,每個錢包在傳送交易請求時必須包含一個Nonce(注意這個Nonce跟先前提到的不同),這個Nonce代表這個交易請求是地址的第幾個交易(從零開始計算)。例如一個新錢包在傳送第一個交易請求時必須將Nonce設為0,如果是進行過30次交易,下次傳送交易時就必須將Nonce=30的資訊包含在交易請求中。因此,即使今天小郡複製阿瑋先前的交易資訊,也會因為Nonce數值不正確被節點駁回,即使改了Nonce值,節點在利用阿瑋的公鑰解密時也會發現Nonce與解密完的Nonce不同而拒絕請求。

圖:區塊鏈交易請求會包含Nonce、交易資訊和數位簽章

加密貨幣的挖礦

        講到這裡,相信大家應該猜到比特幣的挖礦是怎麼一回事了吧。沒錯,所謂的挖礦就是在擔任節點並進行驗證交易的工作。那礦工是怎麼賺錢的呢?挖礦的收入有兩種:挖礦自身的獎勵以及每個交易請求給的手續費。挖礦的礦工可以在驗證的區塊內加入一個”某某礦工獲得多少比特幣”的資訊當作挖礦的獎勵。而獲得的獎勵金額是被事先規範的,如果礦工試圖提高獲得的金額,該驗證結果就會被其他節點否決,變成純做白工。挖礦獎勵是比特幣總量增加的唯一方式,只有透過挖礦才能使比特幣總量增加,其餘都是現存的比特幣在各使用者間流通。挖礦的獎勵會隨著時間逐漸減少(約四年減半一次),最後歸零,到時比特幣的總量約在2100萬左右,不會再增加產出。挖礦是區塊鏈重要的驗證交易方式,如果沒人挖礦會造成整個區塊鏈停擺,為了避免挖礦獎勵歸零時沒人要挖礦,區塊鏈還有另一個手續費(Gas)機制,使用者傳送交易請求時可以設定要給多少手續費給礦工,因此手續費給愈多的交易會愈快被礦工納入驗證。

比特幣被詬病的能源問題

        許多新聞都在抨擊比特幣造成許多無謂的能源浪費,特斯拉也因為這個議題收回開放比特幣購車的政策。這又是怎麼回事呢?我們在共識機制的章節提到,為了提高計算複雜度,區塊鏈設定了雜湊值前幾個位數必須為0的限制,也提到挖礦實際上就是在計算這些雜湊值以驗證交易,第一個先找到符合限制的雜湊值的礦工能獲得挖礦獎勵以及交易手續費。但這也代表所有礦工會同時驗證相同區塊,第一個驗證到的礦工能獲得獎勵,但其他礦工等於浪費了時間與計算能源在這個區塊上。前面提到,目前比特幣的全網算力約等於20兆張RTX 3090顯示卡,也就是說目前有大約20兆張RTX 3090同時在全力運作進行挖礦,這耗電量是非常驚人的!針對這點,有其他區塊鏈提出與工作量證明不同的共識機制,例如以太幣2.0預計使用的權益證明(Proof of Stake, PoS)或是Solana使用的歷史證明(Proof of History, PoH)。有興趣的人可以去查資料學學,這邊就不詳細介紹了。

結語

        我嘗試用較淺顯易懂的方法解釋區塊鏈的原理,目的是向朋友介紹時不用解釋直接丟文章給他們看、讓剛進幣圈的新手們能更了解自己投資的東西到底是什麼東西,而不是跟風一些名人或藝人買就跟著買,這行為跟在股市中隨便買一個名不見經傳公司的股票一樣,風險非常高。這篇沒有教任何與投資相關的知識,想入門的朋友可以參考我的其他文章。期許看完這篇的讀者們下次向朋友介紹什麼是加密貨幣的時候可以說出除了”他是區塊鏈上的東西,去中心化,很棒”以外,有深度的內容XD

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *