- 區塊鏈應用開發指南:業務場景剖析與實戰
- 熊麗兵 董一凡等
- 12字
- 2022-07-28 20:18:06
3.2 零知識證明使用場景案例
3.2.1 場景一:萬圣節糖果
故事是這樣的:一年一度的萬圣節到來,小麗和小明分別領取到了一定數量的糖果。他們想知道他們是否收到了相同數量的糖果,卻不想透露糖果的數量,因為他們不想彼此分享。
現在我們假設,他們袋子里可能裝有10、20、30個或40個糖果,如圖3-1所示。

圖3-1 萬圣節糖果
這時小明想了個辦法,為了比較他們擁有的糖果數量,小明拿到4把鑰匙和盒子,盒子上分別寫上10、20、30、40,分別對應糖果的數量。小明最后只保留了自己糖果數量跟盒子數字一樣的鑰匙,其他3把鑰匙就丟棄了(假設小明只保留了寫著20的盒子的鑰匙)。
然后,小麗在4張紙條上,其中一張寫上“+”,另外三張寫上“-”。然后,把寫有“+”的紙條放到跟自己糖果數量是相同數字的盒子里,其余紙條放到其他盒子(假設小麗把“+”放到寫著30的盒子)。
這時,小明回來后打開他有鑰匙的那個盒子(寫著20),然后看它是否包含“+”或“-”的紙條。
(1)如果紙條上寫著“+”,說明兩個人的糖果數量一致。
(2)如果紙條上寫著“-”,說明兩個人糖果數量不一致,但是并不知道對方糖果的具體數量。
(3)這里小明看到紙條上寫著“-”,意味著兩人的糖果數量不一樣,但是小明無法知道小麗的糖果數量。這時候,小麗看到小明手上拿著一張寫“-”的紙條,那她也知道兩人的糖果數量不一樣,但是也無法知道對方擁有糖果的確切數量。
上面這個過程,就是一個零知識證明。
ZKP(“零知識證明”的英文縮寫)允許我們證明自己在通信的另一“端”知道某個人的某個秘密(或許多秘密),而沒有實際透露出秘密。術語“零知識”源于以下事實:第一方沒有透露有關機密的信息(“零”),但是第二方(被稱為“驗證者”)確信第一方(被稱為“證明者”)知道有關機密。
推薦閱讀
- Python數據挖掘:入門、進階與實用案例分析
- Spark大數據分析實戰
- Oracle RAC 11g實戰指南
- 大數據算法
- 深入淺出MySQL:數據庫開發、優化與管理維護(第2版)
- Mastering Machine Learning with R(Second Edition)
- 跟老男孩學Linux運維:MySQL入門與提高實踐
- 圖數據實戰:用圖思維和圖技術解決復雜問題
- 云數據中心網絡與SDN:技術架構與實現
- Expert Python Programming(Third Edition)
- 企業大數據處理:Spark、Druid、Flume與Kafka應用實踐
- Swift Functional Programming(Second Edition)
- 數據挖掘與數據化運營實戰:思路、方法、技巧與應用
- SQL進階教程(第2版)
- Scratch Cookbook