公鑰私鑰原理是什麼?
在比特幣的區塊鏈網路中,使用者將會拿到一組公鑰私鑰對,顧名思義公鑰可以被區塊鏈網路中的所有使用者看到,私鑰則僅由自身保管不能讓對方知道,而所有的交易與簽章都是透過使用者手上的私鑰來加密,這組鑰匙其實就相當於比特幣網路中的身份。
而比特幣中的錢包存放公私鑰,並透過這對鑰匙的數位簽章(digital signature)證明資產中的所有權。在比特幣中,錢包透過數位簽章附加到交易中,使確保交易的來源沒有被冒充,而交易皆以錢包中的私鑰當作擁有裏面虛擬貨幣的證明,換句話說若是弄丟了私鑰或是被別人偷走了私鑰將會永遠失去裡面的錢,因此在私鑰的產生與型式我們會再後面繼續介紹。
區塊鏈私鑰如何產生的?
其中私鑰在比特幣中是一個32bytes的數列(1 bytes = 8 bits ,因此32bytes的數列相當於256bits的數列( 0或者1 ) ),隨機數本身事由具加密安全的數字產生器取得的,在bitcoin中錢包通常在創立帳號時都會隨機生成一個私鑰給你,而私鑰應該要滿足一些特性:
- 要確保生成的鑰匙只有你自己知道
- 鑰匙要在確保安全性的情況下隨機生成
區塊鏈公鑰私鑰的範例及原理
先讓我們看看私鑰長什麼樣子:
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 的生成在TP’s Go Bitcoin Tests – Private Key中有測試程式可以去嘗試嘗試生成的流程喔!
區塊鏈公鑰私鑰技術原理的總結
我們了解了私鑰的生成與用途後,後續還要介紹有關DAY7 橢圓曲線加密與公鑰的生成,地址的生成等等,相關的技術文章將會持續發佈!
如果喜歡看更多與區塊鏈技術、應用、科技新知相關的內容,記得留下您的Email並追蹤我們的粉專,那麼新文章上線時,我們將在第一時間通知您,不用再擔心錯過最新消息。