零知識有條件支付的證明問題?

這樣一篇關於零知識有條件支付的文章:

零知識有條件支付

文中「我以比特幣塊鏈之外的方法告訴你Ex、Hk、Y,然後證明我如實地執行了程序。」是怎麼實現的?


刪了重寫。

首先

你能把任何計算機程序轉換成零知識證明,這點已經被證明。

構造一個計算機程序,程序的內容是這樣的:

Program(K,Ex,H()) =&> [Ex,Hk,Y]{
Hk=SHA256(K);
Y=H(UNAES(Ex,K));
return [Ex,Hk,Y];
}

捕捉該程序,命名為P()。

將程序P()轉換成零知識證明。

零知識證明的效果是:

證明我掌握著特定輸入K,Ex,H(),它進入程序P()之後會得到輸出Ex,Hk,Y。

並且在證明過程中,K、Ex不會暴露。

——————

題主的疑問就在這裡。

此處的零知識證明,不是證明我有輸入X,可以得到輸出Y,

而是證明我有輸入K,Ex,可以得到輸出Ex,Hk,Y。

這就證明了我的Ex解密之後確實是是H()=Y的解,而不是瞎編的。

待解的問題H(),是P()的子程序。

對H(X)==Y的證明已經包含在對P()的零知識證明之中。

——————

有問題H()=Y,需要特解X,我想出售X。

但我不能直接告訴買家X,以免買家不給我錢;

買家也不能直接給我錢,以免我不告訴買家X。

所以我用K加密X得到Ex、散列K得到Hk,將Ex和Hk告訴買家,

現在買家需要驗證我是否有Ex和K滿足Y==H(UNAES(Ex,K))。

我構建了程序P(K,Ex,H())=&>[Ex,Hk,Y]並將其轉換為零知識證明,期間我的K始終處於保密狀態。

買家得到證明之後,確認收到的Ex、Hk無誤,然後他可以構造腳本(比特幣合同,驗證Hk):

當我廣播這個合同腳本,外加一個K滿足SHA256(K)==Hk時候,交易成功,我收到錢,而買家用我廣播的K解開Ex,得到X,一手交錢一手交貨。

這太他媽酷了。

又及,別人隨便說兩句我就要用一下午去理解,真是聽君一席話,要讀十年書。


推薦閱讀:

如何看待2017年1月初這一輪比特幣上漲?
如果比特幣挖礦可以賺錢,為什麼顯卡廠商不壓著礦卡自己去做?
比較穩定靠譜的比特幣交易平台是哪家?
請問如何看待迅雷新推出的玩客幣?
BTC幣海外交易平台?

TAG:數學 | 信息安全 | 密碼 | 比特幣Bitcoin | 密碼加密 |