// documentation

一切如何 运作。

BurnPony 各个部件的参考。逐项操作教程见 指南;确切的字节级规范见 v1 协议

纸条与信封

一张纸条最多 50,000 个字符的文本。在你的设备上,纸条及其自动隐藏设置被打包成一个小的 JSON 载荷,然后用 AES-256-GCM 加密。上传的是一个信封,只包含格式版本、是否需要口令的标志、随机盐、随机数和密文 — 小于 512 KiB,且没有密钥便无法读取。

链接与片段密钥

创建纸条会返回形如 burnpony.app/n/<22 字符 id>#<43 字符密钥> 的链接。# 之前的部分标识纸条;之后的部分是经 base64url 编码的 32 字节片段密钥。浏览器从不传输片段,因此密钥仅通过链接到达收件人的浏览器,服务器从不见到它。真正的加密密钥由片段密钥和盐通过 HKDF-SHA256 派生。

口令

可选的口令增加第二重因素:它会被规范化,用 PBKDF2-HMAC-SHA256 迭代 60 万次强化,并融入密钥派生。收件人会在查看器中被提示输入;猜测完全在其浏览器中进行,不消耗查看次数。请通过与链接不同的渠道分享口令。参见 添加口令

查看次数、到期与自动隐藏

每张纸条都带有 1 到 100 次的查看额度 — 最后一次允许的查看会在同一个数据库事务中删除密文 — 以及 1 小时到 30 天的到期,由每五分钟一次的清扫执行。先到达哪个上限,纸条就随之焚毁。你还可以设置自动隐藏倒计时(10 到 120 秒),它会在查看器中重新隐藏已显示的文本;该设置以加密形式随纸条传递,因此连服务器也不知道。参见 选择查看次数与到期

已读回执

回执默认关闭。开启后,查看器会在收件人显示纸条之前告知其发件人将收到通知,打开时间会被记录,你的手机会收到一条笼统的推送 — 「一张纸条已被打开。」 — 仅携带纸条 ID。一张纸条的回执最多可注册你的五台设备。参见 使用已读回执

已发送标签与提前焚毁

你创建的每张纸条都列在「已发送」中并带实时状态:已用查看次数、到期、若启用则显示回执时间。你的设备上只保存纸条 ID、一个管理令牌和你所选的设置 — 从不保存纸条正文。焚毁会立即从服务器删除密文;之后该链接的表现与其他失效链接无异。参见 提前焚毁纸条

查看器

收件人打开的页面是单一自包含文件:无框架、无 Cookie、无外部请求、严格的 Content-Security-Policy,以及 no-referrer 策略以防链接进一步泄露。它在收件人显示之前会警告纸条将自毁,使用浏览器的 WebCrypto 解密,并本地化为 9 种语言。查看源代码即可看到全部。

服务器

burnpony.app 的中继存储封存的信封和最少的记账信息 — ID、时间戳、查看计数、回执标志、经哈希的管理令牌 — 并在最后一次查看、到期或提前焚毁时删除密文。已焚毁、已过期和从未存在的纸条从外部无法区分。创建通过短生命周期的加盐 IP 哈希而非地址日志进行限流。完整细节见 安全页面

自托管

设置支持自定义服务器地址,且每张纸条会记住它所在的服务器 — 因此针对你自己中继创建的纸条,在你切回时仍可正常使用。中继服务器的源代码计划公开发布;在发布之前,自托管是应用所支持的一项能力,而非今天你能从公开仓库部署的东西。路线图 会诚实地记录这一点。

限制一览

纸条大小:50,000 个字符。信封大小:512 KiB。查看次数:1–100。到期:1 小时、8 小时、1 天、3 天、7 天或 30 天。自动隐藏:关闭、10、30、60 或 120 秒。创建:按(哈希后的)地址每小时限流。