,

區塊鏈公鑰私鑰原理與技術,透過區塊鏈私鑰生成範例1次讀懂!

區塊鏈公鑰私鑰原理重點

你可能沒聽過區塊鏈這個名詞,但你一定聽過 比特幣,比特幣可是近年來各個報章雜誌或網路媒體最喜愛的主題之一,不過比特幣其實只是一個建立在區塊鏈概念上的應用,區塊鏈才是比特幣的根本概念,那 區塊鏈是什麼呢?區塊鏈技術又有哪些艱深的名詞呢?我們現在就來了解區塊鏈公鑰私鑰的技術原理吧。

公鑰私鑰原理是什麼?

在比特幣的區塊鏈網路中,使用者將會拿到一組公鑰私鑰對,顧名思義公鑰可以被區塊鏈網路中的所有使用者看到,私鑰則僅由自身保管不能讓對方知道,而所有的交易與簽章都是透過使用者手上的私鑰來加密,這組鑰匙其實就相當於比特幣網路中的身份。

公鑰和私鑰原理
公鑰和私鑰的運作原理和技術

而比特幣中的錢包存放公私鑰,並透過這對鑰匙的數位簽章(digital signature)證明資產中的所有權。在比特幣中,錢包透過數位簽章附加到交易中,使確保交易的來源沒有被冒充,而交易皆以錢包中的私鑰當作擁有裏面虛擬貨幣的證明,換句話說若是弄丟了私鑰或是被別人偷走了私鑰將會永遠失去裡面的錢,因此在私鑰的產生與型式我們會再後面繼續介紹。

公鑰和私鑰的數位簽章作為虛擬貨幣的證明
公鑰和私鑰的數位簽章作為虛擬貨幣的證明
區塊鏈遺失私鑰
遺失私鑰的數位資產將遺失

區塊鏈私鑰如何產生的?

其中私鑰在比特幣中是一個32bytes的數列(1 bytes = 8 bits ,因此32bytes的數列相當於256bits的數列( 0或者1 ) ),隨機數本身事由具加密安全的數字產生器取得的,在bitcoin中錢包通常在創立帳號時都會隨機生成一個私鑰給你,而私鑰應該要滿足一些特性:

  1. 要確保生成的鑰匙只有你自己知道
  2. 鑰匙要在確保安全性的情況下隨機生成

區塊鏈公鑰私鑰的範例及原理

先讓我們看看私鑰長什麼樣子:

Python – 生成用於密碼層級的亂數

我們可以用Python提供的secrets模組非常簡單的生成自己的私鑰

(* secrets只支援python3.6以上的版本)

我們可以簡單隨機生成一個私鑰,分別為2進制的表示和16進制的表示方式(皆為同一個Key)

雖然相同的功能在random的模組中也可以達到,但是安全性上會有疑慮,在random的官方文件中也有標示不要將random模組用於密碼相關的領域。


將公鑰和私鑰透過亂數網站生成

這裡也有提供相關的亂數生成器的網站,其中一個是 random.org ,但使用上會有兩個疑慮,第一個是使用上是否有達到亂數的效果,第二個則是當我們在網路上生成的Key會不會有機會被他人看到。而借到的另一個網站則是 bitaddress.org 這個網站就是設計給bitcoin使用的,這個網站優點在於他是開源的程式,可以清楚看到程式內的架構,並且可以下載到電腦中,不使用網路也能生成私鑰,用以確保生成的過程中有人偷看。

區塊鏈公鑰私鑰亂數生成
區塊鏈公鑰私鑰透過亂數生成的實際情況

什麼是WIF? 認識區塊鏈中私鑰編碼格式

WIF格式是為了將生成的私鑰編碼成較為容易複製的模式,下面是由私鑰轉為WIF格式的流程:

1、首先先取得一個私鑰(以16進制為例)

2、加入 0x80 byte 放再我們的私鑰前面

3、先做一次SHA256

4、再做一次SHA256

5、取前面4個bytes(再十六進制因此是取八位)

6、將步驟五的結果疊在步驟二的後面

7、經由Base58 解碼得出結果

區塊鏈私鑰格式
區塊鏈私鑰轉成WIF格式的流程

WIF 的生成在TP’s Go Bitcoin Tests – Private Key中有測試程式可以去嘗試嘗試生成的流程喔!


區塊鏈公鑰私鑰技術原理的總結

我們了解了私鑰的生成與用途後,後續還要介紹有關DAY7 橢圓曲線加密與公鑰的生成,地址的生成等等,相關的技術文章將會持續發佈!

區塊鏈公鑰私鑰原理重點
發佈留言