You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求无需可信第三方的双玩家零知识卡牌洗牌初始化方案

无可信第三方的双玩家零知识卡牌洗牌协议方案

核心优化思路

把原协议中第三方负责的「盐值选取、双重加密、洗牌」核心操作,拆分为双玩家协作的可验证流程:

  • 用承诺+公开验证实现可随机洗牌,确保双方无法篡改牌序且能互相验证合法性
  • 用双盲密钥映射替代第三方的双重加密,确保只有拿到对应密钥组合才能解密牌面
  • 盐值由双方共同生成并验证,避免单方控制

初始化(洗牌)流程

  1. 密钥与盐值准备

    • 玩家1生成52对非对称密钥对(PK1-1~PK1-52, SK1-1~SK1-52),生成随机盐值S1,将所有PK1-*和Hash(S1)(盐值的哈希)发送给玩家2
    • 玩家2生成52对非对称密钥对(PK2-1~PK2-52, SK2-1~SK2-52),生成随机盐值S2,将所有PK2-*和Hash(S2)发送给玩家1
    • 双方交换完公钥和盐哈希后,各自公开原始盐值S1、S2,对方验证哈希一致性,确认盐值未被篡改。最终全局盐值S = S1 || S2(字符串拼接)
  2. 第一轮加密与乱序

    • 玩家1将52张原始卡牌(A♣~K♠)分别与S拼接后,用自己的52个公钥PK1-*加密,得到加密集合E1 = {Enc(PK1-i, Card_j + S)},每个Card_j对应唯一的PK1-i(随机映射,玩家1自行记录映射关系但不公开)
    • 玩家1对E1进行随机乱序,得到乱序集合E1_shuffled,发送给玩家2
  3. 第二轮加密与可验证洗牌

    • 玩家2收到E1_shuffled后,对每个加密项用自己的52个公钥PK2-*二次加密,得到E2 = {Enc(PK2-k, E1_shuffled_i)},每个E1_shuffled_i对应唯一的PK2-k(随机映射,玩家2自行记录)
    • 玩家2生成1-52的随机置换π,先对π生成承诺Commit(π)(用哈希承诺或对称加密承诺均可),将承诺发送给玩家1
    • 玩家1确认收到承诺后,玩家2将E2按照π排序得到最终洗牌牌堆Deck,同时公开置换π和Deck
    • 玩家1验证:
      • 承诺Commit(π)与公开的π一致,确认置换未被篡改
      • Deck中的每个元素确实是E2中对应位置的元素按π排列的,确认洗牌操作合法
  4. 密钥映射的加密共享

    • 玩家1将自己的密钥映射表(PK1-i → Card_j + S)用玩家2的公钥加密,生成加密分片发送给玩家2;玩家2同理,将自己的密钥映射表(PK2-k → E1_shuffled_i)用玩家1的公钥加密后发送给玩家1
    • 双方各自保存自己的私钥集合,以及对方加密后的映射分片,确保只有抽牌时配合才能解密牌面

抽牌流程(以玩家1抽牌为例)

  1. 玩家2从Deck顶部取加密项D_top,通过自己的映射表找到对应的私钥SK2-k,将SK2-k发送给玩家1,同时标记该私钥已使用
  2. 玩家1用SK2-k解密D_top,得到E1_shuffled_i,然后遍历自己的私钥SK1-*尝试解密,直到得到Card_j + S
  3. 玩家1用全局盐值S移除偏移,得到真实卡牌Card_j,同时标记对应的SK1-*已使用
  4. 玩家1打出该牌时,公开SK1-*和SK2-k,玩家2验证:
    • 用PK1-i加密Card_j + S,得到的结果与E1_shuffled_i一致
    • 用PK2-k加密E1_shuffled_i,得到的结果与D_top一致
    • 确认两张密钥均未被重复使用,验证卡牌合法性

公平性保障

  • 盐值防篡改:通过「哈希前置公开+事后验证」,确保双方无法私自修改盐值,避免单方控制卡牌偏移
  • 洗牌可验证:玩家1能确认玩家2的洗牌操作是随机且未篡改的,无法故意安排牌序
  • 牌面双盲性:双方单独无法获取对方的密钥映射关系,无法提前解密任何牌面
  • 密钥去重:双方各自记录已使用的私钥,确保每张牌仅被抽取一次

内容的提问来源于stack exchange,提问作者JP.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 09:47:49