Hash

基於零知識證明(IOT)的秘密社區形成

  • January 28, 2020

在閱讀了零知識證明和一些發酵時間之後,我想討論一個我想到的簡單方案。我應該提到,這不是出於商業需求或學術研究/研究。因此,請總體上承擔我的安全級別。

假設:

有n個參與者和m < n社區要形成。和m > 2

  1. 如果參與者在開始時設置了相同的密鑰並且也認識他們的同伴,那麼他們就形成了一個社區。
  2. 如果除了他的同伴之外沒有人知道任何參與者的社區,參與者就會秘密地形成一個社區(我們假設他們一開始並不知道彼此)。

考慮使用Counter(具有初始值的共享記憶體)或Timer方法。

計數器方法:

程序:

所有參與者都基於一些鹽來散列他們的密鑰。目標是當他們廣播散列時,單個社區內的參與者必須廣播不同的散列值(不等於兩個散列),否則它們將被所有參與者(作為單個社區內的參與者)發現。salt 定義為目前計數器值與下一個計數器值之間的數字,以相對較小的粒度隨機選擇,因此同一社區內的兩個參與者發生衝突的可能性很小,例如如果 Counter 是自然數,則第一個值為 0,如果是目前值,則下一個值為 1,一輪的鹽來自[0, 0.0001, 0.0002, …, 1]. 在第 j 輪廣播之後:

  1. C(i)(社區 i)的參與者對他們的密鑰進行雜湊處理,考慮到 之間的所有可能的鹽[0, 0.0001, 0.0002, …, 1],因此他們為他們的密鑰計算 1000 個雜湊值並將結果儲存在安全的內部儲存器中。

current counter(從“ ”和“ ”之間選擇的隨機鹽current counter + 1,碰撞機率為 0.0001)

  1. 的每個參與者C(i)從 1000 個雜湊的秘密表中隨機選擇一個值。
  2. 網路中的每個參與者都將他計算的雜湊值廣播給所有參與者。

在這種情況下,其他參與者在廣播時以 0.0001 的機率接收到屬於同一社區的一對(相同的兩個雜湊值)發現的雜湊值。

  1. 參與者C(j)將接收到的(n-1)每個雜湊值與儲存在秘密記憶體表中的其他1/0.0001加鹽雜湊值進行比較,他們肯定會在一段時間後發現他們的同伴。

社區所有參與者的最大發現時間為: (n) * 1000。該計算可以並行進行。

這樣,所有社區{C0, …, Cm}都是秘密形成的。

注意:我在物聯網的背景下提到了這一點,但顯然它非常抽象。

現在的問題是:什麼是缺陷?以及如何解決這個問題?

編輯1:

我想我應該閱讀一下我剛剛知道的社會主義百萬富翁問題。

編輯2:

這可以使用以下安全方式完美實現:Diffie-Hellman 交換

定義社區的密鑰有多大?

如果它是微不足道的,比如說一個 1-100 之間的數字,那麼攻擊者可以輕鬆計算 100.000 個雜湊來了解每個使用者所在的社區。

如果秘密s很長,比如 64 個字節,那麼我看不到為每個選項生成 1000 個雜湊值的用處。那麼最好只發送您的雜湊H(s+n),並使用您使用的隨機隨機數n(因為知道隨機數和雜湊不會幫助其他人知道秘密)。

引用自:https://crypto.stackexchange.com/questions/77148