1.4 公鑰即身份

讓我們來看一下與數字簽名並行的一個有用技巧,基本想法是從數字簽名模式中拿出一個公共驗證密鑰,並將其與一個人或一個系統參與者的身份對等。如果你見到一條消息的簽名被公鑰pk正確驗證,那麼你可以認為pk就是在表達這條消息。你真的可以將公鑰認為是參與者或者系統的一方,他可以通過簽署聲明而發佈聲明。從這個角度來說,公鑰就是身份,讓某人能為pk身份發聲,他必須知道相應的密鑰sk。

將公鑰視為身份的一個結果是,你可以隨時制定新的身份——你可以簡單通過數字簽名方案中的generateKeys程序,生成新的密鑰對sk和pk。pk是你可以使用的新的公共身份,sk是相應的密鑰,只有你自己知道並可以讓你代表身份為pk發聲。在實踐中,你可能會使用pk的哈希作為你的身份,這是因為公鑰很大。如果是這樣的話,為了驗證消息來自你的身份,人們會需要驗證:(1)你的身份確實是pk的哈希;(2)信息能經過公鑰pk驗證。

此外,在默認情況下,你的公鑰pk基本上看起來是隨機的,也並沒有人能夠通過檢查pk發現你的現實身份(當然,一旦你開始使用這個身份發表聲明,這些聲明可能洩露信息,而讓別人將你的真實身份與pk聯繫起來。我們很快會更詳細地討論這個問題)。你可以生成一個看起來隨機的新身份,看起來像人群中的一張臉,但這些都只有你能夠控制。

去中心化身份管理

公鑰和私鑰的體系,幫助我們引入去中心化的身份管理的理念。你可以自己作為用戶註冊,而無須到一個中央機構註冊為系統用戶。你不需要別人給你一個用戶名,你也不需要告訴任何人你會使用什麼名字。如果你想要新的身份,可以隨時生成一個,而且想要多少就生成多少。如果你希望擁有五個不同的名字,沒有問題!那就生成五個身份。如果你想匿名一陣子,你可以生成一個新的身份,使用一段時間,然後棄之不用。有了去中心化身份管理,所有這一切都變得可能。事實上,這就是比特幣對待身份的方式。這些身份在比特幣語言中被稱為地址。你可以常常聽到地址這個詞,用於比特幣或加密貨幣相關的內容中,而地址其實就是公鑰的哈希值。作為去中心化身份管理方案的一部分,它就是某人憑空捏造的一個身份而已。

安全性與隨機性

你可以不經過中央機構而生成一個身份的概念可能看起來有悖常理。畢竟,如果有人剛好就生成了跟你一樣的密鑰,他不就能偷走你的比特幣嗎?

我們給你的回答是,別人生成一個與你的相同256位密鑰的概率如此之小,在實踐中,我們不需要擔心它會發生。總而言之,我們保證這種情況絕不會發生。

一般來說,與新手的直覺不同的是,概率系統是不可預測且難以推理的,反面的常常是真的——統計學理論使得我們可以精確地量化我們感興趣的事件的概率,並對該系統行為做出自信的推論。

但還有一個精妙之處:概率保證只有在密鑰為隨機產生時為真。在現實系統中,隨機的生成常常是薄弱環節。如果兩個用戶的電腦使用同樣的隨機來源或者使用可預測的隨機,那麼理論保證不再適用。所以,在生成密鑰時使用良好隨機源至關重要,以確保實踐保證與理論保證相符。

乍一看,去中心化身份管理可能極具匿名性及隱秘性。畢竟,你可以自己創建一個看起來很隨機的身份,同時也不用告訴任何人你的真實身份是什麼。但事實並不是這麼簡單,隨著時間的推移,你創建的身份會做出一系列的聲明。人們看到這些聲明便知道擁有這個身份的人做出了特定的一系列行為。他們能夠開始將細節聯繫起來,從這一系列的行為推斷出你的真實身份。隨著時間的推移,一個觀察者可以將這些事情聯繫起來,並推斷出這樣的結論:「天,這個人的行為好像喬(Joe),可能這個人就是喬。」

換句話說,在比特幣系統中,你不需要明確地註冊或揭露你的真實身份,但是你的行為模式本身可能是可識別的。這就是比特幣等加密貨幣的基本隱秘性問題,我們將會在第6章專門討論這個問題。

《區塊鏈:技術驅動金融》