所謂的Zero-knowledge proof (零知識證明)

簡單來說就是 例如:

      我今天有一個秘密
      我要讓你知道我知道這個秘密
      但是如果我把秘密告訴你了
      那這就不是一個秘密了
      那我要如何向你證明我知道這個秘密
      卻又不能讓你知道這個秘密呢?
     
     這樣一個問題就是Zero-knowledge proof的問題

以下有一個簡單的問題:

今天在房子裡面有一群人 ,  需要在不透露每個人的所得之下

只由這群人 統計全部人所得的總合

那應該怎麼做咧?

歡迎大家踴躍提出解決方式
創作者介紹
創作者 BILLTSAO 的頭像
BILLTSAO

我是比爾曹

BILLTSAO 發表在 痞客邦 留言(4) 人氣()


留言列表 (4)

發表留言
  • good5209
  • 試玩

    看到這篇文章,覺得有趣
    以下提出一個可能方案:

    公眾表決一人為起始者A
    此A隨機選一金額,並將此數值與他自己的所得相加,將結果告訴B
    B將A的答案與自己的所得相加告訴C
    C類推之給D
    直到最後一人N,N將答案告訴起始者A,A將答案扣除一開始A隨機的數字
    所得答案即為所有人之總和
  • 訪客
  • 這個解決方式可以運作的前提是任兩方都不會互相勾結,如果A跟C勾結,則A跟C就可以算出B的所得。
  • 訪客
  • 加強版:
    公眾表決一人為起始者A
    此A隨機選一金額,並將此數值與他自己的所得相加,將結果告訴B
    此B隨機選一金額,並將此數值與A的答案與自己的所得相加告訴C
    C類推之給D
    直到最後一人N,N將答案告訴起始者A
    A將答案扣除一開始A隨機的數字後給B
    B扣除一開始B隨機的數字後給C
    C類推之給D
    直到最後一人N,N扣完後的金額即為所有人之總和

  • 我昰訪客
  • Re: 加強版
    假設B想得知A的所得,他可以和N勾結
    首先假設每一個人傳送的數字包括所得(p)和隨機(r) = (p+r)
    那A第一次送出的數字為(p_a+r_a),然後經過一圈到N,N送回給A的數字為(m = p_a+r_a+p_b+r_b+...+p_n+r_n),B要求N把這個數字告訴自己,然後再掌握A第二次送出的數字(m-r_a)。
    最後B可以透過計算(p_a+r_a) - ( m - ( m - r_a))=p_a,從而得知A的所得。

    我想更好的方式是打亂順序,第一次A把數送給B,到第二次A把數送給C等其他人。