你知道「挖礦賺錢」嗎?和學生聊聊「比特幣」(上)

(圖片來源為Pixabay)

 

前幾天我的學生才在問我:「老師,你知道『挖礦賺錢』嗎?」 顯然在網路遊戲的玩家圈子裡,這個話題正熱門。  那麼,就來聊聊比特幣吧......

 

這麼說吧,如果你存款被銀行記在一本簿子上,那你,或者小偷,只要想辦法找到那本簿子、改一下上面的數字,就可以更動你的存款金額了,對吧

 -- 當然,你要改的不是你手上這本存款簿,而是銀行那邊的紀錄,而這並不容易……但還是有可能的。

 

但如果,銀行根本沒有記下你的存款金額,而是讓每個人留下他這一輩子所有的交易記錄;例如「爸爸給你零用錢」是一筆記錄,你和你爸都要各自記起來、「你拿錢買早餐」是一筆記錄、「早餐店老闆進貨雞蛋」也是一筆、「你到文具店買筆」、「你把錢存進銀行」這些也都記起來。

當你想知道自己有多少錢時,銀行並不是直接查看檔案(簿子)裡的某個數字,而是讓電腦快速查核所有的交易記錄,確認過有多少人給你錢、你又花了多少,加加減減之後,就知道你現在還有多少。

如此一來,你想要宣稱自己的存款不是1000,而是1001,那銀行就要知道「多的那1塊,是誰給你的? 沒有記錄啊……」 電腦查到的、所有的交易記錄後合計,你就是剩1000。

 

又,也許你想說:「假如我是駭客,我就去改掉我的交易記錄,在我拿到老爸給的零用錢時,多拿到1塊」;

不要忘了,電腦會同時去查和你交易的人、確認他是不是有給你。

那你可能會想「既然我是駭客,就連我連我爸那邊的交易記錄一起改就好啦」,嗯…… 很聰明;

但比特幣所使用的「區塊鏈」技術比你更聰明;它事實上不是像上面講的那樣,把交易記在單一的檔案裡 (本子上)。

 

想像一下,如果規定你爸給你零用錢的時候,他必須在FB上說「我給我兒子1000塊零用錢」,看到這則訊息的人,電腦裡都會留下記錄;

 

然後你花錢買早餐時,老闆也必須大喊「火腿蛋土司,小明給我30塊!」所有聽到的人也都留下記錄……

諸如此類的,只要拿錢作交易,就要在網路上對所有人宣佈;而且大家也不是聽聽就算了,所有人的電腦都會幫忙記下他們聽到的訊息

 -- 而事後,銀行就會去查他們的記錄,來確認當時你爸究竟給你多少。

 

那麼,當你想要竄改、讓自己多1塊錢時,你要怎麼改?駭進所有人的電腦嗎?

 

所謂「分散式網絡」,就是指你的存款不是記在一本簿子上、或一筆電腦檔案裡,而是網絡中每一個會記載事件的「節點 (伺服器)」都會可能會記下你的交易記錄; 因此而擁有「去中心化」的優點,就是你無法找到單一的簿子去竄改。

 

上面提到的每一筆交易事件,被記錄下來後就稱為一個「區塊」;節點記住的交易記錄,就是這些交易一個接著一個串起來的,所以被稱為「區塊鏈」。

 

那我如果直接發送「不存在的交易」呢?  

 

也就是偽造一段「我爸給我2000塊零用錢」的事件、也把它在FB上講出來、讓大家記住呢?

 

當節點「聽到」你發送的這則交易訊息後,他會向你爸的「電子錢包」要求確認,也就是所謂的「數位簽章」;

那如果你打算直接竄改「已經通過認證」的交易,那就要挑戰區塊練的技術核心,一個名叫「雜湊函數」的數學式。

 

「雜湊函數」是一種「把原始文件經過函數轉換成亂碼」的方法,「所有人都知道它是怎麼算的」,但它的轉換,在缺少密碼時不是一對一的。

 

比如說 102÷31 = 3餘9,319÷31 = 10也餘9 ,

當你攔截到、知道我的資料在轉換後是變成「9」時,你明明知道我是「除以31,取餘數」;

但你沒有我手上的密碼「3」你怎麼知道我是102,還是40,還是319,還是908呢?

-- 你如果有我的密碼「3」,那一下子就可以算出來。

 

當然,雜湊函數比這個複雜許多,以至於「換成亂碼之後,缺少密碼 (私鑰) 的話,沒有人能直接轉回去 」;以目前的電腦科技來說,暴力破解 (快速地一直猜)也需要幾百年;這就確保了資料的安全性。

 

**延伸一個問題:

 

當你拿到一個加密檔案時,「正確密碼是什麼」這個檔案本身不是應該要記住嗎?  要不然我輸入後,他怎麼知道我輸的對不對?

 

那既然如此,我能不能從未解密的檔案本身,那些亂碼裡,找到線索、發現 密碼被它記在何處呢?

 

嘿嘿,這個問題當然已經被解決了,如果想知道「公鑰加密」、RSA加密 的計算技巧,可以去找「密碼學」、「資訊安全」的相關教科書、網路文章來看,在這裡就先不介紹啦。

 

那挖礦又是什麼?

 

上面提到,你的錢無法竄改,但每一塊錢總有一開始吧,現實中,台灣的每一塊錢都是「台灣銀行發行」的; 之所以要「印鈔」,主要並不是政府想要「平白無故變出好多錢來花」。

 

錢被視為是「交易籌碼」、「流通的貨幣」,如果錢太少,那大家要買東西卻沒有錢可以用來交易,就會乾脆「把商品價格都調低一點」:

 

因為「錢太少,(紙鈔印太少)」,本來國中學費5000、便當一個50塊的,後來都改成「學費500、便當5塊就好」;

那學費還是相當於買100個便當,交易的雙方其實都沒有吃虧,但就是「錢變貴」或者說便當「變得不值錢」了。 

 

這樣一來,會造成民眾「拿到錢的,不想花了,因為錢還會再變更貴; 50塊本來只能買一個便當、後來可以買十個、未來可以買更多便當」 -- 這就叫作「通貨緊縮」。而「挖礦」就是比特幣為了避免通貨緊縮而設想出來的一個「遊戲」;至於怎麼挖,我們下一篇再來介紹。

 

(本文授權自有熊老師 陪你教數學臉書)/閱讀後篇:你知道「挖礦賺錢」嗎?和學生聊聊「比特幣」(下)