本页面由机器翻译,仅供参考。如有出入,请以英文原文为准。
256t.org 是一个使用 94 字符内容标识符(CID)的内容寻址存储公开规范。它定义了一种简单、标准化的方式,根据内容的加密哈希和长度来标识和获取内容。
256t.org 提供简单、可预测的格式,标识符长度固定(不超过 94 个字符),便于在 URL、文件名和数据库中使用。该规范刻意保持精简和专注,因此可以很容易地用任何编程语言实现。
IPFS 等系统是完整的分布式存储网络,而 256t.org 只是一个关于内容标识符的规范。它定义了如何计算和验证 CID,而把存储、获取和发现机制留作实现细节。这使它在不同用例中更简单、更灵活。
CID(内容标识符)是一个不超过 94 个字符、以 base64url 编码的字符串,用于唯一标识内容。它由以下部分组成: - 8 个字符:内容长度(base64url 编码) - 最多 86 个字符:SHA-512 哈希(内容大于 64 字节时),或内容本身(内容不超过 64 字节时)
选择这个长度是为了能轻松放进 URL 路径段和常见的数据库字段: - 8 个字符表示长度(最多可表示 256 TB) - 86 个字符用于 SHA-512 哈希或内联内容 - 合计:94 个字符
Base64url 是 Base64 编码的一种变体,使用对 URL 和文件名安全的字符(定义于 RFC 4648 第 5 节)。它用 - 代替 +,用 _ 代替 /,并省略填充字符(=)。
对于 64 字节或更小的内容,其 base64url 编码本身不会比 SHA-512 哈希更长。内联存储更高效,也免去了不必要的哈希计算。
40 多种语言的代码示例见 implementations 目录。
可以!该规范是开放且免费使用的。你可以在自己的应用中实现 CID 的生成和验证,或者使用现有的实现。
CID 可以存储在任何地方: - 传统数据库中 - 文件系统中(作为文件名,或放在专门的目录里) - 云存储中(S3、R2 等) - CDN 上 - 分布式系统中
本规范并不规定存储机制。
这取决于你的存储实现。本规范定义了 CID 格式,但没有定义获取机制。常见做法包括: - 基于 CID 路由的 HTTP 服务器 - 直接访问文件系统 - 云存储 API - 自定义协议
256t.org 主域名托管了一小组用于演示的 CID,但它并不打算作为通用的公共存储服务。重点在于规范本身。
以目前的技术,制造 SHA-512 碰撞在密码学上是不可行的。对于大于 64 字节的内容,CID 的抗碰撞性与 SHA-512 本身相同。对于不超过 64 字节的内容,CID 本身就包含实际内容,因此按定义就是唯一的。
尽管理论上可能,但人为制造 SHA-512 碰撞远远超出了当前的计算能力。对攻击者来说,直接对内容撒谎要比制造碰撞容易得多。如果安全性至关重要,请始终验证 CID 内容。
使用任意一个实现计算你的内容的 CID,并与预期的 CID 进行比较。所有实现都提供了验证功能。
在实践中是的。由于 CID 由内容本身推导而来,同一个 CID 始终代表同一份内容。如果内容发生变化,它的 CID 也会随之改变。
可以。由于 CID 基于内容寻址且不可变,可以使用 Cache-Control: public, max-age=31536000, immutable 响应头永久缓存。
选择与你项目主要语言相匹配的实现即可。所有实现都遵循同一规范,对相同内容会生成完全相同的 CID。
每个实现都应包括:
- 一个用于计算 CID 的核心库(cid.*)
- 一个为示例文件生成 CID 的脚本(generate.*)
- 一个验证 CID 与其内容是否匹配的脚本(check.*)
示例请参见 implementations 目录中的现有实现。
是的。仓库在 examples/ 目录中提供了示例文件,并在 cids.json 中提供了预期的 CID。测试方法是为这些文件生成 CID,并验证它们与预期值一致。
SHA-512 提供更高的抗碰撞性;而得益于小内容的内联存储,多出来的长度(64 字节对 32 字节)并不会明显增加 CID 的总长度。
它总是内联存储。64 字节经 base64url 编码后正好是 86 个字符,与 SHA-512 哈希的长度相同,因此内容恰好能放进哈希所占的空间。规则是:64 字节及以下,内联;超过 64 字节,哈希。因此每份内容都有且只有一个 CID。一个 64 字节内容的 CID 如果包含的是哈希而不是内容本身,就是无效的。
8 个 base64url 字符可提供 48 位的长度信息,支持最大 256 TB 的内容。这足以满足几乎所有用例,同时保持前缀紧凑。
可以!对于不超过 64 字节的内容,CID 更短,因为它只包含长度前缀加上 base64url 编码的内容本身(不超过 86 个字符)。
关于部署使用 CID 的内容寻址存储的详细信息(包括上传到 Cloudflare R2 的示例),请参阅发布与存储。
本规范关注的是内容标识符,而不是元数据。不过,最佳实践包括:
- 使用 Cache-Control: public, max-age=31536000, immutable 以最大化缓存
- 使用与内容相符的 Content-Type 响应头
- 可选:在响应头或元数据中存储 CID 以便验证
可以,但 GitHub Pages 有文件大小限制,也没有针对内容寻址存储进行优化。用于生产环境时,请考虑 S3、R2 等专门的存储服务。
欢迎贡献!你可以: - 用新的编程语言添加实现 - 改进现有的实现 - 报告问题或对规范提出改进建议 - 改进文档
请访问 GitHub 仓库开始参与。
请在 GitHub 仓库中提交 issue,或在 GitHub Discussions 版块发起讨论。