驗證內容,但不訂購
有沒有一種算法可以用來驗證密文的內容,但不能驗證元素的順序?
我在想一副牌可以洗牌,並且必須可以驗證牌組包含所有牌,但不知道它們的順序。
任何想法如何解決這個問題?
正如 Maeher & Codesinchaos 所指出的,您將需要研究零知識協議。霍普金斯大學的馬特·格林(Matt Green)寫了一篇易於理解的部落格文章,為您提供了一個這樣的例子,說明撲克很難。Claude Crepau 在 80 年代和 90 年代寫了大量關於 zk/mental poker 的文章;這是一篇論文的連結零知識撲克協議,可實現…的機密性
Simari 在這裡有一個很好的 zk入門:零知識協議入門
嗯,基本思想是創建或使用加密方案,在不知道每個加密的東西到底是什麼的情況下,您可以計算和辨識唯一記錄。
拿你的撲克牌。首先,不用看任何卡片的表面,您就可以輕鬆地計算它們並驗證它們至少來自相同風格的套牌。這是因為每張單獨的卡片都是可數的並且可以辨識為屬於特定風格的一副牌。在數據方面,您可以將數據作為列表的元素,分隔或以其他方式劃分為單個元素,並且這些元素將具有某種標題,您可以使用該標題將項目標識為屬於某個唯一集合。但是,您可能持有添加了 4 個小丑的 Pinochle 套牌,而不是撲克套牌,並且不知道其中的區別。為了能夠分辨出差異,您必須在不知道值的情況下對值有所了解。
有兩種基本類型的加密可以讓您完成此操作。一種是單向雜湊;這些價值觀在理論上不可逆轉地轉化為一種可以比較平等但沒有別的形式的形式。如果每個雜湊值都是唯一的,那麼您可以確信牌組的構成與撲克牌組足夠接近,可以將其用作一個牌組。另一種是“電子密碼本”密碼模式;插入相同算法的相同密鑰用於將明文的每個迭代片段轉換為密文,而不使用任何初始化向量或其他系統注入資訊。理論上,在不知道密鑰的情況下,你無法辨別明文,但假設每張卡的值都是這樣加密的,那麼每個密文應該是唯一的;重複密文表示重複的明文,因此是重複的卡片。實際的加密方案無關緊要 - 您可以使用凱撒密碼或 AES - 重要的是每張卡的值都以完全相同的方式獨立加密,除了一張卡的值、密鑰和加密方案之外不使用其他資訊。
編輯:您必須證明的最後一件事是,由於所有牌都是獨一無二的,每張牌都是您希望在撲克牌組中找到的牌(也就是說,沒有黑桃零)。這是棘手的部分,恕我直言,你不能以零知識的方式做到這一點。您必須了解密文是如何加密的,以便辨識有效的密文和無效的密文。