【韭菜幣讀】用Emoji科普公鑰與私鑰的基本原理

weixin_34148340發表於2018-04-09

在區塊鏈的中,我們經常聽到這樣的詞彙——公鑰和私鑰。很多小白在學習區塊鏈知識時,還是容易被這些術語搞得一臉懵逼。韭菜幣讀系列此文謹獻給幣圈新朋友,希望能夠用Emoji幫助大家理解比特幣公鑰和私鑰的基本常識。(本文圖片來源:“Making Money Trustworthy-Bitcoin Explained,作者:Tess Rinearson)

研究密碼學的人們經常使用“愛麗絲”和“鮑勃”作為解釋概念的角色。今天,我將用他們來幫助解釋公鑰密碼學的基本邏輯。

首先,什麼是對稱加密。舉個例子,愛麗絲想交給鮑勃一個裝有祕密檔案的公文包。如果愛麗絲和鮑勃有互相匹配的鑰匙,事情很簡單:她可以將公文包上鎖,並用鑰匙把它鎖起來,然後將它給鮑勃。

7674436-6bb43602cb01c6b1.jpg

當鮑勃收到公文包時,他會用自己的鑰匙解鎖,因為這兩把鑰匙相同,於是鮑勃會得到包中的祕密檔案。這個過程被稱為對稱加密。

但是通常而言,人們互相之間少有“同時擁有一把鎖的鑰匙”這種情況,因為要安全地傳遞鑰匙並不容易。或者說,如果愛麗絲有給鮑勃傳送鑰匙的私人且安全的方式,她同樣也可以用其來傳輸檔案本身。

所以,比較常見的方式為,愛麗絲和鮑勃不需要同時擁有一個鎖的鑰匙,而是他們彼此都有自己的鑰匙和自己的鎖,這意味著他們不需要考慮傳遞鑰匙的事情。

具體是這麼運作的:

愛麗絲用鑰匙鎖起了帶有掛鎖的公文包,並將其傳遞給鮑勃。當鮑勃收到愛麗絲的公文包時,他無法解開愛麗絲的掛鎖。但是,他將其添上了自己的掛鎖。

7674436-c2ef1e10cb96f3ed.jpg

然後將其返還給愛麗絲:

7674436-f36c6da635927c9c.jpg

然後愛麗絲用她的鑰匙將掛鎖從公文包上摘下來:

7674436-7cec135429856308.jpg

公文包上現在只有一個掛鎖:鮑勃的。愛麗絲再將公文包寄回給鮑勃:

7674436-28e168f60b041aad.jpg

最後鮑勃可以開啟他自己上鎖的公文包,並順利拿出裡面的檔案。

現在,愛麗絲和鮑勃不需要再分享同一把鑰匙。他們只需要擁有自己的掛鎖和自己的鑰匙。

但是如果對方不是你認為的那個人呢?萬一發生了什麼奇怪的事,比如鮑勃被一頭牛所取代了呢?

那麼接下來,將發生這樣的事情:

1. 愛麗絲把帶有掛鎖的公文包寄了出去。她以為寄給的是鮑勃,但是卻寄給了一頭奶牛。

7674436-53eecf11336382e5.jpg

2. 這頭牛,以驚人的靈巧度,將它的掛鎖鎖在了公文包上,然後將其寄回給愛麗絲。

3. 愛麗絲很高興看到公文包帶著“鮑勃”(實際上是奶牛的)掛鎖回來了,她開啟自己的掛鎖並將其寄送回去。

4. 這頭奶牛拿回公文包,開啟了自己的鎖。

5. 牛把祕密檔案吃掉了。

鑑於沒有人希望他們的祕密被一頭牛消化掉,所以我們需要採取一個步驟來保護機密資料:鮑勃確保愛麗絲知道他的掛鎖是什麼樣子,所以當她重新拿回公文包時,能夠驗證這個新鎖是否屬於鮑勃。

事實上,鮑勃能夠複製他的掛鎖的模樣,並將其公開。每個人都知道鮑勃的掛鎖是什麼樣子其實並不重要,畢竟他是唯一可以用鑰匙解鎖的人。同時,這能讓愛麗絲認出鮑勃的鎖。她可以在開啟自己的鎖之前,檢查第二個掛鎖是否真的屬於鮑勃。

