letsseal/letsseal

GitHub: letsseal/letsseal

Let's Seal 是一个免费、开源的文件真实性证明开放标准,通过加密签名、比特币时间戳锚定和透明日志,为任意文件提供永久可验证的完整性、时间与颁发者证明。

Stars: 59 | Forks: 1

Let's Seal

Let's Seal

Seal anything.

The open standard for proving any file is real: unaltered, sealed by a known certificate, and in existence by a certain date.

Apache-2.0 License SEAL standard sealbot on npm Downloads Proof records

网站 · SEAL 标准 · 免费 Web 应用 · 快速开始 · 封存内容 · 工作原理 · 用例 · 开发者 · 自托管 · 验证文档

**SEAL 是用于证明任何文件真实性的开放标准。** 一个已封存的工件,一种验证方式,任何人都可以永久验证。使用任何合规的工具进行封存,任何人都可以使用其他工具进行验证。 Let's Seal 创建了该标准——**SEAL**(Sealed Evidence Anchored to a Ledger,锚定到账本的封存证据),并运行负责颁发和验证该标准的免费网络及参考实现。该标准是核心基石。本仓库中的所有内容均构建于其上,并完全免费开放。 它是文档证明领域的 Let's Encrypt。Let's Encrypt 让付费的 TLS 证书成为了历史,Let's Seal 也将为付费的文档封存做同样的事。与 Let's Encrypt 一样,它是免费、开源的,并作为基金会的公益项目而非初创公司来运营。 **真实性是基础设施,不应被用来租售。** ## 免费使用 三种封存方式,均免费: - **托管 Web 应用**,[app.letsseal.org](https://app.letsseal.org)。对任何人免费,在浏览器中运行,无需安装任何东西。封存文件、发送文档以供签名(远程、当面或完全不使用电子邮件),并颁发带有品牌的证书和凭证。 - **命令行和 API。** 用于终端的 `sealbot`,以及可让您将封存功能集成到自有系统中的 REST API 和 SDK。 - **自托管。** 在您自己的证书颁发机构下自行运行整个引擎。 在 [verify.letsseal.org](https://verify.letsseal.org) 或您自己的机器上离线验证,验证始终免费且无需账户。 - **永久免费。** 没有单文档费用,没有付费封存。 - **开源 (Apache-2.0)。** 引擎、SDK 和标准本身均开放。 ## 封存的证明力 SEAL 证明通过加密技术确立了三点,并清晰地界定了其适用范围: - **未更改。** 自封存以来,该文件连一个字节都没有改变。哪怕改变一个字节,签名也会失效。 - **时间。** 通过 [OpenTimestamps](https://opentimestamps.org) 锚定到比特币,证明其在特定日期已存在,无需信任我们。 - **颁发者。** 它由特定的证书进行封存。当组织证明了对某个域名的控制权时,该封存会将该域名作为可由机器验证的身份。 每个封存也会被写入到公开的、仅追加的透明日志(RFC 6962)中,该日志具有锚定到比特币的根节点,因此关于封存内容的记录本身也是防篡改的,任何人都可以对其进行审计。 这就是全部的保证,完整且永久。封存证明了完整性、时间和颁发证书。它不是公证,也不断言个人的现实世界身份。身份功能绑定了由提供商在封存时验证过的电子邮件,其最诚实的称呼是“提供商验证的电子邮件”,这也正是它所传递的内容。 ## 封存的内容 一个标准,涵盖所有类型的文件,每种文件均采用其原生格式,因此任何标准验证器都可以对其进行检查。读者无需专门的工具,验证时也不依赖 Let's Seal。 | 文件 | 封存形式 | 验证方式 | |---|---|---| | **PDF** | 嵌入文件的 PAdES / X.509 签名 | 任何标准 PAdES 验证器,或此处的参考验证器 | | **图像、视频、音频** | 嵌入媒体的 C2PA(内容来源信息)清单 | 任何 C2PA 读取器 | | **XML** | 封闭式 W3C XML-DSig 签名 | 任何 XML-DSig 验证器 | | **电子邮件** | S/MIME `multipart/signed` (RFC 8551) | `openssl smime -verify` | | **任何其他文件** | 基于文件 SHA-256 的分离式 CAdES / CMS `.sig` | `openssl cms -verify`;文件的字节永远不会离开您的机器 | | **软件工件、容器镜像** | 签名以及 in-toto / DSSE 证明(SBOM、SLSA 来源) | 您的流水线已在运行的标准开源工件签名工具 | 封存是针对每种格式原生的,因此封存后的 PDF 依然是可以在任何地方打开的普通 PDF,封存后的图像依然能在各处显示,签名后的工件也能像往常一样安装。证明随文件一同携带。 ## 实际运行效果 从命令行进行封存和验证:

