4. 多方安全计算中的身份认证与授权
多方安全计算(MPC)与单机系统最大的差别在于:计算不是在一台机器上完成的,而是由多个互不信任的参与方各自持有一部分秘密,通过协议协同算出结果。因此,MPC 的安全边界不仅取决于密码协议本身,还取决于“谁在参与计算、谁被允许发起任务、谁能在什么条件下读取结果”。身份认证与授权正是把密码学能力约束在正确主体上的治理层。
可以把 MPC 的访问控制理解为四层递进关系:节点身份解决“你是谁”,参与方准入解决“你能不能进这个计算域”,计算任务授权解决“你能发起或参与哪些任务”,动态权限协商与撤销解决“权限在运行中如何变化、如何收回”。四层缺一不可:只做身份认证而不做任务授权,任何合法节点都能读取全部结果;只做静态授权而不做撤销,一旦某方退出或失信,权限仍会残留。
节点身份:从“地址”到“可验证身份”
在传统分布式系统中,节点身份常用 IP 地址或主机名标识,但 MPC 场景下这远远不够——IP 可以被伪造,主机名可以被劫持。MPC 节点身份需要满足三个条件:唯一性(每个参与方有且仅有一个身份标识)、可验证性(其他方能够独立验证该身份的真实性)、可绑定性(身份与密钥、证书、硬件背书绑定)。
工程上常见的做法是:每个参与方在加入计算域前,由所属组织的 CA 签发一张 X.509 证书,证书主题中包含节点 ID、组织标识和公钥指纹;节点间建立连接时执行双向 TLS 握手,双方互相验证证书链。对于跨组织场景,还可以引入 DID(去中心化标识符)或联盟链上的注册合约,把节点公钥指纹写入链上,其他方通过链上记录验证身份,避免单一 CA 被攻破导致全域名单失效。
一个容易被忽略的细节是:MPC 协议中节点身份必须与协议消息中的参与方编号(party ID)严格绑定。例如在三方半诚实协议中,P0、P1、P2 各自对应一个证书指纹,协议消息在传输层完成身份校验后,还要在应用层校验消息头中的 party ID 与证书身份一致,防止中间人替换参与方编号。
参与方准入:计算域入口的策略执行
身份认证解决“你是谁”,准入控制解决“你能不能进这个计算域”。准入策略通常包括:白名单/黑名单校验(该组织是否被允许参与)、合规资质检查(是否具备数据处理资质、审计是否在有效期内)、数据分级标签匹配(该参与方被允许接触的数据级别是否覆盖本次计算所需级别)。
准入通过后,系统签发一个准入令牌(admission token),令牌中携带参与方 ID、允许的数据级别、有效期和签名。后续所有计算任务请求都必须携带该令牌,任务调度器在收到请求时先验证令牌签名和有效期,再进入任务授权环节。这样做的价值在于:把“能不能进”和“能做什么”解耦,准入令牌只证明参与方有资格进入计算域,具体任务权限由下一层单独判定。
计算任务授权:最小权限与任务绑定
任务授权是 MPC 治理中最容易出问题的环节。常见错误是“一旦准入,即可参与所有任务”。正确的做法是任务级最小权限:每个计算任务在创建时明确声明参与方集合、输入数据范围、输出可见性策略和有效期,授权决策基于“参与方身份 + 任务声明 + 策略规则”三者匹配。
例如,某联合风控任务声明:参与方为银行 A、银行 B 和征信机构 C;输入数据范围为 A 的信贷记录、B 的交易流水、C 的征信评分;输出仅对 A 和 B 可见聚合后的风险分数,C 不可见最终结果;任务有效期 24 小时。当 C 发起任务请求时,调度器检查其准入令牌中的数据级别是否覆盖征信评分,再检查任务声明中 C 的角色是否为“数据提供方而非结果接收方”,两项均满足才签发任务授权凭证。
任务授权凭证建议采用可验证凭证(VC)或签名令牌形式,包含任务 ID、参与方列表、权限范围、签发时间和过期时间。参与方在协议执行过程中,每次发送消息前可校验对方凭证是否覆盖当前任务,防止凭证被挪用到其他任务。
动态权限协商与撤销
MPC 计算可能持续数小时甚至数天,期间参与方的权限状态可能发生变化:某参与方需要临时提升权限以读取中间统计量,某参与方因安全事件被要求立即退出,某数据提供方要求缩小输出范围。这些都需要动态权限协商与撤销机制。
协商通常采用“请求—审批—生效”三步:发起方提交权限变更请求(如将输出可见性从“仅 A、B”改为“A、B、C”),策略引擎根据预定义规则判断是否需要人工审批,审批通过后签发新的授权凭证并通知所有参与方。协商过程本身要记录审计日志,包括请求方、变更内容、审批人、生效时间。
撤销比协商更复杂,因为 MPC 协议可能已经执行到中途。撤销策略需要区分三种情况:一是节点退出但计算可继续(如 3 方中 1 方退出,剩余 2 方无法完成原协议,需终止任务);二是节点失信但计算可重启(撤销其凭证,重新选择参与方并重新执行协议);三是权限降级(如某方不再允许读取最终结果,但可继续参与计算)。撤销生效后,系统需要执行密钥轮换,确保被撤销方无法利用旧密钥解密后续消息;同时更新所有参与方的本地策略缓存,避免因缓存不一致导致撤销延迟。
一个可参考的任务授权检查清单
在实际部署中,可以用以下检查项快速判断任务授权是否完整。该清单为示例性参考,具体字段需根据组织策略调整。
| 检查项 | 判断依据 | 不通过时的处理 |
|---|---|---|
| 参与方身份有效 | 证书未过期、未吊销,双向 TLS 握手成功 | 拒绝连接,记录审计事件 |
| 准入令牌有效 | 令牌签名正确、在有效期内、数据级别覆盖任务需求 | 拒绝任务请求,提示重新申请准入 |
| 任务声明匹配 | 参与方在任务声明的参与方集合中,角色与权限一致 | 拒绝授权,返回不匹配字段 |
| 输出可见性合规 | 请求方在输出可见方列表中,且数据分级允许 | 仅返回脱敏或聚合结果,或拒绝 |
| 权限版本一致 | 所有参与方权限版本号相同,无待生效的撤销指令 | 暂停计算,触发权限同步 |
总结来看,MPC 中的身份认证与授权不是一次性配置,而是一个持续运行的治理过程。节点身份提供可验证的参与主体,准入控制过滤不合格参与方,任务授权把权限收敛到具体计算,动态协商与撤销保证权限随环境变化而调整。四层协同,才能让 MPC 在“互不信任”的前提下安全地完成计算。