North9LLC/Signet

GitHub: North9LLC/Signet

一款在拍摄瞬间嵌入去中心化随机信标签名的水印 SDK,用于从源头证明照片的真实性和拍摄时间。

Stars: 1 | Forks: 0

# Signet 一个供相机应用嵌入以证明照片为真实的加密水印 SDK。 印记生成**在相机应用内部,于按下快门的瞬间完成**——在图像被编码或保存之前。这里没有任何后处理步骤。经过 Signet 认证的照片携带着不可伪造的加密证明,该证明派生自 [drand](https://drand.love/) 公共随机性信标(由 Cloudflare、EPFL、Protocol Labs 运营)。验证是二元的、公开的且非交互式的:要么数学验证通过,要么不通过。 ## 工作原理 ``` ┌─────────────────────────────────────────────────────────────────┐ │ Camera App │ │ │ │ 1. [Background thread, every 25s] │ │ signet_prefetch_round() → cache drand signature │ │ │ │ 2. [Shutter press — synchronous, < 5 ms] │ │ signet_stamp_pixels(raw_pixels, sig) │ │ ↓ invisible LSB watermark embedded │ │ │ │ 3. [Normal encode path] │ │ Encode stamped pixels → JPEG/HEIC/PNG → save to disk │ └─────────────────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────────────────┐ │ Verifier (anyone, anywhere) │ │ │ │ signet_verify_pixels(pixels) → VERIFIED (round + timestamp) │ │ or NOT VERIFIED │ └─────────────────────────────────────────────────────────────────┘ ``` **为什么要预取?** drand 每 30 秒发布一个新轮次。应用会在后台缓存签名,因此按下快门的瞬间即可完成——在拍摄时无需网络往返。 **为什么要在应用内进行?** 拍摄后的后处理会产生一个时间窗口,在此期间 AI 生成的图像可能会被提交以进行印记。在拍摄时刻于受信任的应用内嵌入印记可关闭此漏洞。该印记证明:*这些原始像素在此刻存在于该软件之中*。 ## SDK 集成 ### iOS ``` // AppDelegate or CameraViewController setup SignetSDK.shared.start() // begins background prefetch // Inside your AVCapturePhotoCaptureDelegate func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) { guard let pixelBuffer = photo.pixelBuffer else { return } SignetSDK.shared.stamp(pixelBuffer: pixelBuffer) // < 5 ms // ... encode and save as normal } // Verify any image if let result = SignetSDK.verify(pixelBuffer: pixelBuffer) { print("VERIFIED: \(result.dateString)") // e.g. "2026-04-25T06:00:00Z" } else { print("NOT VERIFIED") } ``` 参见 `sdk/ios/SignetSDK.swift`。 ### Android ``` // In your Application or Camera setup SignetSDK.start() // In your ImageCapture.OnImageCapturedCallback val bitmap = imageProxy.toBitmap() SignetSDK.stamp(bitmap) // < 5 ms, modifies in-place // ... encode and save // Verify any image val result = SignetSDK.verify(bitmap) if (result != null) { println("VERIFIED: ${result.isoTime}") } else { println("NOT VERIFIED") } ``` 参见 `sdk/android/SignetSDK.kt`。 ### C / C++ (任意平台) ``` #include "signet.h" // Background thread — call every 25 s char sig_hex[512]; uint64_t round; signet_prefetch_round(&round, sig_hex, sizeof(sig_hex)); // At shutter press — synchronous, no network signet_stamp_pixels(pixels_rgb, width, height, sig_hex); // Verification uint64_t verified_round, unix_time; int ok = signet_verify_pixels(pixels_rgb, width, height, &verified_round, &unix_time); // ok == 1 → VERIFIED, ok == 0 → NOT VERIFIED ``` 参见 `include/signet.h`。 ## 构建库 ``` # Shared library (.so / .dylib) cargo build --release # → target/release/libsignet.so (Linux) # → target/release/libsignet.dylib (macOS) # Static library (.a) — 用于嵌入到 iOS/Android NDK 构建中 cargo build --release # → target/release/libsignet.a # iOS XCFramework (arm64 设备 + x86_64 模拟器) cargo build --release --target aarch64-apple-ios cargo build --release --target x86_64-apple-ios xcodebuild -create-xcframework \ -library target/aarch64-apple-ios/release/libsignet.a \ -library target/x86_64-apple-ios/release/libsignet.a \ -output Signet.xcframework # Android NDK cargo build --release --target aarch64-linux-android cargo build --release --target armv7-linux-androideabi ``` ## CLI 参考工具 CLI 是一个参考实现和开发者工具——而非最终用户产品。 ``` # 为照片添加 Stamp (用于测试;实际应用在 pipeline 内添加 stamp) signet stamp photo.jpg # → photo_stamped.png # 验证 signet verify photo_stamped.png # → VERIFIED: round=6052808 time=2026-04-25 06:00:00 UTC # JSON 输出 (用于工具) signet verify photo_stamped.png --json # → {"verified":true,"round":6052808,"time":"2026-04-25 06:00:00"} # 未添加 Stamp 或 AI 生成的图像 signet verify suspect.jpg # → NOT VERIFIED: no valid Signet watermark found ``` ## 安全模型 **来自 CLI 工具的印记仅用于开发级别。** 设备密钥以明文软件的形式存储在 `~/.signet/device.key` 中。已 Root 的设备或被盗的备份会暴露该密钥。生产环境需要硬件支持的密钥: - **iOS:** Secure Enclave 集成(尚未实现;参见 `sdk/ios/SignetSDK.swift` 中的 TODO) - **Android:** StrongBox 集成(尚未实现;参见 `sdk/android/SignetSDK.kt` 中的 TODO) **设备注册需要带外注册表提交。** CLI 会打印您的公钥和注册表 URL。您必须将密钥提交到 `https://registry.signet.dev`(占位符),验证者才会信任您的印记。`signet enroll` 不会进行自动注册。未注册的设备在验证时会被拒绝。 **Drand 签名会被验证。** 每张带有印记的图像都会引用一个 drand 轮次。验证会确认 `SHA-256(drand_signature) == randomness_field`,以确保信标数据未被篡改。 ## 为什么这可以在法庭上作为证据 - **没有模型,没有评分。** drand BLS 签名要么匹配,要么不匹配。二元逻辑。 - **去中心化信标。** 没有任何单一实体控制 drand。过去的轮次签名无法被追溯伪造。 - **非交互式验证。** 任何拥有图像和互联网访问权限的人都可以进行验证。无需专有 API。 - **防篡改。** 有意义的编辑(裁剪、图像修复、合成)会破坏足够多的像素投票,导致 FEC 无法解码。 - **开放标准。** 水印算法、payload 派生和 drand 链全部公开。 **Signet 证明了什么:** 这些像素在声明的 drand 轮次时,未修改地存在于集成了 Signet 的软件中。 **局限性:** Signet 只认证已注册的相机和应用。没有有效水印的图像是未经验证的——不能证明是 AI 生成的。普及率是关键的驱动力:嵌入 Signet 的应用越多,信号就越强。 ## 技术细节 | 参数 | 值 | |---|---| | Payload | 16-byte HKDF-SHA256(drand signature, "signet-v1") | | FEC | RS(20,16) over GF(256) — 4 parity bytes, corrects ≤ 2 symbol errors | | 嵌入位数 | 160 (20 bytes × 8) | | 嵌入通道 | RGB8 的 Blue channel LSB | | 扩散 | Bit b → pixels b, b+160, b+320, … | | 每位投票数 (12 MP) | ~75 000 | | 最小图像尺寸 | 1 600 pixels | | drand 网络 | League of Entropy — `https://api.drand.sh/public/{round}` | | 轮次周期 | 30 seconds | ## 源码目录结构 ``` include/ └── signet.h C header (FFI API) sdk/ ├── ios/SignetSDK.swift iOS drop-in integration └── android/SignetSDK.kt Android drop-in integration src/ ├── main.rs CLI reference tool ├── lib.rs Library root + C FFI exports ├── imgwm.rs Spread-spectrum embed + majority-vote extract ├── fec.rs Reed-Solomon RS(20,16) over GF(256) ├── crypto.rs HKDF-SHA256, CRC-32 ├── payload.rs drand signature → 16-byte payload ├── drand.rs HTTP fetch, round/timestamp helpers ├── modem.rs Audio AFSK (legacy) └── wav.rs WAV I/O (legacy) ``` ## 许可证 Signet 采用双重许可: - **开源:** [GNU Affero General Public License v3.0](LICENSE) — 对开源相机应用和个人项目免费 - **商业:** 对于专有应用、政府/执法部门、企业或 OEM SDK 使用,请联系 [licensing@north9.org](mailto:licensing@north9.org) 详情请参阅 [LICENSE-COMMERCIAL](LICENSE-COMMERCIAL)。
标签:AIGC检测, Cloudflare, CVE, Deepfake防御, drand, EPFL, HEIC, JPEG, LSB隐写, MITRE ATT&CK, PNG, Protocol Labs, UML, 不可伪造证明, 公共随机信标, 内容认证, 加密验证, 可视化界面, 图像取证, 图像防篡改, 媒体真实, 密码学水印, 数字水印, 数字签名, 照片, 照片防伪, 相机SDK, 相机应用, 真实性验证, 网络安全, 通知系统, 防伪溯源, 防伪造, 隐私保护, 零信任验证, 非交互式验证