PRYSYM/ois-sign

GitHub: PRYSYM/ois-sign

OIS Sign 是一个利用 passkey 硬件身份为网页内容签名并支持离线验证的轻量级工具,填补了个人用户在内容防篡改和伪匿名身份证明方面的空白。

Stars: 0 | Forks: 0

# OIS Sign — 用指纹为你的网页内容签名 [规范](specs/signature-block.md) · [在线演示](examples/static-html/index.html) · [常见问题](docs/faq.md) · [分发计划](_plans/ois-signed-web.md) ## 仓库内容 | 路径 | 说明 | 状态 | |---|---|---| | `packages/sign-core/` | `@ois/sign-core` — 原生 JS 签名及验证库 (浏览器 + Node) | v0.1.0 | | `packages/extension/` | MV3 浏览器扩展 (Chrome/Firefox) — 页面内验证 | v0.1.0 | | `packages/wordpress-plugin/` | Gutenberg 区块 — 添加“Sign this post”按钮 | v0.1.0 | | `packages/markdown-cli/` | `ois-sign` — 用于签名 Markdown / HTML / 文本文件的 CLI | v0.1.0 | | `specs/` | OIS-SIGN-v1 协议规范 | 草稿 | | `test-vectors/` | 跨实现的一致性测试向量 | 6 组测试向量 | | `examples/static-html/` | 在浏览器中使用 passkey 签名的单文件演示 | 可运行 | | `examples/astro-blog/` | 在构建时签名的静态博客 | 可运行 | | `docs/` | 着陆页 (`docs/index.html`),常见问题,采用者列表 | | ## 太长不看 — 为什么会有这个项目? | 现有方案 | 为什么不适合个人用户 | |---|---| | C2PA / Content Credentials | 面向发布商级别 (Adobe, NYT)。需要 CA 颁发的证书。 | | Sigstore / Cosign | 面向代码制品。需要 OIDC 登录。 | | ENS / Web3 域名 | 需要消耗 Gas。基于钱包,而非硬件。 | | Worldcoin / 球体扫描 | 中心化,生物识别。 | | 平台“已认证”徽章 | 绑定特定平台,需付费,需 KYC。 | OIS Sign 填补了缺失的底层原语:免费、硬件 backing、伪匿名、跨平台、可离线验证。 ## 快速开始 ### 运行单元测试 + 一致性测试向量 ``` git clone https://github.com/PRYSYM/ois-sign cd ois-sign npm install npm test # 35 unit tests npm run test:vectors # 6 conformance vectors ``` ### 试试静态 HTML 演示 ``` npx serve . # serve the repo root # 打开 http://localhost:3000/examples/static-html/ ``` 点击 **Sign this article** → 浏览器弹出 passkey 提示,派生出 3 个符号的身份标识,嵌入一个 `` 区块。点击 **Verify the signature** → 状态变为 `VERIFIED_OFFLINE`。 ### 从 CLI 签名 Markdown 文件 ``` npm link --workspace=@ois/sign-cli ois-sign keygen ./mykey.pem ois-sign whoami ./mykey.pem # → ⚙-🌊-🔥 — gear-wave-fire ois-sign sign post.md --key ./mykey.pem --inline-key ois-sign verify post.md # → VERIFIED_OFFLINE ``` ### 加载浏览器扩展 (解压版,用于开发) ``` node packages/extension/build.mjs # copies sign-core into lib/ ``` 然后在 Chrome 中:`chrome://extensions` → 开发者模式 → “加载已解压的扩展程序” → 选择 `packages/extension/`。在 Firefox 中:`about:debugging` → 此 Firefox → “临时载入附加组件” → 选择 `packages/extension/manifest.json`。 签名后访问 `examples/static-html/index.html` —— 文章旁边会出现一个绿色的“Signed”徽章。 ### 安装 WordPress 插件 (本地) ``` node packages/wordpress-plugin/build.mjs ``` 将 `packages/wordpress-plugin/` 复制到 `wp-content/plugins/ois-sign/` 中,在 WP Admin 中激活它,在 Settings → OIS Sign 下配置 discovery URL,然后将 "OIS Sign" 区块添加到文章中并点击 "Sign this post"。 ## 工作原理 (一图看懂) ``` ┌──────────────────────┐ author's browser │ passkey (P-256) │ └──────────┬───────────┘ │ navigator.credentials.get() content + scope ▼ +---------+ canonicalize + hash signed_bytes = content ──▶ | core │ ──────────────────────────▶ "OIS-SIGN-v1\n..." +---------+ │ ▼ ECDSA-P256-SHA256 │ ▼ reader's browser ──▶ extension scans DOM, finds recompute hash, verify ECDSA, re-derive symbol-id ──▶ "Signed · ⚙-🌊-🔥" ``` 有关完整详情,请参阅 [`specs/signature-block.md`](specs/signature-block.md) 和 [`specs/canonicalization.md`](specs/canonicalization.md)。 ## 安全模型 (一图看懂) | 威胁 | 防御机制 | |---|---| | 在不同内容上重放签名 | 内容哈希绑定在签名字节中 | | 恶意的 discovery 返回错误密钥 | 验证者从密钥重新派生符号 —— 不匹配则返回 `INVALID` | | 伪造签名 | P-256 ECDSA —— 没有私钥则无法实现 | | AI 生成的冒充内容 | 同伪造签名防御机制 | | 签名被平台剥离 | 降级为 `UNVERIFIED`,绝不会误报为 `VERIFIED` | ## 许可证 MIT。请参阅 [LICENSE](LICENSE)。 属于 [Open Identity Symbols](https://github.com/PRYSYM/open-identity-symbols) 生态系统的一部分。
标签:Astro博客, CMS安全, DID, Firefox扩展, GNU通用公共许可证, Gutenberg区块, JavaScript, MITM代理, MV3扩展, Node.js, Passkey, SEO安全, Web3.0, WebAuthn, Web标准, WordPress插件, 伪匿名, 公钥密码学, 内容真实性, 内容签名, 内容防篡改, 前端安全, 去中心化身份, 开源协议, 抗伪造, 数字版权, 数据可视化, 文档结构分析, 无密码认证, 浏览器扩展, 硬件-backed安全, 离线验证, 自定义脚本