【開發智能合約 - 密碼學系列】零知識證明Ep.1 - 益智又有趣的機制

閱讀時間約 4 分鐘

什麼是零知識證明(Zero-knowledge proof)

是一種密碼學的概念,用於在不揭示具體信息的情況下,證明某個主張的正確性。它允許一方(稱為證明者)向另一方(稱為驗證者)證明某個陳述的真實性,而無需透露任何關於陳述的具體細節..., 這根本文字天書啊,底下讓我們用白話文來說一下唄!
「我必須向你證實我是誰,但我又不能直接告訴你我是誰...」、「傳統的證明與零知識證明,兩者都在證明一件事情,但過程卻很不一樣...」。
這些邏輯就是在詮釋零知識證明(Zero-knowledge proof)。
甚至我們之前介紹的「【認證與授權】曇花一現的OTP如何保護我們的資產」當我們收到驗證碼之後,系統根據這組驗證碼間接的識別了身分,這也是零知識驗證概念中的一種案例。
其實零知識證明早在密碼學就已經存在的一種技術,隨著區塊鏈的發展熱度而被關注,加上區塊鏈的特性,這項技術正好補足這一塊。

運作流程

經典的色盲遊戲

假設有一個色盲遊戲,其中遊戲主持人選擇一個顏色,然後玩家需要通過提問來猜測該顏色是什麼,玩家可以問主持人關於顏色的特性,例如:這個顏色是紅色的嗎?這個顏色比另一個顏色深嗎?...等問題。
這裡就可以應用零知識證明的概念。假設主持人知道答案是紅色,但玩家是色盲的,無法正確識別顏色。主持人可以使用零知識證明來證明自己確實知道答案是紅色,而不需要直接告訴玩家答案。
在這種情況下,主持人可以使用零知識證明的協議,例如zk-SNARK(Zero-Knowledge Succinct Non-Interactive Argument of Knowledge),通過生成證明來向玩家展示自己知道答案是紅色的事實,而不洩露任何有關答案的具體信息。
這樣,主持人可以在不揭示答案的情況下,向玩家證明自己確實知道答案是紅色,同時玩家也可以驗證主持人的證明的有效性,確信主持人並非瞎猜。
這個例子展示了零知識證明如何應用於一個經典的色盲遊戲,以證明一個事實而不揭示具體細節,從而保護隱私並確保證明的可靠性。

什麼樣的特性推進「區塊鏈」呢?

隱私性

在Web3.0的發展之下,零知識證明帶來了隱私性的特點,如果我們擁有某個數字資產但我們又不想暴露我們擁有什麼,此時就能夠用到零知識的技術,在不透漏重要關鍵訊息的前提下證明我們對資產的所有權。

擴展性

擴展性也是很重要的一環,當區塊鏈進行擴容時需要成千上萬臺機器重複進行計算工作,以達成共識協議,我們可以將一些計算工作交給零知識證明,在區塊鏈網路外部完成,而區塊鏈本身只負責共識與安全,大幅度降低了區塊鏈網路的成本,

有什麼缺陷?

● 計算量大:生成和驗證零知識證明需要大量計算,可能導致效能問題。
● 可信度問題:證明的可信度依賴於使用的庫或協議的正確性和安全性。
● 隨機性需求:某些協議需要可靠的隨機性,若不符合要求可能影響安全性。
● 特定假設限制:某些協議基於特定數學假設,若假設被破解,可能影響證明的可靠性。
● 隱私風險:在設計和實現過程中,可能存在隱私泄露的風險。
● 限制應用場景:某些場景下,證明過程可能過於耗時,限制了實用性。

結語