sealbot sealing and verifying a document on the command line

免费的公共验证门户 [verify.letsseal.org](https://verify.letsseal.org):

The Let's Seal verification portal

公开证明页面:任何人都可以打开的通俗易懂的验证结论,以及其背后的证据。在您上传文件之前,主题和签名者的详细信息将保持私密:

A Let's Seal proof page

位于 [app.letsseal.org](https://app.letsseal.org) 的托管应用可完成其余工作:封存文件、发送文档以供签名(远程、当面或完全不使用电子邮件),并颁发带有品牌的证书和凭证。 ## 快速开始 在 **[verify.letsseal.org](https://verify.letsseal.org)** 上公开且免费地验证任何已封存的文档,或者自行运行参考验证器: ``` python spec/verify.py sealed.pdf sealed.pdf.ots ``` 通过托管 API 使用组织密钥封存文件: ``` curl -X POST https://app.letsseal.org/api/v1/seal \ -H "Authorization: Bearer $LETSSEAL_KEY" \ -F file=@contract.pdf ``` 或者从命令行进行: ``` sealbot seal contract.pdf # seal a PDF or any file sealbot verify contract.sealed.pdf # verify a seal, offline ``` 适用于 Python 和 TypeScript 的 SDK 以及 OpenAPI schema 位于 [`sdk/`](sdk/) 中。 ## 证明的形式 打开已封存文件的证明页面,或运行验证器,您将获得一个有证据支持的、任何人都可以复现的直观结论: ``` Authentic and unaltered Document contract.pdf SHA-256 9f2c1a…e7b4 (matches the sealed bytes, exactly) Issuer Acme Solicitors LLP Issuer verified, controls acme.example (dNSName in the cert) Sealed 2026-07-14 11:42 UTC Time anchor Bitcoin block #812,043 (via OpenTimestamps) Transparency Entry #48,120 in the public log, inclusion proof checks out Verdict rule: Authentic = valid and intact and trusted. A valid signature that does not chain to the published root is reported as unrecognised, never as authentic. ``` 该结论是刻意严格的。如果使用一个未链接到受信任根节点的证书进行加密签名,将被视为伪造途径,并会被报告为“未识别”,绝不会显示为通过。 ## 封存的生成与检查方式 一个封存的生命周期:生成一次,提供证据并锚定到公共账本,提供服务返回,并且任何人都可以永久检查。

The life of a seal: you seal a file, it is evidenced and anchored to the public ledger, served back, and anyone can verify it forever. Authentic = valid and intact and trusted.

## 自行免费验证 两项检查,均独立于我们。一个封存包含了验证它所需的一切,因此只需固定一次已发布的根证书,之后就可以在任何地方永久离线验证。 - **根证书指纹 (SHA-256):** `02:68:6D:EE:20:67:31:C4:59:C1:7A:9F:58:36:7B:0B:0B:BA:5D:24:C6:85:D8:6D:1F:74:49:86:2D:C0:FE:BE`,主题为 `CN=Let's Seal Root CA, O=Let's Seal, C=GB`。可在 [letsseal.org/api/root-ca](https://letsseal.org/api/root-ca) 下载。 - **PDF:** 任何固定了根节点的标准 PAdES 验证器,或使用 `python spec/verify.py sealed.pdf sealed.pdf.ots`。 - **电子邮件和分离式文件:** `openssl smime -verify -in message.eml -CAfile letsseal-root.crt` · `openssl cms -verify -inform DER -in file.sig -content file -binary -CAfile letsseal-root.crt`。 - **软件和 SBOM:** 标准开源工件签名工具会根据已发布的根证书验证签名和证明,可在任何机器上重现。 - **时间:** 针对比特币运行 `ots verify sealed.pdf.ots`。 - **透明日志:** 获取 `/api/log/proof?sha256=` 处的包含证明,并将其与 `/api/log/sth`(RFC 6962)处的已签名树头进行核对。`/api/log/consistency` 处的一致性证明可以证明日志仅追加。 ## 公共透明日志 每个封存都会写入一个仅追加的 Merkle 日志(RFC 6962),这与浏览器在证书透明度中依赖的结构相同。该日志的根节点已签名并且本身锚定到比特币,因此: - 任何人都可以证明给定的封存已包含在日志中(包含证明), - 任何人都可以证明日志从未被重写(一致性证明), - 并且整个过程无需信任运营方即可进行审计。 它是防范冒用的审计追踪:如果某个证书曾以不应使用的名称对某项内容进行了封存,证据将是公开且永久的。 ## 颁发者身份 封存始终会证明是哪个证书签署了它。在此之上,组织可以证明对域名的控制权(DNS 记录或发送到控制器地址的消息),然后该域名将作为 `dNSName` 绑定到签名证书本身中,因此平台外的验证器可以直接从证书中读取身份。 - 未验证域名的组织将被显示为“自我声明”,绝不会显示为“已验证”。 - 已验证颁发者的徽章是其控制的域名,该域名是全球唯一的,不会发生冲突。 - 滥用行为可以公开举报,冒充的颁发者可能会被暂停,这将冻结其密钥并撤销其已验证的徽章。 这是作为身份的域名控制权,与网络在 TLS 中采用的模型相同。它证明了谁控制着该封存,而不是个人的法律身份,并且对此予以坦率声明。 ## SEAL 标准 **开放验证。开放实现。无法被垄断。** SEAL 是一个任何人都可以在此基础上进行构建的已发布规范,请参阅 [SPEC.md](SPEC.md) 和 [letsseal.org/standard](https://letsseal.org/standard)。其目标是提供一种可互操作的方式来封存和验证任何文件,而不是一个要被绑定的产品。SEAL 证明是包含完整性、时间、透明度和可选的已验证电子邮件归属的单一自包含工件。 本仓库中的签名服务、SDK 和参考验证器是参考实现。任何其他方都可以自由编写自己的实现,并且由一种实现生成的证明可以在任何其他实现下进行验证。 ## 用例 该标准适用于任何文件和任何领域。针对常见领域的实用指南,每个都包含分步说明和在线证明: - **文档与法律:** [法律与法制](https://letsseal.org/use-cases/law) · [财产与产权转让](https://letsseal.org/use-cases/property-conveyancing) · [合规与审计](https://letsseal.org/use-cases/compliance) · [人力资源与企业](https://letsseal.org/use-cases/hr-corporate) · [政府与公共部门](https://letsseal.org/use-cases/government-public-sector) - **金融与专业服务:** [银行与贷款](https://letsseal.org/use-cases/banking-lending) · [保险](https://letsseal.org/use-cases/insurance) · [会计与审计](https://letsseal.org/use-cases/accounting-audit) · [投资与资产管理](https://letsseal.org/use-cases/investment-asset-management) · [测量与房产报告](https://letsseal.org/use-cases/surveying-property-reports) - **软件与供应链:** [软件供应链](https://letsseal.org/use-cases/software-supply-chain) · [采购与供应链](https://letsseal.org/use-cases/procurement-supply-chain) · [制造与贸易](https://letsseal.org/use-cases/manufacturing-trade) - **受监管与专业领域:** [医疗保健](https://letsseal.org/use-cases/healthcare) · [制药与生命科学](https://letsseal.org/use-cases/pharma-life-sciences) · [建筑与工程](https://letsseal.org/use-cases/construction-engineering) · [知识产权](https://letsseal.org/use-cases/intellectual-property) · [教育与凭证](https://letsseal.org/use-cases/education-credentials) - **媒体与个人:** [媒体、新闻与创意](https://letsseal.org/use-cases/media-journalism) · [个人与自由职业者](https://letsseal.org/use-cases/individuals-freelancers) 请在 [letsseal.org/use-cases](https://letsseal.org/use-cases) 查看全部内容。 ## 架构

Let's Seal architecture: issuance (root CA to intermediate CA to the localhost signing service), delivery (the web app anchors each seal to the public ledger, appends it to the transparency log, and publishes proof pages), and verification by anyone with no Let's Seal server.

该引擎完全支持自托管,不包含任何仅在托管环境中运行的代码路径。单用户安装运行的代码与托管服务运行的代码完全相同。 ## 自托管 在您自己的证书颁发机构下自行运行整个项目。 ``` git clone https://github.com/letsseal/letsseal.git && cd letsseal # 1. 证书颁发机构 (参见 ca/) ./ca/setup-ca.sh init # 2. 签名服务 (持有 intermediate key;绑定到 localhost) cd signing-service && python -m venv .venv && . .venv/bin/activate pip install -r requirements.txt && uvicorn main:app --port 8081 # 3. Web app:dashboard、hosted API、verification portal、site cd ../web && npm install && cp .env.example .env # fill in the values npx prisma migrate deploy && npm run dev # http://localhost:3000 ``` 如果您希望您自己的门户之外的验证器也能显示自动的绿色勾选,您稍后可以零代码修改地替换为付费的 AATL 或 eIDAS `.p12` 证书。无论哪种方式,加密保证都是相同的。您的验证门户就是信任锚。 ## 面向开发者 **REST API**(托管或自托管),使用组织 API 密钥进行身份验证: ``` POST /api/v1/seal seal a PDF (PAdES) POST /api/v1/seal/c2pa seal an image, video, or audio file (C2PA) POST /api/v1/seal/xml seal XML (XML-DSig) POST /api/v1/seal/smime seal an email message (S/MIME) POST /api/v1/seal/detached seal any file by digest (detached CAdES) POST /api/v1/seal/blob seal a software artifact POST /api/v1/seal/identity seal with a provider-verified email POST /api/v1/attest attach an SBOM / SLSA attestation POST /api/v1/anchor anchor a hash to Bitcoin POST /api/v1/verify verify a seal (public, no key) GET /api/v1/whoami check a key's organisation ``` 仅摘要端点(`/seal/detached`、`/seal/blob`)绝不会接收文件的字节,仅接收其 SHA-256。 **CLI:** `sealbot seal`、`sealbot verify`、`sealbot issue`、`sealbot anchor`、`sealbot watch`。使用 `npm -g sealbot` 安装(或运行 `npx sealbot`);一个独立的 Rust 构建版本位于 `cli-rs/` 中。 **SDK:** 为 Python(`sdk/python`)和 TypeScript(`sdk/ts`)手工编写的客户端,以及 OpenAPI schema(`sdk/openapi.json`)。使用 `sdk/generate.sh` 为任何其他语言生成客户端。 **CI:** 使用 `ci/` 中的 GitHub Action 在流水线中封存构建工件。 ## 仓库布局 | 路径 | 说明 | |---|---| | `ca/` | 代码化证书颁发机构(根证书和中间证书颁发) | | `signing-service/` | FastAPI 签名服务(持有中间证书密钥) | | `web/` | Next.js 应用:仪表板、托管 API、验证门户、网站 | | `spec/` | SEAL 规范和参考验证器 | | `sdk/` | Python 和 TypeScript SDK、OpenAPI schema 以及 `generate.sh` | | `cli/`、`cli-rs/` | `sealbot` 命令行工具(Node 和 Rust) | | `ci/` | 用于在 CI 中封存工件的 GitHub Action | ## 使命 真实性是基础设施。它不应该被用来租售。证明文件的真实性是一项公共利益,就像浏览器地址栏中的挂锁图标一样,它应该是免费、开源的,由所有依赖它的人共同拥有。Let's Seal 作为基金会的公益项目而非初创公司运营,因此该标准永远不会被拉回到付费墙之后。 ## 许可证 Apache-2.0,请参阅 [LICENSE](LICENSE) 和 [NOTICE](NOTICE)。SEAL 规范可免费实现。 由 [**nsokin**](https://github.com/nsokin) 创建和维护。Let's Seal 是 [Experimental Open Works](https://xowx.org) 的一个项目。
标签:CVE, Zenmap, 区块链, 密码学, 手动系统调用, 数字签名, 数据完整性, 文件校验, 时间戳, 自定义脚本, 逆向工具