你的手机已经拥有能够证明照片真实的硬件,但没有人使用它。
Source: Dev.to
请提供您想要翻译的完整文本内容(除代码块和 URL 之外),我将把它翻译成简体中文并保持原有的格式和 Markdown 语法。谢谢!
介绍
2025 年,Adobe 内容真实性倡议报告称,97 % 的组织遭遇了 AI 生成内容被用于对付它们——深度伪造、合成产品照片、伪造证据。
如今每部智能手机都内置了防篡改的加密芯片,但大多处于闲置状态:iOS 的 Secure Enclave、Android 的 StrongBox 或 TEE。这些硬件模块旨在以无法提取或伪造的方式对数据进行签名,然而它们在照片来源追溯方面却很少被使用。
C2PA – 媒体真实性标准
C2PA(内容真实性倡议)是一项由 Adobe、Microsoft、Intel 等公司支持的开放标准。它的工作方式类似于媒体文件的 HTTPS:一个加密清单直接嵌入 JPEG 中,包含以下信息:
- 拍摄图像的设备
- 时间戳和地点
- 完整的编辑历史
- 若任何像素被更改则失效的签名
徕卡、索尼和尼康已经推出了支持 C2PA 的相机,但移动平台——> 90 % 的照片都是在这些平台上拍摄的——几乎没有得到采用。
Source:
attestation‑photo‑mobile
attestation-photo-mobile 是一个 React Native 包,用于弥合这一鸿沟。它可以在文件 未写入磁盘之前 捕获照片、对其进行哈希、使用硬件支持的密钥进行签名,并嵌入完整的 C2PA 清单。
Architecture
- Native layer (Swift/Kotlin) – 访问硬件密钥库,在 Secure Enclave 或 StrongBox 中生成 ECDSA P‑256 密钥,并确保密钥永不离开硬件。
- Rust layer (
c2pa‑rs) – 构建 JUMBF 清单,计算资产哈希,并生成 C2PA 声明。(不推荐使用纯 JS 实现。) - React Native bridge – 暴露单一的
signPhoto(path)函数以及useAttestedCapturehook,负责密钥供应、位置预取和错误包装。
import { useAttestedCapture, saveToGallery } from '@rolobits/attestation-photo-mobile';
function CaptureScreen() {
const { signPhoto, isReady } = useAttestedCapture({
includeLocation: true,
appName: "My App",
nonce: "server-challenge-token",
});
const onCapture = async (photoPath) => {
// Sign and embed C2PA manifest
const signed = await signPhoto(photoPath);
// signed.trustLevel -> "secure_enclave" | "strongbox" | "tee"
// signed.embeddedManifest -> true
// signed.signature -> SHA‑256 hex of original asset
await saveToGallery({ filePath: signed.path });
};
}
Verifying the Output
生成的 JPEG 可以使用任何 C2PA 工具进行验证,例如:
cargo install c2patool
c2patool verify output.jpg
或上传至 verify.contentauthenticity.org。
Device Integrity Checks
在签名之前,SDK 会执行完整性检查:
- Jailbroken/rooted devices →
E_COMPROMISED_DEVICE - No Secure Enclave / StrongBox →
E_NO_TRUSTED_HARDWARE
这些行为可以通过 requireTrustedHardware 选项(true | false)进行控制。
真实场景
- 保险理赔 – 应用内的损坏照片通过设备 ID、位置和时间戳进行硬件签名;理赔员可以自动验证真实性。
- 市场列表 – 对汽车、房地产或租赁的已验证图片让买家确信照片真实且非 AI 生成。
- 现场检查 – 对建筑工地或设备审计的带时间戳、签名的照片提供防篡改的合规证据。
- KYC(了解你的客户) – 基于自拍的身份验证可以证明图像来源于真实设备,而非合成面孔。
路线图(v1 限制)
- 自签名证书 – 目前签名密钥没有 CA 链,因此验证者显示有效签名但“未知签名者”。归属信息因此缺失。下一步的重点是集成受信任的 CA。