會介紹零知識證明主要是為了奠定未來的區塊鏈與AI訓練的基礎, 這些皆包含零知識驗證的影子, Zero-Shot Learning、Zero-Shot Classification…等興起的模型訓練方法皆提倡零知識的基礎下可以適應各個領域。
原來密碼學是如此有趣的一門章節,很多概念其實都出現在我們生活周遭,包括益智遊戲、桌遊...都可能包含密碼學的影子,甚至到了區塊鏈更是離不開它,如果我們能夠更懂它,相信除了開發軟體之外,也能帶來生活上的一些啟發,進而發展出另類的創新想法。
喜歡撰寫文章的你,不妨來了解一下:
歡迎加入一起練習寫作,賺取知識!
即將進入廣告,捲動後可繼續閱讀
為什麼會看到廣告
avatar-img
116會員
258內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
阿Han的沙龍 的其他內容
一套大型的智能合約通常都會拆分成許多小合約,並且透過匯入的方式拼裝而成,而這樣的匯入在Solidity世界中就是「Import」,就讓我們來看看「Import」到底怎麼運用吧! 假設目錄結構如下 example.sol other.sol 我們引入的方式就會是: import ‘./other.so
Mapping(映射)就像是字典表一樣,鍵入「什麼樣的標題」對應到「什麼樣的內容」,而標題就是從內容提煉出來的一種簡短快速識別的標的,透過這種方式,我們未來找尋內文時,只要先透過標題來查找,絕對會比直接找內文快上好幾倍,因此Mapping常常應用在查找事物上,它有點像一般程式語言的HashTable
雲時代的來臨, 我們過往使用的桌面版應用程式逐漸搬上雲端, 但也帶來了極大的挑戰, 因為一但上雲就代表著需要面臨著四面八方的使用者, 我們並不知道這些使用者是否都是君子, 一個不小心如果出現漏洞就可能被攻擊, 導致系統損壞, 進而影響商譽、營收, 對企業來說是極大的傷害, 為了避免這樣的狀況發生,
文章會根據以下議題進行說明與介紹,從幾個大面向延伸發展小議題並逐一說明。 去中心化:打破集中化權力造成的失衡與巨嬰壟斷現象,這也是Web 3.0發展的主軸。 2. 反壟斷和隱私保護: 個人資訊掌控於個人手中,中間不會經過平台,因此對個人隱私更為保障。 3. 數據所有權: 我們可以自行掌握數據,並決定
簡單的來說就是把同類型常用的功能打包在一起,讓其他開發者能夠重複使用,達到資源有效利用的效果,以軟體開發來說就是減少多餘的程式碼,而Solidity語言中,Library可以視為物件導向中的靜態類別,不需要產生實體就能使用,因此能有效的減少Gas。 當我們剛完成一份合約時難免因為設計尚未考慮周全而導
我們在前幾篇有介紹到介面的用途,都知道介面可以制定規格,建議可以先複習一下這一篇「【開發智能合約 — Solidity系列】實作篇Ep.10 — 標準化的介面(Interfaces)」,而這次來介紹一個非常抽象的概念,名為「抽象化合約」,果然如其名! 不太容易理解,這種合約跟介面非常相似,都可以用來
一套大型的智能合約通常都會拆分成許多小合約,並且透過匯入的方式拼裝而成,而這樣的匯入在Solidity世界中就是「Import」,就讓我們來看看「Import」到底怎麼運用吧! 假設目錄結構如下 example.sol other.sol 我們引入的方式就會是: import ‘./other.so
Mapping(映射)就像是字典表一樣,鍵入「什麼樣的標題」對應到「什麼樣的內容」,而標題就是從內容提煉出來的一種簡短快速識別的標的,透過這種方式,我們未來找尋內文時,只要先透過標題來查找,絕對會比直接找內文快上好幾倍,因此Mapping常常應用在查找事物上,它有點像一般程式語言的HashTable
雲時代的來臨, 我們過往使用的桌面版應用程式逐漸搬上雲端, 但也帶來了極大的挑戰, 因為一但上雲就代表著需要面臨著四面八方的使用者, 我們並不知道這些使用者是否都是君子, 一個不小心如果出現漏洞就可能被攻擊, 導致系統損壞, 進而影響商譽、營收, 對企業來說是極大的傷害, 為了避免這樣的狀況發生,
文章會根據以下議題進行說明與介紹,從幾個大面向延伸發展小議題並逐一說明。 去中心化:打破集中化權力造成的失衡與巨嬰壟斷現象,這也是Web 3.0發展的主軸。 2. 反壟斷和隱私保護: 個人資訊掌控於個人手中,中間不會經過平台,因此對個人隱私更為保障。 3. 數據所有權: 我們可以自行掌握數據,並決定
簡單的來說就是把同類型常用的功能打包在一起,讓其他開發者能夠重複使用,達到資源有效利用的效果,以軟體開發來說就是減少多餘的程式碼,而Solidity語言中,Library可以視為物件導向中的靜態類別,不需要產生實體就能使用,因此能有效的減少Gas。 當我們剛完成一份合約時難免因為設計尚未考慮周全而導
我們在前幾篇有介紹到介面的用途,都知道介面可以制定規格,建議可以先複習一下這一篇「【開發智能合約 — Solidity系列】實作篇Ep.10 — 標準化的介面(Interfaces)」,而這次來介紹一個非常抽象的概念,名為「抽象化合約」,果然如其名! 不太容易理解,這種合約跟介面非常相似,都可以用來
你可能也想看
Google News 追蹤
Thumbnail
Hi 我是 VK~ 在 8 月底寫完〈探索 AI 時代的知識革命:NotebookLM 如何顛覆學習和創作流程?〉後,有機會在 INSIDE POSSIBE 分享兩次「和 NotebookLM 協作如何改變我學習和創作」的主題,剛好最近也有在許多地方聊到關於 NotebookLM 等 AI 工具
Thumbnail
國泰CUBE App 整合外幣換匯、基金、證券等服務,提供簡便、低成本的美股定期定額投資解決方案。 5分鐘開戶、低投資門檻,幫助新手輕鬆進軍國際股市;提供人氣排行榜,讓投資人能夠掌握市場趨勢。
Thumbnail
這篇我們來講一下還蠻重要也蠻常用到的一個自定義型別,叫:struct struct是來自於C/C++的結構,目的是把不同資料型態的參數串在一起,成為一個自定義的資料型態,我們也稱它是一個自定義的結構體。
此篇我們也來介紹另外一個也是蠻常用又蠻重要的Mapping,它和陣列有點像,但比較不同的是:它不能用迴圈的方式取出裡面所有的資料,但陣列可以,Mapping比較像是一個查詢系統,用key值可以取出裡面的value值。
Thumbnail
這篇我們來看一個在程式開發很常見也很常用的一個東西:Array 陣列 Array在所有的程式開發中還蠻常見的,也一定會出現,因為有很多的資料都會是一長串的,需要有一個物件來去做集中管理。
在寫程式裡面,錯誤的檢查和處理是一定要有的,也是相對重要的,但Solidity裡面並沒有ErrorMessage這種東西,有的是Require()、Revert()、Assert()這三個函數,作用大概也跟ErrorMessage差不多,這裡介紹這三種函數的用法
我們知道function除了四種可見度 (visibility) 之外,還有三種比較常見的函式修飾詞(view、pure、payable),這篇就也來認識一下這三種函式修飾詞是做什麼用的吧。
Thumbnail
事件(Event)在整個智能合約開發裡面是很常見也很常出現的應用,所以這篇我們就來說說Event到底該怎麼寫、怎麼應用。
Thumbnail
繼承是智能合約開發很常見也很重要的一種方法,繼承主要是子合約可以從父合約中繼承所有的屬性和方法。 繼承寫法很簡單,就是在子合約後面加入"is"父合約的名稱就可以了
Thumbnail
這篇我們來談談有關Solidity Function visibility(能見度) Solidity的function visibility有四個關鍵字(private、internal、external或public)。
Thumbnail
所以寫程式的人都知道的一句話:「Hello World」,每一個學程式語言開始的時候都是從這句話開始的,我們也不免俗的來上這一句,從Hello World來看看智能合約入門是個什麼樣子。
Thumbnail
當有了初步的認識後,在要開始寫程式之前當然是要選擇用什麼IDE。 如果是線上IDE的話可以用Remix這是一個線上的Solidity IDE,可以用來撰寫Solidity 但我個人是比較習慣微軟的Visual Studio Code(之後簡稱VS Code)來撰寫,兩者其實都可以,看個人習慣。
Thumbnail
Hi 我是 VK~ 在 8 月底寫完〈探索 AI 時代的知識革命:NotebookLM 如何顛覆學習和創作流程?〉後,有機會在 INSIDE POSSIBE 分享兩次「和 NotebookLM 協作如何改變我學習和創作」的主題,剛好最近也有在許多地方聊到關於 NotebookLM 等 AI 工具
Thumbnail
國泰CUBE App 整合外幣換匯、基金、證券等服務,提供簡便、低成本的美股定期定額投資解決方案。 5分鐘開戶、低投資門檻,幫助新手輕鬆進軍國際股市;提供人氣排行榜,讓投資人能夠掌握市場趨勢。
Thumbnail
這篇我們來講一下還蠻重要也蠻常用到的一個自定義型別,叫:struct struct是來自於C/C++的結構,目的是把不同資料型態的參數串在一起,成為一個自定義的資料型態,我們也稱它是一個自定義的結構體。
此篇我們也來介紹另外一個也是蠻常用又蠻重要的Mapping,它和陣列有點像,但比較不同的是:它不能用迴圈的方式取出裡面所有的資料,但陣列可以,Mapping比較像是一個查詢系統,用key值可以取出裡面的value值。
Thumbnail
這篇我們來看一個在程式開發很常見也很常用的一個東西:Array 陣列 Array在所有的程式開發中還蠻常見的,也一定會出現,因為有很多的資料都會是一長串的,需要有一個物件來去做集中管理。
在寫程式裡面,錯誤的檢查和處理是一定要有的,也是相對重要的,但Solidity裡面並沒有ErrorMessage這種東西,有的是Require()、Revert()、Assert()這三個函數,作用大概也跟ErrorMessage差不多,這裡介紹這三種函數的用法
我們知道function除了四種可見度 (visibility) 之外,還有三種比較常見的函式修飾詞(view、pure、payable),這篇就也來認識一下這三種函式修飾詞是做什麼用的吧。
Thumbnail
事件(Event)在整個智能合約開發裡面是很常見也很常出現的應用,所以這篇我們就來說說Event到底該怎麼寫、怎麼應用。
Thumbnail
繼承是智能合約開發很常見也很重要的一種方法,繼承主要是子合約可以從父合約中繼承所有的屬性和方法。 繼承寫法很簡單,就是在子合約後面加入"is"父合約的名稱就可以了
Thumbnail
這篇我們來談談有關Solidity Function visibility(能見度) Solidity的function visibility有四個關鍵字(private、internal、external或public)。
Thumbnail
所以寫程式的人都知道的一句話:「Hello World」,每一個學程式語言開始的時候都是從這句話開始的,我們也不免俗的來上這一句,從Hello World來看看智能合約入門是個什麼樣子。
Thumbnail
當有了初步的認識後,在要開始寫程式之前當然是要選擇用什麼IDE。 如果是線上IDE的話可以用Remix這是一個線上的Solidity IDE,可以用來撰寫Solidity 但我個人是比較習慣微軟的Visual Studio Code(之後簡稱VS Code)來撰寫,兩者其實都可以,看個人習慣。