基於零知識證明(IOT)的秘密社區形成
在閱讀了零知識證明和一些發酵時間之後,我想討論一個我想到的簡單方案。我應該提到,這不是出於商業需求或學術研究/研究。因此,請總體上承擔我的安全級別。
假設:
有n個參與者和
m < n
社區要形成。和m > 2
- 如果參與者在開始時設置了相同的密鑰並且也認識他們的同伴,那麼他們就形成了一個社區。
- 如果除了他的同伴之外沒有人知道任何參與者的社區,參與者就會秘密地形成一個社區(我們假設他們一開始並不知道彼此)。
考慮使用Counter(具有初始值的共享記憶體)或Timer方法。
計數器方法:
程序:
所有參與者都基於一些鹽來散列他們的密鑰。目標是當他們廣播散列時,單個社區內的參與者必須廣播不同的散列值(不等於兩個散列),否則它們將被所有參與者(作為單個社區內的參與者)發現。salt 定義為目前計數器值與下一個計數器值之間的數字,以相對較小的粒度隨機選擇,因此同一社區內的兩個參與者發生衝突的可能性很小,例如如果 Counter 是自然數,則第一個值為 0,如果是目前值,則下一個值為 1,一輪的鹽來自
[0, 0.0001, 0.0002, …, 1]
. 在第 j 輪廣播之後:
C(i)
(社區 i)的參與者對他們的密鑰進行雜湊處理,考慮到 之間的所有可能的鹽[0, 0.0001, 0.0002, …, 1]
,因此他們為他們的密鑰計算 1000 個雜湊值並將結果儲存在安全的內部儲存器中。
current counter
(從“ ”和“ ”之間選擇的隨機鹽current counter + 1
,碰撞機率為 0.0001)
- 的每個參與者
C(i)
從 1000 個雜湊的秘密表中隨機選擇一個值。- 網路中的每個參與者都將他計算的雜湊值廣播給所有參與者。
在這種情況下,其他參與者在廣播時以 0.0001 的機率接收到屬於同一社區的一對(相同的兩個雜湊值)發現的雜湊值。
- 參與者
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(因為知道隨機數和雜湊不會幫助其他人知道秘密)。