a329d4906b
- 方案文档: AVCC 体系建设、IPTV TCS 需求(0-req)/PRD(1-prd)/任务(2-task)/二三四期任务 - tcs-iptv: Go 后端(哈希SDK/MA码生成/可信数据空间mock/业务编排/HTTP API+HMAC鉴权) - web-console: React+AntD 监管大屏(角色工作台/全流程演示/监管片库) - 一剧一码+集级哈希, 集级下架/恢复, 全栈测试通过
6.5 KiB
6.5 KiB
第十章 C2PA 与第三方系统对接详细设计
版本:V1.0
基于文档:《AIGC-Hub智视码(AVCC)体系建设方案 V2.0》
本章详细定义了 AIGC-Hub 与外部系统(AI 工具、ZIIOT 根节点、联盟链底链)的底层对接实现逻辑,为 SDK 开发组和中间件开发组提供编码依据。
10.1 C2PA 水印 SDK 内部实现与工具对接
SDK 的核心目标是:在 AI 生成的图片/视频文件中,非破坏性地注入符合 C2PA 标准的元数据(Manifest),并包含 MA 专属扩展字段。
10.1.1 核心签名流程设计(基于 Rust c2pa-rs)
生成内容凭证的步骤:
- 构造 Claim:收集生成环境信息(模型名、工具版本、时间戳)。
- 附加 Assertions:
- 基础哈希断言 (
c2pa.hash.data) - 训练数据来源断言 (
c2pa.training-mining) - MA 专属断言 (
ma.avcc.fragment)
- 基础哈希断言 (
- 加载签名密钥:使用广电云颁发的 CA 证书或创作者关联的证书。
- 签名并嵌入:计算文件哈希,用私钥对 Claim 签名,并将签名打包成 JUMBF 格式注入文件头部(如 MP4 的
uuidbox 或 JPEG 的APP11marker)。
10.1.2 AI 工具适配器 (Adapters) 实现逻辑
以最流行的开源生图工具 Stable Diffusion WebUI (A1111) 为例,实现对接扩展:
# 伪代码:sd-webui-aigchub-extension/scripts/c2pa_hook.py
import modules.scripts as scripts
from modules.processing import Processed
from aigc_hub_sdk import C2PAManifestBuilder, MAExtension
class AIGCHubScript(scripts.Script):
def title(self):
return "AIGC-Hub C2PA 自动打码"
def show(self, is_img2img):
return scripts.AlwaysVisible
def postprocess(self, p, processed: Processed, *args):
# 拦截生成后的图像
for i, image in enumerate(processed.images):
# 获取用户配置的 MA 节点代码
platform_node = get_user_ma_node()
# 构建 MA 扩展
ma_ext = MAExtension(
platform_node=platform_node,
object_category="10.1300200.AIGC",
model_name=p.sampler_name, # 记录采样器
model_version=p.sd_model_name, # 记录模型名
generation_log_hash=hash(p.prompt) # 记录 Prompt 哈希
)
# 注入 C2PA 水印并覆盖原图
image_path = processed.images_paths[i]
builder = C2PAManifestBuilder()
builder.add_assertion(ma_ext)
builder.embed_in_place(image_path, private_key=get_local_key())
针对闭源云端工具(如 Runway/可灵),方案为:提供服务端 API,云端工具在渲染完成后,调用 AIGC-Hub 提供的 SDK 或 HTTP API 完成签名注入。
10.2 MA 根解析对接设计 (ZIIOT 对接)
广电云网关 (gateway-svc) 需要与 ZIIOT 全球根解析服务进行实时通信。
10.2.1 根解析协议与通信方式
- 协议:遵循 ISO/IEC 15459 标准的 RESTful API 或 Handle System 协议。
- 寻址逻辑:
当第三方请求解析
MA.156.10005.8361/10...时:gateway-svc发现前缀MA.156.10005属于本节点,直接在本地 PostgreSQL/Redis 查询。- 如果平台请求验证
MA.156.99999...(其他行业节点),gateway-svc将请求代理至 ZIIOT 根服务器。
10.2.2 根节点注册/同步逻辑
广电云需要将自己分配出去的三级节点(如各大平台的 MA.156.10005.xxxx)定期或实时同步给 ZIIOT,以保证全球解析的可达性。
sequenceDiagram
participant Gateway as 广电云网关
participant ZIIOT as ZIIOT根系统
Note over Gateway, ZIIOT: 平台节点注册同步
Gateway->>ZIIOT: POST /api/v1/ma/sync_node
Note right of Gateway: payload: {"node": "MA.156.10005.8361", "resolve_url": "https://gateway.aigc-hub.cn/resolve/"}
ZIIOT-->>Gateway: 200 OK
Note over Gateway, ZIIOT: 违规码全网吊销
Gateway->>ZIIOT: POST /api/v1/ma/revoke
Note right of Gateway: payload: {"avcc": "MA...CRD(xxx)", "reason": "blacklisted"}
ZIIOT-->>Gateway: 200 OK (同步全球黑名单)
10.3 联盟链底层对接设计 (ChainMaker/Fabric)
chain-svc 作为区块链代理,负责屏蔽底链细节,向上层业务提供易用的 REST/gRPC 接口。
10.3.1 链服务架构
[ Business Services: CodeSvc / SettlementSvc ]
│
REST / Kafka
▼
[ chain-svc (Go) ]
│
(交易拼装/签名/序列化)
│
[ ChainMaker Go SDK ]
│
gRPC
▼
[ ChainMaker Nodes (联盟网络) ]
10.3.2 异步上链与确认机制
由于区块链共识(如 TBFT/Raft)存在延迟(通常秒级),不能同步阻塞业务请求。
处理流程:
- 业务服务发送消息至 Kafka
topic.chain.tx.pending。 chain-svc消费消息,调用 SDKInvokeContract发起交易。chain-svc收到同步返回的tx_id,但这并不代表上链成功。chain-svc将tx_id写入本地表chain_records(status=pending)。chain-svc启动一个区块监听器 (Block Listener/Event Subscriber),订阅链上的新区块事件。- 当监听到该
tx_id被打包进区块且交易有效时,更新本地表为confirmed,并发送topic.chain.tx.confirmed消息。
Go 代码示意(订阅事件):
// 监听链上合约事件
func SubscribeChainEvents() {
ctx := context.Background()
// 订阅 AIGC_Copyright 合约的 "RegisterSuccess" 事件
ch, err := chainClient.SubscribeContractEvent(ctx, "AIGC_Copyright", "RegisterSuccess")
if err != nil {
log.Fatal(err)
}
for {
select {
case event := <-ch:
txId := event.TxId
payload := event.EventData
// 1. 更新数据库状态
db.UpdateChainRecordStatus(txId, "confirmed")
// 2. 发送 Kafka 消息通知 CodeSvc
kafkaProducer.Produce("topic.chain.tx.confirmed", buildMessage(txId, payload))
case <-ctx.Done():
return
}
}
}
10.3.3 链上隐私与权限控制
- 明文不入链:用户身份证号、敏感提示词(Prompt)、详细台词不能直接上链。上链的数据必须经过 SHA-256 哈希处理。
- 跨组织鉴权:智能合约内必须判断交易发起者的公钥/证书。例如
RecordUserRights(记录跨平台购买)只能由授权的platform_node或广电云节点发起,创作者无权直接调用。