如果我們需要處理的僅僅是物理掛鎖和金鑰,那是很難做到複製掛鎖和鑰匙的。但是當我們以數字化方式進行處理的時候,我們使用的是數字密碼和數字鎖,即數值。

在上面的例子中,掛鎖代表的數字是公開的,也可以叫做公鑰。鑰匙代表的數字是私有的。這個被稱為“私鑰”的私人數字可以用來“開啟”公共鎖。這種非對稱加密演算法,公鑰與私鑰是成對的,他們互相解密,因為加密和解密使用的金鑰不一樣,被稱為非對稱加密演算法。他們的關係如下:這即是比特幣所採用的公鑰密碼學。

人們保護私鑰,是因為私鑰可以解鎖任何相對應的公鎖。(在密碼學中,這種解鎖過程被稱為簽名)人們會公開他們的公鑰,這樣其他人就知道什麼被鎖住了。

在比特幣系統中,公共密碼學被用來證明所有權。用Emoji來表示具體的操作流程如下:

在比特幣的世界裡,愛麗絲需要傳遞給鮑勃的並不是一個掛鎖公文包,而是一個放著掛鎖和比特幣的“玻璃盒子”。

7674436-cdb37c38db98c14b.jpg

為了將比特幣傳遞給鮑勃,愛麗絲必須做兩件事:

1. 愛麗絲必須把鮑勃的掛鎖(公鑰)放在自己的箱子裡。這很簡單,因為鮑勃的掛鎖實際上是一個公開數值。這樣,鮑勃可以通過解鎖自己的掛鎖來證明自己的所有權。

2. 愛麗絲必須證明這個盒子放置的掛鎖是她的,而不是別人的。她需要用鑰匙(私鑰)開啟自己的掛鎖。

7674436-af8bd6faae2cd730.jpg

然後,當鮑勃決定將這些比特幣傳遞給另一個人(我們暫且稱他為卡洛斯)時,他會做同樣的事情:將卡洛斯的公鑰放置其中,然後用自己的私鑰簽署交易。

讓我們回到區塊鏈,私鑰本質上是32個byte組成的陣列,由256個0或者1隨機組成,識別性較差

地址是由公鑰產生的,公鑰經過多種加密演算法轉換成公鑰雜湊,公鑰雜湊經過Base58編碼生成地址。就如同愛麗絲把鮑勃的掛鎖放在盒子裡一樣。實際上,單個公鑰可以生成無限多個地址。因此,如果鮑勃希望每次都使用不同的地址,他也可以這麼做。

7674436-32f9e5d6cbbdc288.jpg

(圖片來自微信公眾號: 槿小喵)

讓我們回到我要轉給你5美元這件事情上。我把它傳送到你的比特幣地址上,你的比特幣地址以數字化的方式與你的私鑰相連,那麼你將在這個地址中獲取比特幣。

為了花掉這5美元,你需要進行一個新的交易,包括一個屬於收件人的地址,然後用你的私鑰簽署。這相當於把收件人的掛鎖掛在公文包上,然後開啟你的掛鎖。

總結:私鑰公鑰是成對出現,公鑰可以生成對應的唯一地址,這樣就能確認了該地址傳送的交易是否使用了對應的私鑰。這種做法有一個副作用,那就是,比特幣幾乎是匿名的。因為地址上使用的是“假名”。比特幣與你的名字無關,其所需要的是你的私鑰。換句話說,誰掌握了私鑰,就掌握了你地址上的財產,這也是為什麼進入區塊鏈行業一定會被提醒:私鑰一定要保管好。

韭菜幣讀往期回顧:

【韭菜幣讀】一文看懂區塊鏈-01篇

http://www.jinniu.cn/btc-48/

【韭菜幣讀】一文看懂比特幣-02篇

http://www.jinniu.cn/btc-88/

【韭菜幣讀】一文看懂比特幣-03篇

http://www.jinniu.cn/btc-68/

【韭菜幣讀】比特幣分叉整理:一文看懂比特幣家族史

http://www.jinniu.cn/btc-58/

【韭菜幣讀】三點鐘無眠區塊鏈大佬觀點分享(一)

http://www.jinniu.cn/focus-3-o-clock/

【韭菜幣讀】三點鐘無眠區塊鏈大佬觀點分享(二)

http://www.jinniu.cn/focus-3-o-clock-2/

【韭菜幣讀】如何看待Coinbase和Bitfinex實施隔離見證

http://www.jinniu.cn/coinbase/

相關文章