• APP內打開
    風險提示:防范以虛擬貨幣/區塊鏈名義進行的非法集資風險。 ——銀保監會等五部門

    聊聊錢包、私鑰、公鑰和地址

    白話區塊鏈 2017-12-17 22:01:07
    微信分享

    掃碼分享

    近來區塊鏈技術相關的話題熱度持續上升,其中大家最熟悉的應用恐怕就是比特幣了。網上關于這種數字貨幣到底有沒有價值的爭論早已經吵翻了天,正反兩派各有很多擁躉。不過我不打算談價值,只想從比特幣對應的一款具體的應用軟件入手,聊一些相關的專業名詞和背后的邏輯。

    作者:歷史文章 / 來源:白話區塊鏈

    2017-07-20 萬精油蟲師 白話區塊鏈

    白話區塊鏈,從入門到精通,看我就夠了!

     

     

    近來區塊鏈技術相關的話題熱度持續上升,其中大家最熟悉的應用恐怕就是比特幣了。網上關于這種數字貨幣到底有沒有價值的爭論早已經吵翻了天,正反兩派各有很多擁躉。

     

    不過我不打算談價值,只想從比特幣對應的一款具體的應用軟件入手,聊一些相關的專業名詞和背后的邏輯。

     

    如果你是比特幣的持有者,還湊巧有windows或者mac電腦,那你應該用過一款叫Bitcoin-qt的軟件。這個軟件就是號稱比特幣錢包的工具,與此相關的還有私鑰、公鑰、地址等名詞概念。那么這四個概念之間是什么樣的關系呢?盡管網上有很多資料解釋的很詳細很技術,但我也費了好大功夫才大概弄明白,可能是我的理解能力差吧。


    接下來我就把自己在理解這些問題時產生的疑問列出來,并一一回答。

     

    第一,這些名詞的關系是什么樣的?

    如果用一句話說明這幾個名詞的關系,那就是:錢包生成私鑰→私鑰生成公鑰公鑰生成公鑰哈希公鑰哈希生成地址地址用來接受比特幣,簡單吧,能聽懂吧。

     

    第二,這幾個名詞究竟是什么東西?

    還是一句話概括,除了錢包是軟件以外,剩下的四個都是長度不一的字符串,比如私鑰是52位的字符串,地址是34位的字符串。

     

    第三,這四個字符串分別從哪里來的?

    私鑰由錢包軟件隨機生成,隨后用密碼算法生成公鑰和地址,如果用等式表示的話,可寫成如下形式:

    公鑰=算法1(私鑰)

    公鑰哈希=算法2(公鑰)

    地址=算法3(公鑰哈希)

    所以,地址=算法3(算法2(算法1(私鑰)))

    其中,算法1,算法2,算法3都是公開的算法。

     

    第四,這幾個字符串哪個必須保密,哪個可以公開?

    私鑰絕對不能公開,因為有了它本質上就取得了對應比特幣的所有權。


    地址可以公開,因為它是用來接受比特幣的,公鑰和公鑰哈希也可以公開,不過一般情況下你看不到。

     

    第五,為什么地址和公鑰可以公開?

    因為即使被別人知道了地址和公鑰,對方也推算不出你的私鑰,也就掌握不了你的比特幣

     

    為什么推算不出呢?

    因為問題三中的等式,除了算法3,算法1和算法2的計算都是不可逆推的

    地址=算法3(算法2(算法1(私鑰)))

     

    什么叫做計算不可逆?

    先舉個簡單的例子。


    有等式y=4x²+5x+17,這是我們中學都學過的拋物線方程,在這個簡單方程里,已知x的情況下,可以快速求出y。但是在知道y的情況下,要反求x,就會發現可能的答案x有兩個,但實際只有一個才是正確的。


    當然真實的密碼算法要比這個復雜的多,以至于,在已知y的情況下,x的可能解多達10的77次方個,所以若有臺超級強大的計算機,進行暴力搜索求解,還是可以算出私鑰的。不過據說宇宙所有原子的總和是10的80次方,所以暴力搜索法應該很花時間吧。


    再舉個例子。電影《模仿游戲》中,英軍即使在得到了engima密碼機(算法)后仍然無法破解德軍的密碼,原因就是德軍每次發信息都會用一個新的口令(私鑰)作為起始點。在不知道口令的前提下,進行反向暴力破解大概需要幾千萬年,不過最后因為刻板的德國人每次都用同一個口令作為起點,而這個口令還是自然語言,導致密碼被破解。


    所以,每次交易的時候才會要求生成一個新的私鑰,然后得到一個新的地址,這樣你的交易安全性就有了很大的保障。

     

    第六,私鑰的本質是什么

    從上面的描述我們可以推出,私鑰的本質是一個復雜數學問題的解,當有人向公開地址發送比特幣時,其實是在向全網所有比特幣客戶端發出了一道數學題,而這道題目的正確解,就是你的私鑰。因為那道題是用你的私鑰生成的呀,所以只有你能在第一時間回答出答案,于是比特幣就歸你了,因此私鑰千萬不能告訴別人。

     

    如何找到私鑰并妥善保管?

    在bitcoin-qt軟件中,進入windows debug或者調試窗口,在命令行下輸入getaddressbyaccount命令可以查看所有已經生成的錢包地址。選取其中一個地址,然后用dumpprivkey “地址”命令就能看到私鑰了(54位字符串)。

     

    下圖是用getaddressbyaccount “”命令查看地址列表,用dumpprivkey查看私鑰的截圖,注意第一張圖中由于錢包是加密的,所以直接打dumpprivkey命令是看不到私鑰的。



    輸入錢包密碼后才能用dumpprivkey命令看到私鑰。



    剛已經說了私鑰非常的重要,它是真正決定比特幣歸誰的證明。私鑰在bitcoin-qt客戶端里,實際上是存在于一個叫wallet.dat的文件里的,而且剛安裝的bitcoin-qt客戶端是不設密碼的。萬一電腦落入不法分子手中或被黑客攻擊,導致私鑰丟失,就狠尷尬了,所以一定要設置密碼,且密碼一定要遵守隨機復雜大小寫字符數字都有的規則。建議用專門的密碼生成軟件生成,關于密碼軟件,找機會專門說一下。

     

    特別注意,千萬千萬千萬記住了,一定不要把密碼給忘了!因為你忘了密碼就打不開錢包wallet.dat文件了,也就找不到私鑰了,然后,就沒有然后了。


    我就發生過剛開始倒騰錢包把密碼搞錯了,然后打不開錢包的尷尬,最后只好怒刪wallet.dat文件,讓系統再自己生成一個,這時候的感覺大約相當于把一筆錢埋在了宇宙某刻星球上,然后把坐標圖搞丟了,因為比特世界只認私鑰不認身份證,你掉了就是掉了,再也找不回來了。

     

    不過正因為比特幣的所有權是依靠私鑰確認的,也就有個最狠的保存辦法,老貓也提過,那就是,找到私鑰后記在紙上,然后把紙鎖在保險柜里,或者干脆記在腦子里,不過54位的字符串誰特么能記住?然后把電腦上的客戶端連同錢包文件一起刪除。

     

    好了,關于錢包客戶端,大概就說這些吧,相關知識我也是剛開始了解,隨著了解信息的增加,可能會有更新的認識,到時候會再寫出來。

     

      Kindly Reminder                                 

     

    千萬注意,千萬注意,千萬注意不要搞丟了私鑰。

     

     | 萬精油蟲師     

    公眾號 | 肉摩陀     

    整編 | WangMe

     

     

    下載白話區塊鏈APP

    區塊鏈世界入口第一站,人人都能看懂的區塊鏈;24 小時熱點實時追蹤。

    毛片免费看