我們都知道區(qū)塊鏈是公開透明的,那么有人會有這樣的疑問,我們什么時候和誰交易了多少錢球化,都會記在大家的賬本上,豈不是沒有了隱私瓦糟?其實區(qū)塊鏈對于我們的身份信息是有所保護的筒愚,在發(fā)送和驗證交易的時候,并不需要我們的真實身份(文末解答關于匿名性的問題菩浙,下圖對于比特幣匿名性簡直詮釋得淋漓盡致巢掺,相信看過千與千尋的人都知道這個無臉男,阿深第一眼看到此圖差點沒笑噴出來)劲蜻。但如果是匿名的陆淀,系統(tǒng)怎么能確定是我發(fā)送的交易呢?萬一別人偽裝成我的身份呢先嬉?又或者篡改了我的交易信息呢轧苫?不同的區(qū)塊鏈系統(tǒng)對于這方面所做的措施又不盡相同,具體又是怎么做的疫蔓,這就是今天的主題--數(shù)字簽名含懊。
1.概念
數(shù)字簽名(又稱公鑰數(shù)字簽名、電子簽章)是一種類似寫在紙上的普通的物理簽名衅胀,使用了公鑰加密領域的技術實現(xiàn)岔乔,用于鑒別數(shù)字信息的方法。就是只有信息的發(fā)送者才能產(chǎn)生的別人無法偽造的一段數(shù)字串滚躯,這段數(shù)字串同時也是對信息的發(fā)送者發(fā)送信息真實性的一個有效證明雏门,主要用于數(shù)據(jù)更改的簽名者身份識別以及抗抵賴。數(shù)字簽名是非對稱密鑰加密技術與數(shù)字摘要技術的應用掸掏。
這里再科普一下非對稱加密技術茁影,非對稱加密算法是一種密鑰的保密方法,需要兩個密鑰:公鑰和私鑰阅束。公鑰與私鑰是一對呼胚,如果用公鑰對數(shù)據(jù)進行加密,只有用對應的私鑰才能解密息裸,從而獲取對應的數(shù)據(jù)價值蝇更;如果用私鑰對數(shù)據(jù)進行簽名,那么只有用對應的公鑰才能驗證簽名呼盆,驗證信息的發(fā)出者是私鑰持有者年扩。因為加密和解密使用的是兩個不同的密鑰,所以叫非對稱加密访圃。至于數(shù)字摘要技術厨幻,請看阿深的上一篇文章“核心技術之merkle樹”。
2.原理
發(fā)送報文時,發(fā)送者用一個哈希函數(shù)從報文文本中生成摘要信息况脆,將摘要信息用發(fā)送者的私鑰加密饭宾,加密后的摘要信息將作為報文的數(shù)字簽名與報文一起發(fā)送給接收者。接收者先用與發(fā)送者一樣的哈希函數(shù)對收到的原文計算格了,產(chǎn)生一個摘要信息1看铆,然后用發(fā)送者的公鑰來解密被加密的數(shù)字簽名(摘要信息)得到解密后的摘要信息2,這兩個摘要信息(1和2)如果相同盛末,那么接收者就能確認該數(shù)字簽名是發(fā)送者的弹惦。也說明收到的信息是完整的,在傳輸過程中沒有被修改悄但。
下圖中A是發(fā)送者棠隐,B是接收者。
舉個例子檐嚣,小明發(fā)起了一筆比特幣轉賬助泽,系統(tǒng)先將該交易進行數(shù)字摘要生成,然后用小明的私鑰對摘要進行加密嚎京,形成數(shù)字簽名报咳。完成后,系統(tǒng)將原文(交易信息)與數(shù)字簽名一起廣播給礦工挖藏,礦工用小明的公鑰進行驗證,如果驗證成功厢漩,則說明該交易確實是小明發(fā)出的膜眠,且信息未被更改。在這個過程中溜嗜,小明身為用戶僅僅做了轉賬時輸入了私鑰就好了宵膨。
總結一下數(shù)字簽名就是發(fā)送者用私鑰進行簽名,接收者就只能用發(fā)送者的公鑰進行驗證該信息的發(fā)送者就是私鑰的持有者炸宵。
3.特點
(1)數(shù)字簽名需要和具體的數(shù)字文檔綁定辟躏,就好比現(xiàn)實中簽名應該和紙質(zhì)媒介綁定;(2)數(shù)字簽名不可偽造土全;(3)能證明消息確實是由信息發(fā)送方簽名并發(fā)出來的捎琐,并且確定消息的完整性。
最后裹匙,回答一下最開始關于匿名性的問題瑞凑,還是以比特幣為例。首先我們購買比特幣的時候概页,都有一個錢包地址籽御,這個地址也就是我們的數(shù)字身份,掩蓋了現(xiàn)實中的身份,驗證身份就用上文中的數(shù)字簽名技掏。
但是發(fā)送和接收比特幣就像作者用筆名發(fā)表作品一樣铃将,如果一個作者的化名和他們的身份聯(lián)系在一起,他們曾經(jīng)寫下的任何東西都會與他們聯(lián)系在一起哑梳。對于比特幣來說劲阎,涉及你錢包地址的每一項交易都永久、公開的保存在該區(qū)塊鏈中涧衙,任何人都能看到哪工。舉個例子:某個用戶在線下進行消費,并通過比特幣進行支付弧哎,那么商家事實上建立了對用戶的線上(比特幣地址)線下(用戶身份)關聯(lián)雁比。
如果你在每個交易所的地址能夠和你的身份關聯(lián)起來,那么就能夠知道每一筆和你有關的交易數(shù)據(jù)撤嫩,不僅知道你的所有偎捎,還可能會有攻擊你隱私數(shù)據(jù)的不法分子。這份身份情報可能會來源于網(wǎng)絡統(tǒng)計信息序攘、流量監(jiān)視或者谷歌搜索茴她,這些數(shù)據(jù)會成為你的背景知識,攻擊者可以利用連續(xù)發(fā)布的大量數(shù)據(jù)來挖掘出關聯(lián)規(guī)則作為背景知識來推測你的敏感信息程奠,對個人隱私進行攻擊丈牢,這就是背景知識攻擊,這都是有一定可能性的瞄沙,就看他掌握你的背景知識的多與少了己沛。
比特幣系統(tǒng)還在開發(fā)中,也存在各種機制來保護距境。還有就是人類鉆空子找方法的本領一直是所有物種中最強的申尼,現(xiàn)在已有很多方法來避免以上不安全的攻擊,例如每筆交易換個地址垫桂、現(xiàn)金購買师幕、交易所隨機地址發(fā)送給你提幣,包括針對這種現(xiàn)象出現(xiàn)的很多服務诬滩,具體不細說了霹粥。要提的是門羅幣,門羅幣在數(shù)字簽名這方面用了一次性的環(huán)簽名技術疼鸟。主要就是將發(fā)送者的私鑰和任意多個其他成員的公鑰(也包括混合了自己公鑰)為發(fā)送者的原文生成簽名蒙挑,接收者根據(jù)環(huán)簽名和原文驗證簽名是否為環(huán)中成員所簽。其中成員無法冒充真實簽名者的簽名愚臀。這樣攻擊者無法確定簽名是由環(huán)中哪個成員生成的忆蚀,確保了交易的隱蔽性矾利。