這位未婚老嫗溫和恬靜坐在那里,你會(huì)以為她的大腦有種洞穿別人潛意識(shí)的魔力,破解任何難題只不過(guò)是個(gè)時(shí)間問(wèn)題。想到她一輩子都住在英國(guó)圣瑪麗米德小村莊,這更加令人景仰。她只是通過(guò)村莊和那里的日常生活這一棱鏡來(lái)了解世界,不過(guò),由于她對(duì)整個(gè)村莊的觀察如此細(xì)致入微,整個(gè)世界仿佛都逃不過(guò)她的慧眼。
俄羅斯作家列夫托爾斯泰寫道:知一村而知世界。
以上兩位作者指的是,從一個(gè)簡(jiǎn)單視角和狹小空間來(lái)推演出最深刻的真相和知識(shí)的出色能力。這種能力對(duì)那些在塵世生活中覺(jué)得迷茫、不堪重負(fù)和厭倦的靈魂而言,是一個(gè)巨大的鼓舞,與此同時(shí),對(duì)那些準(zhǔn)備冒險(xiǎn)探索而在理解世界方面感到重負(fù)的靈魂而言,這種能力也是一個(gè)完全的解脫。
兩種狀態(tài)其實(shí)都是一種投降,前者意味著一切都懂了,也就索然無(wú)趣了,后者則意味著沒(méi)有什么事情是能搞清楚的,也就是不可企及的。創(chuàng)新和變革的高速發(fā)展,常常讓我們從一個(gè)極端滑向另一個(gè)極端。
不過(guò)人們還存在另外一種選擇:追求理解。一份追求意味著一項(xiàng)計(jì)劃的起點(diǎn)。如果你想,譬如「追求當(dāng)上一名醫(yī)生」,你不可能早上醒來(lái)就決定今天就可以做一臺(tái)手術(shù)。你得學(xué)習(xí)相關(guān)課程,申請(qǐng)醫(yī)學(xué)院或者參加其他的醫(yī)學(xué)培訓(xùn)。想想我們會(huì)問(wèn)孩子 : 「你長(zhǎng)大了做什么?」但問(wèn)成年人的問(wèn)題則是「你在學(xué)習(xí)什么?」或者「你正在學(xué)什么本事?」我們對(duì)答案會(huì)有明顯不同的預(yù)期——想成為什么是一回事,追求成為什么則完全不同。
如果我們真想弄明白某件事,那就得從我們起點(diǎn)開始追求,需要去搞懂微小的細(xì)節(jié)以及它們與我們的世界如何關(guān)聯(lián)的歷史。
以下是理解密碼學(xué)及其應(yīng)用的一段追尋旅程。我開始只是因?yàn)槊艽a學(xué)與區(qū)塊鏈相關(guān),就去探查了一些密碼學(xué)的最新應(yīng)用和流行詞匯,最后卻發(fā)現(xiàn),密碼學(xué)其實(shí)反倒是故事的起點(diǎn)。
本文的主要目的是讓沒(méi)有數(shù)學(xué)、計(jì)算機(jī)科學(xué)或密碼學(xué)背景的非專業(yè)讀者理解密碼學(xué)、其過(guò)往和當(dāng)前歷史,以及未來(lái)的應(yīng)用和潛力。
偵探小說(shuō)家愛·倫坡的短篇小說(shuō)《金甲蟲》曾給美國(guó)當(dāng)代經(jīng)濟(jì)學(xué)家米爾頓·弗里德曼帶來(lái)啟發(fā),所以,談到密碼學(xué)的時(shí)候,誰(shuí)知道一篇好的文章可能會(huì)把什么樣的腦袋吸引到這個(gè)領(lǐng)域來(lái)呢…
起源
整體說(shuō)來(lái),密碼學(xué)旨在通過(guò)加密協(xié)議,讓世界進(jìn)行安全的通信,或在兩方或多方之間安全地進(jìn)行信息分享,并能阻止惡意第三方讀取或截獲私有信息。密碼學(xué)涵蓋很多加密模式,用不同方法保護(hù)存儲(chǔ)的數(shù)據(jù)不會(huì)因第三方「竊取」而曝光。
歷史
密碼學(xué)歷史可以被分成兩個(gè)時(shí)間段:經(jīng)典和現(xiàn)代。
在經(jīng)典密碼學(xué)世界中,信息是通過(guò)密鑰組合或者說(shuō)是一組字母或數(shù)字來(lái)加密,然后由同一組密鑰解密。一個(gè)簡(jiǎn)單的例子是「凱撒密碼」,字母只是按字母表的順序進(jìn)行位移,就可以加密或解密。值得注意的是,一旦搞清楚私密密鑰,此前所有的加密信息就都被解開了。整體而言,到第二次世界大戰(zhàn)期間,雖然加密技術(shù)不斷進(jìn)步,但加密手段仍然未有超越,無(wú)非是一連串的字母位移和配置,最終都被手工或借助計(jì)算機(jī)而破解。
在貝爾實(shí)驗(yàn)室從事密碼學(xué)研究的美國(guó)數(shù)學(xué)家克勞德·香農(nóng)(Claude Elwood Shannon)于 1948 年創(chuàng)立了信息論,他在信息論中聲稱,最好的加密方法應(yīng)該不顯示關(guān)于被加密的明文的任何信息。要知道信息論正是要量化信息,使其能被分享。
信息現(xiàn)在被定義為「熵」,或者叫一個(gè)變量所涉及的不確定性的度量。譬如,想象一下你在記錄拋硬幣的結(jié)果,硬幣頭像朝上的可能是 50%,記為數(shù)字 1, 硬幣頭像朝下的可能是 50%,記為數(shù)字 0。你把一連串 1 和 0 的結(jié)果記錄下來(lái),這個(gè)序列不能被壓縮成一個(gè)更短的字符串——因?yàn)?1 和 0 出現(xiàn)的幾率均等,那么我們?cè)趺纯赡芸s短這個(gè)字符串呢?辦不到的。但想象一下,如果頭像朝上的概率為 80%,朝下的概率為 20%,你所得到的字符串中, 1 的數(shù)量會(huì)遠(yuǎn)多于 0,這樣我們就可以壓縮字符串來(lái)代表一個(gè)真實(shí)的、更大數(shù)量的 1 和 0。這種關(guān)于某種可能性的表達(dá)就是「信息」,也是關(guān)于壓縮如何工作的原理。
香農(nóng)知道,要隱藏信息,一個(gè)好的加密方法應(yīng)該制造隨機(jī)性,這樣一來(lái)原始信息就無(wú)法溯源出來(lái)。譬如,我們對(duì) COLOR 和 COLOUR 兩個(gè)英文單詞進(jìn)行加密,我們知道這兩個(gè)詞很相似。不過(guò),如果我們用一種加密機(jī)制來(lái)加密,結(jié)果卻完全不同,那就堪稱完美的加密。
這意味著,即便要被加密的原初消息只有極小的變化,也應(yīng)翻譯成迥然不同的加密消息,和原始消息的加密消息之間沒(méi)有絲毫相像。有趣的是,目前還沒(méi)有任何一種加密技術(shù)可以做到一丁點(diǎn)的變化就能影響到加密信息的全部。密碼學(xué)還在追求完美的保密性。
接著,伴隨計(jì)算機(jī)的誕生,1970 年代迎來(lái)了現(xiàn)代密碼學(xué),即利用復(fù)雜性理論來(lái)發(fā)展加密方法,用戶可以輕松地加密、解密或驗(yàn)證消息,而在不知道私密密鑰的情況下 ,「暴力破解」這一方法所需的算力被證明相當(dāng)之高,要達(dá)到量子計(jì)算的難度。
因此,與經(jīng)典密碼學(xué)中加密方法必須保密這一條件不同,現(xiàn)代密碼學(xué)的方法和算法都可以被共享。即便提前知道相應(yīng)的理論和算法,也幾乎不會(huì)給你「破解它們」提供什么優(yōu)勢(shì)。
以下兩個(gè)里程碑式的突破把世界帶入現(xiàn)代密碼學(xué)時(shí)代:
· 數(shù)字加密標(biāo)準(zhǔn)(DES)
· 公開密鑰密碼學(xué)(譬如:RSA 算法和 Diffie-Helman 算法)
DES (Data Encryption Standard)規(guī)范了電子數(shù)據(jù)的加密方法,這推動(dòng)了對(duì)密碼學(xué)更廣泛的研究。(題外話,美國(guó)政府干預(yù) DES 的開發(fā),助長(zhǎng)了人們對(duì)政府通過(guò)后門干預(yù)加密技術(shù)的不信任,等等。關(guān)于啟用后門技術(shù)的優(yōu)缺點(diǎn)的爭(zhēng)論一直持續(xù)到今天。)言歸正傳,DES 在 2002 年已被高級(jí)加密標(biāo)準(zhǔn) (AES) 所取代。
至于公開密鑰密碼學(xué),其工作原理如下:
1. 用戶 A 生成一個(gè) ⑴ 私密密鑰(私鑰)和一個(gè) ⑵ 公開密鑰(公鑰)。
一個(gè)「密鑰」的定義是什么呢?密鑰是一段信息,可以決定一個(gè)算法的輸出。舉個(gè)非常簡(jiǎn)化的例子,假設(shè)用戶 A 有一個(gè)算法 F(x,k),其中她想用密鑰 k 「掩飾」一個(gè)數(shù)字 x,然后發(fā)送給另一個(gè)用戶 B,公式如下:
F(x, k) = x * k * 7
x 的值根據(jù)用戶 A 想要共享的數(shù)據(jù)或數(shù)字而變化。然后用戶 A 會(huì)用密鑰 k 乘以 x,以「隱藏」它。
假設(shè)用戶 A 的密鑰是 10,她想把數(shù)字 3 發(fā)給用戶 B。她會(huì)用 3 * 10 * 7 = 210 來(lái)「加密」數(shù)字 3。用戶 A 會(huì)把 210 發(fā)送給用戶 B。如果用戶 B 知道密鑰 k 和算法 F,他只需要把 210 除以 10 和 7 來(lái)「解密」這個(gè)秘密數(shù)字,結(jié)果即為 3。不過(guò),在本例中,加密密鑰和解密密鑰是相同的,或者稱為對(duì)稱加密,即用于加密和解密的是同一個(gè)密鑰 3。
而在非對(duì)稱加密中,公鑰「加密」和私鑰「解密」是兩個(gè)不同的數(shù)字,其算法也要比上面提到的復(fù)雜得多。
一般來(lái)說(shuō),公鑰是從私鑰派生出來(lái)的;不過(guò),要從公鑰出發(fā)找到私鑰,「在計(jì)算上是不可行的」。在正規(guī)術(shù)語(yǔ)中,這被稱為陷門函數(shù)(trapdoor function)——在一個(gè)方向上很容易處理、但在反方向上執(zhí)行起來(lái)極具挑戰(zhàn)性。
因此,從私鑰生成公鑰很容易,但是從公鑰計(jì)算出私鑰非常有挑戰(zhàn)性。這種差異性越大,這種方法就被認(rèn)為越安全。從根本上說(shuō),它依賴于計(jì)算中的一個(gè)事實(shí):乘法計(jì)算起來(lái)非??欤ㄒ枚?。
繼續(xù)……
2. 用戶 A 把她的公鑰發(fā)送給用戶 B。
3. 用戶 B 用用戶 A 的公鑰加密一條要發(fā)給 A 的信息 。
4. 用戶 B 給用戶 A 發(fā)送一條加密的信息。
5. 用戶 A 利用她的私鑰解密這條信息,然后讀到用戶 B 發(fā)給她的信息。
在 RSA 算法中,簡(jiǎn)單說(shuō)來(lái),私鑰和公鑰是基于兩個(gè)大素?cái)?shù)相乘形成的半素?cái)?shù)而生成的。前面講過(guò),因式分解(除法)在計(jì)算上比乘法困難得多。不過(guò),RSA 作為一種密碼學(xué)完整性的方法正在衰落。
Global Security 指數(shù)是一種量化加密系統(tǒng)的安全性的標(biāo)準(zhǔn),它將破解一個(gè)加密系統(tǒng)所需的算力翻譯成「燒開水」所需的能量?;谶@個(gè)指數(shù), 288 位的 RSA 加密,可用燒開不到一茶匙水所用的算力破解。目前,大多數(shù) RSA 密碼術(shù)使用 2048 位的密鑰。
我們可以對(duì)比來(lái)看一種新型的私 / 公鑰密碼術(shù)——橢圓曲線密碼術(shù)(Elliptic Curve Cryptography,ECC)。破解一個(gè) 288 位的 ECC 系統(tǒng),所需的能量可以煮沸地球上所有的水。因此,后者正在快速取代 RSA,成為區(qū)塊鏈和零知識(shí)證明中使用的密碼學(xué)系統(tǒng)的基礎(chǔ)。這是關(guān)于 ECC 與 RSA 對(duì)比的一個(gè)相當(dāng)綜合的概括。
在繼續(xù)講下去之前,我想提醒一下密碼學(xué)的使用在歷史上有多么重要。
從愷撒大帝到現(xiàn)在,一個(gè)國(guó)家或一個(gè)民族能夠安全交流的價(jià)值,以人類生命和經(jīng)濟(jì)價(jià)值計(jì)算都是不可估量的。早在巴比倫人占領(lǐng)以色列時(shí)期的 ***中,巴比倫人被以色列人擄到巴比倫時(shí),巴比倫就被稱為代表暗碼式翻譯的「示沙克」(耶利米書 25 章 26 小節(jié)),有可能是指保護(hù)先知不受懲罰。甚至托馬斯·杰斐遜也參與過(guò)密碼學(xué),他制作了美國(guó)軍隊(duì)使用的杰斐遜圓盤,這個(gè)發(fā)明一直延用到 20 世紀(jì)。后來(lái),英國(guó)科學(xué)家艾倫·圖靈破解德軍 Enigma 密碼學(xué)的工作,被認(rèn)為縮短了二戰(zhàn)的時(shí)間。毫無(wú)疑問(wèn),密碼學(xué)改變了歷史。
為什么需要零知識(shí)
在前面演示的私鑰 / 公鑰示例中,請(qǐng)注意,用戶 A 永遠(yuǎn)不應(yīng)該暴露她的私鑰,因?yàn)槿魏潍@得她的私鑰的惡意方都能夠解密其獲得的每一條加密消息。
我們來(lái)考慮另一種情況:常規(guī)密碼在大部分?jǐn)?shù)據(jù)庫(kù)中都存儲(chǔ)為哈希(hash),而不是明文。哈希是一個(gè)函數(shù),會(huì)把一個(gè)輸入轉(zhuǎn)換成另一個(gè)惟一的字符串?dāng)?shù)據(jù),從而掩飾或隱藏原始數(shù)據(jù)。
在哈希函數(shù)中,實(shí)際上「不可能」從哈希函數(shù)創(chuàng)建的惟一數(shù)據(jù)字符串反推出原始數(shù)據(jù)。例如,系統(tǒng)可以使用 keccak256 哈希算法,將密碼「3nY82$pwt4」哈希為 0xc24ea779490258728751c1789aa30fa007261f5c052e22914599b46 ae13ccc5a??纯催@種字母和數(shù)字的組合,即使知道哈希算法并使用強(qiáng)大的算力,也無(wú)法倒推出原始密碼 3nY82$pwt4 。重要的是,哈希函數(shù)在定義上是決定性的,這意味著相同的輸入總是會(huì)得到相同的輸出。因此,如果一個(gè)網(wǎng)站將您的密碼存儲(chǔ)為 0xc24ea779490258728751c1789aa30fa007261f5052e22914599b46 ae13ccc5a,那么當(dāng)您輸入「3nY82$pwt4」時(shí),該網(wǎng)站可以通過(guò)對(duì)其哈希,并與存儲(chǔ)在數(shù)據(jù)庫(kù)中的哈希進(jìn)行比較,來(lái)檢查您是否輸入了正確的密碼。
在上面的例子中,請(qǐng)注意:雖然網(wǎng)站不會(huì)存儲(chǔ)您的明文密碼,但您仍然需要通過(guò)一個(gè)安全通道與網(wǎng)站共享密碼,這樣才能證明你知道你的正確密碼。
如果您可以向網(wǎng)站證明您知道正確的密碼,而又不向他們共享或透露該密碼,那不是更好嗎?或者做的更出色,證明以前的那個(gè)你就是現(xiàn)在你說(shuō)的這個(gè)你 ?
總體來(lái)說(shuō),這種方法是當(dāng)今大多數(shù)行業(yè)驗(yàn)證信息的方式——需要提供信息來(lái)驗(yàn)證它,需要重新執(zhí)行計(jì)算來(lái)驗(yàn)證它是否完整地正確執(zhí)行。比如,如果銀行想批準(zhǔn)一筆從您的帳戶到另一賬戶的電匯,銀行必須在轉(zhuǎn)賬前檢查你的賬戶,來(lái)確認(rèn)你的帳戶中有足夠的錢,來(lái)證明您不是在花費(fèi)你實(shí)際不擁有的錢。同樣,如果你想證明自己的身份,你必須提供你的社會(huì)安全號(hào)碼或政府簽發(fā)的其他身份證明。
而在另一些情況下,不需要知道知識(shí)的細(xì)節(jié)就可以檢查結(jié)果。例如,供應(yīng)商 A 的出價(jià)是否高于供應(yīng)商 B ? 供應(yīng)商 B 不應(yīng)該看到供應(yīng)商 A 的出價(jià),同樣,很可能雙方都不想向客戶以外的第三方披露自己的出價(jià)。不過(guò),零知識(shí)證明可以向一個(gè)監(jiān)管或?qū)徲?jì)機(jī)構(gòu)證明,供應(yīng)商 A 的出價(jià)低于供應(yīng)商 B 。
這就是零知識(shí)證明所提供的東西:一方(證明者)能夠向另一方(驗(yàn)證者)證明,他們擁有某一條特定的信息,而又無(wú)需披露該信息是什么。
零知識(shí)證明 (Zero Knowledge Proof)系統(tǒng)
零知識(shí)證明系統(tǒng)是 1989 年由 Shafi Goldwasser、Silvio Micali 和 Charles Rackoff 在《交互證據(jù)系統(tǒng)的知識(shí)復(fù)雜性》(The Knowledge Complexity of Interactive Proof Systems)論文中首次提出的。(值得注意的是,這篇論文在最終發(fā)表之前被拒絕了大約三四年。)
這些最初的零知識(shí)證明系統(tǒng)是交互的,意味著數(shù)學(xué)證明的完成,需要驗(yàn)證者和證明者幾方的交互才能完成。這意味著驗(yàn)證者不能獨(dú)立操作,而證明者必須在場(chǎng)或可以出場(chǎng)才能完成證明?,F(xiàn)在,我們已經(jīng)發(fā)展到非交互式的證據(jù)系統(tǒng),在這種系統(tǒng)中,證明者可以發(fā)布一個(gè)證據(jù),并將其留給驗(yàn)證者進(jìn)行檢查。
零知識(shí)證明的驗(yàn)證方法強(qiáng)調(diào)的是可靠性和完備性??煽啃缘脑瓌t是指,證明者不能說(shuō)服驗(yàn)證者接受一個(gè)錯(cuò)誤的陳述。事實(shí)上,這基于一種可能性,即證明者生產(chǎn)一個(gè)假的證據(jù)的可能性非常、非常、非常低,這一點(diǎn)與幾十年來(lái)我們一直信任的當(dāng)前的加密機(jī)制沒(méi)有什么不同。完備性的原則是指,一個(gè)證明者能夠說(shuō)服驗(yàn)證者接受一條正確的陳述。
很明顯,零知識(shí)證明的一個(gè)主要特征是,它們能夠在保證隱私的同時(shí)證明信息被知曉,但是零知識(shí)證明系統(tǒng)系統(tǒng)更有趣的地方在于,它們?cè)絹?lái)越簡(jiǎn)潔,這一點(diǎn)經(jīng)常被忽視。零知識(shí)證明系統(tǒng)能夠比其他方法更簡(jiǎn)潔地證明信息。驗(yàn)證一個(gè)證據(jù)的時(shí)間,比重演一個(gè)計(jì)算以驗(yàn)證其正確性所需的時(shí)間要指數(shù)級(jí)的短得多,而后者是目前各種變動(dòng)中的計(jì)算所最常用的方法。
重演計(jì)算代價(jià)高昂,需要時(shí)間和資源。(請(qǐng)注意,這與驗(yàn)證算法或程序的正確性不同——驗(yàn)證計(jì)算的完整性則完全是另一個(gè)范疇。)
更重要的是,這意味著執(zhí)行計(jì)算本就效率低下的區(qū)塊鏈,應(yīng)該被用于驗(yàn)證計(jì)算的證據(jù),而不是用于一般的計(jì)算本身。
快進(jìn)到今天的大環(huán)境,我們有幾種不同的零知識(shí)證明系統(tǒng)的實(shí)用案例:
在此,我們將簡(jiǎn)要討論 :
· ZK-SNARKs
·ZK-STARKs
· 防彈證明
ZK-SNARKs
ZK-SNARKs 是「零知識(shí)簡(jiǎn)潔的非交互式知識(shí)論證」(zero knowledge succinct non-interactive arguments of knowledge)的縮寫,Zcash 采納了這種方法,Zcash 現(xiàn)在叫 Electric Coin Company,用這種方法將加密貨幣的支付匿名化。(注:Zcash 區(qū)塊鏈實(shí)際上是比特幣區(qū)塊鏈的一個(gè)分叉。)
在 Zcash 區(qū)塊鏈中,礦工不需要知道:
1. 誰(shuí)在發(fā)送 Zcash (因此也無(wú)需知道他們擁有多少 Zcash)。
2. 誰(shuí)在收取 Zcash.
3. 被傳遞的 Zcash 的數(shù)量。
不過(guò),礦工依然能夠證實(shí)交易。
使用 ZK-SNARKs,礦工證實(shí)的事情包括,沒(méi)有發(fā)送者發(fā)送或創(chuàng)建比他們當(dāng)前擁有的 Zcash 更多的 Zcash,接收方只收到發(fā)送方試圖發(fā)送的金額。以這種方式,Zcash 成了一個(gè)真正的匿名系統(tǒng)。在比特幣和包括以太坊在內(nèi)的大多數(shù)公共區(qū)塊鏈上,所有交易信息都是公開的,發(fā)送地址、接收地址和金額都是已知的。此外,每個(gè)單獨(dú)帳戶中持有的幣都是已知的。
(應(yīng)該提醒的是,實(shí)際上 Zcash 有兩種不同的地址格式。T 地址是公開的,從這些地址發(fā)送和接收的信息可以被視為比特幣區(qū)塊鏈。Z 地址是私密的,如果一個(gè) Z 地址將 Zcash 發(fā)送到另一個(gè) Z 地址,那么該信息將完全保持私密狀態(tài)。不過(guò),如果一個(gè) Z 地址將 Zcash 發(fā)送到一個(gè) T 地址,信息將成為公共狀態(tài)。據(jù)估計(jì),Zcash 區(qū)塊鏈上只有 1% 的交易使用完全私密交易。在 2018 年底 Sapling 升級(jí)之前,由于規(guī)模和內(nèi)存等要求,Zcash 區(qū)塊鏈上的私人交易只能在筆記本電腦上進(jìn)行?,F(xiàn)在,私人交易只需要 2 - 3 秒 , 理論上可以從移動(dòng)設(shè)備上完成交易,這是相當(dāng)驚人的。想一想,不到兩年前的 2017 年 Scarbrough 感恩節(jié)時(shí),我和我從事網(wǎng)絡(luò)安全的兄弟展開過(guò)一次隱私大辯論,我們都沒(méi)有想到,零知識(shí)交易在如此短的時(shí)間可以發(fā)展到如此快的交易速度。我輸?shù)袅四菆?chǎng)辯論,但公平地說(shuō),只是對(duì)方獲得的支持人數(shù)比我多。)
ZK-SNARKs 具體如何運(yùn)作?
ZK-SNARKs 背后的數(shù)學(xué)理論是精細(xì)和密集的,但是可以(稍微)用正確的原理和定理進(jìn)行濃縮。以下是 Christian Reitweissner 的「SNARKs in a Nutshell」論文的一個(gè)壓縮版本。
首先,問(wèn)題被編碼并壓縮成一組多項(xiàng)式等式,作為一個(gè)二次運(yùn)算程序。
t(x)h(x) = w(x)v(x)
利用這些方程,證明者的目標(biāo)是使驗(yàn)證者相信等式成立。
這些多項(xiàng)式可以是好幾個(gè)項(xiàng),如果對(duì)大量的點(diǎn)進(jìn)行等式檢查,效率會(huì)相當(dāng)?shù)汀榱艘牒?jiǎn)潔性,ZK-SNARKs 依賴于 Schwartz-Zippel 輔助定理,即不同的多項(xiàng)式在大多數(shù)點(diǎn)的求值是不同的,因此只要檢查少量的點(diǎn),其實(shí)就可驗(yàn)證證明者使用的多項(xiàng)式是否正確。這樣,求值只需要在點(diǎn)的一個(gè)子集來(lái)證明等式,而這些求值點(diǎn)是隨機(jī)和秘密的。隨機(jī)性和秘密點(diǎn)通常被稱為 ZK-SNARKs 可信設(shè)置的有毒廢物。設(shè)置階段生成一個(gè)公共引用字符串 (common reference string ,CRS),該字符串生成一個(gè)隨機(jī)點(diǎn) s,從該點(diǎn)求值多項(xiàng)式,并生成一個(gè)秘密數(shù)字 α,來(lái)「移位」多項(xiàng)式的值以保持機(jī)密性。s 和 α 在設(shè)置階段之后立即銷毀,于是惡意行為者就不會(huì)得到它們,從而只能在自己的基礎(chǔ)上構(gòu)造出錯(cuò)誤的證據(jù)。
驗(yàn)證者現(xiàn)在可以檢查,在一個(gè)隨機(jī)點(diǎn) s 處下列多項(xiàng)式保持相等:
t(s)h(s) = w(s)v(s)
接下來(lái),就是掩蓋隨機(jī)性、秘密求值點(diǎn),并允許驗(yàn)證者將使用同態(tài)加密形式的證據(jù)拼成完整拼圖。在同態(tài)加密中,值的加密方式是這樣的:可以對(duì)這些值執(zhí)行數(shù)學(xué)運(yùn)算,然后解密以顯示一個(gè)值,就好像最初的數(shù)字被用在求值中一樣。換句話說(shuō),它允許您隱藏?cái)?shù)字、執(zhí)行一次求值并取消隱藏,就像您對(duì)原初的、未隱藏的數(shù)字進(jìn)行操作一樣 (在本例中不是所有的數(shù)學(xué)操作,而是某一些)。
證明者只知道 E(s),但能夠計(jì)算 E(t(s)), E(h(s)), E(w(s)) 和 E(v(s))。
通過(guò)乘以另一個(gè)秘密值 k 來(lái)混淆同態(tài)加密值,證明者也能夠隱藏其原始信息。
本質(zhì)上,驗(yàn)證者是在檢查下面這個(gè)形式的等式,t(s)h(s)k = w(s)v(s)k
ZK-SNARKs 如何設(shè)置 ?
對(duì)于上面提到的如何生成「多項(xiàng)式等式」和隨機(jī)設(shè)置,有一些人表示懷疑。
關(guān)于多項(xiàng)式等式的質(zhì)疑,我能給出的最短版本是,最初要被證明的等式(比如 A 》 B 嗎 ? 或者 A + B =C 嗎 ? )被壓縮到一個(gè)回路中,即約束條件被用于創(chuàng)建這些多項(xiàng)式。
另外,你是如何選擇隨機(jī)數(shù)的呢 ?
在 Zcash 的第一個(gè)版本中,最初的創(chuàng)始成員使用了一種精心設(shè)計(jì)的方法,通過(guò)他們所謂的「儀式」來(lái)制造這種隨機(jī)產(chǎn)生的有毒廢物,完整故事請(qǐng)見這個(gè)鏈接 https://www.wnycstudios.org/story/ceremony。
「儀式」最終是一個(gè)產(chǎn)生隨機(jī)結(jié)果的多方計(jì)算 (MPC)。換句話說(shuō),儀式的每個(gè)成員 (總共六方) 都產(chǎn)生了各自獨(dú)特的隨機(jī)密鑰,這些密鑰被組合成一個(gè)再次隨機(jī)的密鑰。最近,在 Zcash 的最新版本 Sapling 中,他們?yōu)?MPC 實(shí)施了一種新的方法論——80 多名參與者一起生成了 ZK-SNARKs 的隨機(jī)私鑰。在這種新方法中,只需要一方保持忠誠(chéng),私鑰就不會(huì)被復(fù)制——換一種說(shuō)法,這意味著儀式的所有參與方都必須變節(jié),才能顛覆這個(gè)系統(tǒng)。
ZK-STARKs
相比之下,STARKs (簡(jiǎn)潔透明知識(shí)論證,succinct transparent arguments of knowledge)則因其透明和簡(jiǎn)潔密碼學(xué)而被稱贊。和 ZK-SNARKs 不同,STARKs 不需要一個(gè)可信的設(shè)置,因此也不需要 ZK-SNARKs 中出現(xiàn)的有毒廢物那種事情——因此具有透明性。STARKs 能夠通過(guò)使用 Arthur-Merlin 協(xié)議消除對(duì)可信設(shè)置的需要。在該協(xié)議中,驗(yàn)證者 Arthur 為每個(gè)問(wèn)題生成隨機(jī)性,而證明者 Merlin 則通過(guò)解決問(wèn)題來(lái)提供證據(jù)。
STARKs 還通過(guò)使用最小的密碼假設(shè)和在安全和抗沖突的哈希函數(shù)之間取得平衡,而使其密碼術(shù)更簡(jiǎn)潔。這留下了潛在的后量子時(shí)代的安全風(fēng)險(xiǎn)。最小密碼假設(shè)適用于交互式 STARKs,而非交互式 STARKs 則需要 Fiat-Shamir 啟發(fā)式。
Starkware (https://starkware.co/)正在與 0x 合作進(jìn)行一個(gè)非常棒的項(xiàng)目,在去中心化和中心化的通證交易所中使用 ZK-STARKs,他們就此主題發(fā)表的文章相當(dāng)清晰,有興趣的讀者可以了解一下。
STARK 證明和驗(yàn)證的速度都比 SNARKs 和防彈證明快,只不過(guò)這個(gè)領(lǐng)域的第一個(gè) STARK 項(xiàng)目和開發(fā)工具才剛剛浮現(xiàn)。
防彈證明(Bulletproof)
防彈是另一種形式的零知識(shí)系統(tǒng),它不需要可信設(shè)置,但它確實(shí)比 SNARKs 和 STARKs 需要更長(zhǎng)的證明時(shí)間。這些證明方法目前已經(jīng)在門羅幣中實(shí)施——實(shí)現(xiàn)速度快得令人咂舌,學(xué)術(shù)論文發(fā)表才 6 個(gè)月左右就開始實(shí)施。
防彈基于現(xiàn)有的 range proof 方法,可將多個(gè) range proof 合為一個(gè),且其數(shù)據(jù)比以往方法還要小。
有趣的是,防彈允許證據(jù)聚合,這意味著您可以通過(guò)多方計(jì)算,在同一時(shí)間收集和驗(yàn)證來(lái)自不同方的多個(gè)證據(jù)。在最近發(fā)表的文章中,Zether 防彈,被部署于智能合約隱私,而最近,摩根大通在其私有的、許可型的區(qū)塊鏈 Quorum 中添加了這些功能。
零知識(shí)證明系統(tǒng)面臨的挑戰(zhàn)
零知識(shí)證明要被廣泛采用,還面臨如下一些主要挑戰(zhàn):
證據(jù)設(shè)置時(shí)間(開發(fā)者工具 / 勞動(dòng)力準(zhǔn)備)
對(duì)于每個(gè)計(jì)算或場(chǎng)景,必須生成一組數(shù)學(xué)證明來(lái)實(shí)現(xiàn)編碼。到目前為止,市面上出現(xiàn)了幾種開發(fā)工具;不過(guò)這仍然需要一種具有挑戰(zhàn)性的專業(yè)技能。零知識(shí)領(lǐng)域(在很大程度上密碼學(xué)也如此)面臨的技能差距與量子計(jì)算領(lǐng)域相似,因?yàn)樵趶V泛采用之前,必須培訓(xùn)更多開發(fā)人員了解如何把一項(xiàng)應(yīng)用組合起來(lái)。
證據(jù)生成和驗(yàn)證時(shí)間 / 規(guī)模要求
零知識(shí)要求證明方生成一個(gè)證據(jù)供驗(yàn)證方驗(yàn)證。這兩項(xiàng)活動(dòng)都需要時(shí)間,近年來(lái)(實(shí)際上是近幾個(gè)月)這方面所需的時(shí)間已大大縮短,但這仍是大規(guī)模采用需要考慮的一個(gè)問(wèn)題。
證據(jù)的標(biāo)準(zhǔn)化
本文已經(jīng)解釋了生成證據(jù)的不同方法論,但每個(gè)方法都有相似的起點(diǎn)。標(biāo)準(zhǔn)化是必要的,它可以使零知識(shí)證明從臨時(shí)處理特定問(wèn)題,發(fā)展到處理更大范圍的相關(guān)問(wèn)題和場(chǎng)景。ZK 標(biāo)準(zhǔn)組織正在致力于解決相關(guān)問(wèn)題。
ZK-SNARK 可信設(shè)置需求
ZK-SNARKs 需要考慮的另一個(gè)因素是:在加密世界需要建立一個(gè)可信的設(shè)置,或者稱為「有毒廢物」。
前文講過(guò),在可信設(shè)置中,會(huì)生成一個(gè)隨機(jī)生成的「私鑰」,該私鑰是作為被保護(hù)的秘密,以便系統(tǒng)根據(jù)需要生成零知識(shí)證明,它是可信設(shè)置建立的基礎(chǔ)。然而,如果私鑰 / 有毒廢物被泄露,那么擁有私鑰的任何人都可以提供錯(cuò)誤的證據(jù)——這意味著他們可以提供證據(jù),聲稱他們知道某條信息,而實(shí)際上他們并不知道,這就是脆弱性所在。
記得吧,我們說(shuō)過(guò) ZK-STARKs 和防彈證明不需要可信設(shè)置,但今年剛發(fā)布的 Sonic 是一個(gè)新的方法論,它可為 ZK-SNARKs 的可信設(shè)置提供一個(gè)通用的、可更新的引用字符串,這是針對(duì)更大的證據(jù)系統(tǒng)而提出的一種簡(jiǎn)化可信設(shè)置的解決方案。
一點(diǎn)感觸
在私人產(chǎn)業(yè),我們幾乎還沒(méi)有開始評(píng)估和理解零知識(shí)證明系統(tǒng)最適合在什么地方使用,以及哪種類型的證據(jù)最適合在什么情況下使用。要知道,行業(yè)的大部分精力仍在研究網(wǎng)絡(luò)安全從哪里開始著手,更不用說(shuō)如何將零知識(shí)納入這一戰(zhàn)略了。
在公共領(lǐng)域,零知識(shí)證明在速度和規(guī)模方面的快速發(fā)展,無(wú)疑會(huì)給關(guān)注相關(guān)領(lǐng)域的受眾留下深刻印象,但在加密貨幣領(lǐng)域,更大范圍的受眾迄今為止并沒(méi)有對(duì)這種隱私解決方案進(jìn)行資源投入,這一點(diǎn)可以從保護(hù)隱私的區(qū)塊鏈的低參與度而得到證明。
當(dāng)然,公平地說(shuō),智能合約的隱私解決方案仍處于非常初級(jí)的階段(簡(jiǎn)單交易還好一點(diǎn)),人們期望,這將使公共區(qū)塊鏈加速采用隱私保護(hù)方法。
結(jié)論
上面詳細(xì)介紹的零知識(shí)證明系統(tǒng),只是密碼學(xué)領(lǐng)域正在發(fā)生的故事的一部分。還有其他形式的零知識(shí)證明,如 ZK-SHARKs 和 Mimblewimble。在密碼學(xué)的其他領(lǐng)域也有一些有趣的發(fā)展,比如完全同態(tài)加密和量子密碼學(xué)。
零知識(shí)證明和密碼術(shù)所提供的隱私和保密性,在某種程度上是疊加的,它在社會(huì)中的作用取決于你如何衡量它。
對(duì)于希望保護(hù)個(gè)人資料的個(gè)人或保護(hù)商業(yè)秘密的公司,它是一種權(quán)利,給那些不想傷害它的機(jī)構(gòu)一種義務(wù),就像那些享有言論自由的人被懇求不要用它來(lái)傷害他人一樣。
對(duì)政府而言(理想情況下),它是一種責(zé)任,因?yàn)樯婕暗酱蠖鄶?shù)公民的權(quán)利,公民希望并相信,政府將用一種方式既允許我們保護(hù)自己的隱私,又保護(hù)我們免受惡意行為者濫用隱私的侵害;然而在現(xiàn)實(shí)中,我們知道這種情況在今天是不可能存在的。
盡管如此,密碼學(xué)的目標(biāo)在這兩個(gè)領(lǐng)域都是存在的,這樣一個(gè)社會(huì)才能真正實(shí)現(xiàn)自由:自由地保護(hù)信息的隱私,同時(shí)又不用擔(dān)心濫用隱私造成傷害??紤]到密碼學(xué)在過(guò)去幾個(gè)世紀(jì)的歷史,未來(lái)某一天,伴隨著將被理解的恰當(dāng)?shù)臄?shù)學(xué)和科學(xué)進(jìn)展,密碼學(xué)或許能幫助世界實(shí)現(xiàn)這樣的目標(biāo),這一期望似乎并不瘋狂。
評(píng)論