iT邦幫忙

2023 iThome 鐵人賽

DAY 6
1
Web 3

淺談ZK Rollup系列 第 6

Day 06 - 零知識證明EP04:交互式零知識證明

  • 分享至 

  • xImage
  •  

在上次還有提到零知識證明的那個篇章中提到了零知識證明的問題必須要符合「很難被解出」與「很簡單被驗證」這兩項特性,知道了這兩項特性,我們便可以找出需要被證明的題目,之後便可以開始我們的零知識證明,那有什麼樣的題目符合這兩樣特性呢?老實說,其實還挺多這種題目的,如果你努力想想應該都可以想到幾個,而我這邊就舉電腦科學常會碰到的「身分認證」吧!以「身分認證」這個做為命題,讓我們來思考,如何達成零知識證明。
而在開始身分認證之前,因為身分認證會需要用到一種叫做「數位簽章」的技術,如果不太了解的可以參考我上一篇文章,那我們便開始吧!
https://cdn-icons-png.flaticon.com/512/1791/1791961.png

身分認證

為什麼說到身分認證是個符合零知識證明的命題呢?首先先搞清楚這個身分認證在做什麼,基本上這個題目就是在證明「我是擁有這把公鑰的主人」,所以會有一把公開的公鑰,我身為一個證明者要來向驗證者證明出我擁有這把公鑰對應的私鑰,我們先來檢查這個命題做為零知識證明的命題是否合適,我們可以依照是否擁有命題該有的兩個特性以及該命題需不需要有零知識證明中「零知識」這個特性做檢查,我們接下來一個一個來檢查吧!

  • 難以被解出
    要解出這個問題的確有點困難,畢竟我們很難從公鑰推出他的私鑰長什麼樣子,基本上,一個好的非對稱式加密系統沒辦法在短時間內,從他提供的公鑰推論出他的私鑰。
  • 容易被驗證
    這個問題顯然非常容易被驗證,驗證只需要將簽章使用公鑰解密後,對訊息做比對就好。
  • 驗證者只能知道命題為真,其他一無所知
    的確,驗證者只能知道證明者是這把公鑰的主人就夠了,不能額外知道他的私鑰長什麼樣子,因為一旦讓驗證者知道了,那麼可能會天下大亂,所有人的私鑰會到處跑。

所以從以上的檢查,可以發現這個題目相當適合拿來作為零知識證明的命題,那該如何進行證明呢?

交互式零知識證明

拿剛剛身分認證的題目進行零知識證明非常簡單,我相信聰明的你們肯定已經想到怎麼做了,就跟隨著以下的步驟:

  1. 首先,驗證者會先隨便挑一個亂數,也可以是一個隨便的東西,將他送給要證明的人。
  2. 要證明的人就用手上的私鑰對驗證者傳送過來的訊息做簽章,並將簽章還回去。
  3. 最後,驗證者將簽章使用公鑰進行還原,讓他與原本送出的訊息做比對。

一旦比對成功,就能證明說證明者就是擁有該公鑰的人了...嗎?不,還沒有,因為這套零知識證明的流程並沒有符合零知識證明三大特性中的 健全性 ,假設這個證明者是個壞人,他知道這個公鑰的主人是誰,於是他就照三餐去偷窺該主人傳送出去的訊息,由於網路世界的訊息都會帶有著簽章,他把這些訊息對應到的簽章都蒐集起來,並開始了這次的證明,一旦驗證者好死不死選到要證明者簽的東西,是原本該公鑰的主人已經簽過的訊息,這個壞人就可以拿出對應的簽名來去騙過這個驗證者。那該怎麼辦?很簡單,我們做多次一點就行了,只要我們選到該公鑰的主人沒簽過的訊息,這個壞人就沒辦法通過這次的證明,因此,這個零知識證明的過程會一直重複步驟1到步驟3的動作,而每做一次,證明者是假的的機率便會愈來愈小,直到他小到符合健全性的時候,那便是零知識證明完成的時候,因為這種的零知識證明,需要證明者與驗證者不斷的互動,就像打網球那樣,所以又被稱作是 「交互式零知識證明」
https://upload.wikimedia.org/wikipedia/commons/d/dd/Zkip_alibaba1.png
交互式零知識證明可以說是零知識證明最早被提出的模型,因為他相當的直觀,也非常容易實作,基本上就只要把互相溝通的協議定義出來,便可以開始執行了,也因為他非常容易理解,所以基本上在網路上用零知識證明作為關鍵字搜尋,通常都會搜尋到以阿里巴巴洞口作為舉例的零知識證明,那些都是所謂的「交互式零知識證明」,然而現實世界中都是用這種交互式零知識證明嗎?很可惜,大多使用零知識證明的情況都不是使用交互式零知識證明,為什麼呢?因為他擁有一些缺陷,至於有哪些缺陷呢?那就留給明天來探討了喔!


上一篇
Day 05 - 零知識證明SP02:數位簽章
下一篇
Day 07 - 零知識證明EP05:交互式零知識證明缺點
系列文
淺談ZK Rollup30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言