Files
MAcode/docs/10-C2PA与第三方对接详细设计.md
selfrelease a329d4906b init: AIGC-Hub/AVCC 方案文档 + TCS-IPTV 内容可信锁定系统 MVP
- 方案文档: AVCC 体系建设、IPTV TCS 需求(0-req)/PRD(1-prd)/任务(2-task)/二三四期任务
- tcs-iptv: Go 后端(哈希SDK/MA码生成/可信数据空间mock/业务编排/HTTP API+HMAC鉴权)
- web-console: React+AntD 监管大屏(角色工作台/全流程演示/监管片库)
- 一剧一码+集级哈希, 集级下架/恢复, 全栈测试通过
2026-06-14 16:50:31 +08:00

168 lines
6.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 第十章 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
生成内容凭证的步骤:
1. **构造 Claim**:收集生成环境信息(模型名、工具版本、时间戳)。
2. **附加 Assertions**
- 基础哈希断言 (`c2pa.hash.data`)
- 训练数据来源断言 (`c2pa.training-mining`)
- MA 专属断言 (`ma.avcc.fragment`)
3. **加载签名密钥**:使用广电云颁发的 CA 证书或创作者关联的证书。
4. **签名并嵌入**:计算文件哈希,用私钥对 Claim 签名,并将签名打包成 JUMBF 格式注入文件头部(如 MP4 的 `uuid` box 或 JPEG 的 `APP11` marker)。
### 10.1.2 AI 工具适配器 (Adapters) 实现逻辑
以最流行的开源生图工具 **Stable Diffusion WebUI (A1111)** 为例,实现对接扩展:
```python
# 伪代码: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...` 时:
1. `gateway-svc` 发现前缀 `MA.156.10005` 属于本节点,直接在本地 PostgreSQL/Redis 查询。
2. 如果平台请求验证 `MA.156.99999...` (其他行业节点)`gateway-svc` 将请求代理至 ZIIOT 根服务器。
### 10.2.2 根节点注册/同步逻辑
广电云需要将自己分配出去的三级节点(如各大平台的 `MA.156.10005.xxxx`)定期或实时同步给 ZIIOT,以保证全球解析的可达性。
```mermaid
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 链服务架构
```text
[ Business Services: CodeSvc / SettlementSvc ]
REST / Kafka
[ chain-svc (Go) ]
(交易拼装/签名/序列化)
[ ChainMaker Go SDK ]
gRPC
[ ChainMaker Nodes (联盟网络) ]
```
### 10.3.2 异步上链与确认机制
由于区块链共识(如 TBFT/Raft)存在延迟(通常秒级),不能同步阻塞业务请求。
**处理流程:**
1. 业务服务发送消息至 Kafka `topic.chain.tx.pending`
2. `chain-svc` 消费消息,调用 SDK `InvokeContract` 发起交易。
3. `chain-svc` 收到同步返回的 `tx_id`,但这**并不代表上链成功**。
4. `chain-svc``tx_id` 写入本地表 `chain_records` (status=pending)。
5. `chain-svc` 启动一个**区块监听器 (Block Listener/Event Subscriber)**,订阅链上的新区块事件。
6. 当监听到该 `tx_id` 被打包进区块且交易有效时,更新本地表为 `confirmed`,并发送 `topic.chain.tx.confirmed` 消息。
**Go 代码示意(订阅事件):**
```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` 或广电云节点发起,创作者无权直接调用。