ノートとエンベロープ
ノートは最大 50,000 文字のテキストです。あなたの端末上で、ノートと自動非表示の設定は小さな JSON ペイロードに包まれ、AES-256-GCM で暗号化されます。アップロードされるのはエンベロープで、フォーマットのバージョン、パスフレーズが必要かどうかのフラグ、ランダムなソルト、ノンス、暗号文だけを含みます — 512 KiB 未満で、鍵がなければ読めません。
リンクとフラグメント鍵
ノートを作成すると burnpony.app/n/<22文字のID>#<43文字の鍵> という形式のリンクが返されます。# より前の部分はノートを識別し、後ろの部分は base64url でエンコードされた 32 バイトのフラグメント鍵です。ブラウザはフラグメントを送信しないため、鍵はリンクだけで受信者のブラウザに届き、サーバーが目にすることはありません。実際の暗号鍵は、フラグメント鍵とソルトから HKDF-SHA256 で導出されます。
パスフレーズ
任意のパスフレーズは第2の要素を加えます。正規化され、PBKDF2-HMAC-SHA256 で 60 万回反復して強化され、鍵導出に織り込まれます。受信者はビューアで入力を求められ、推測はすべて相手のブラウザ内で行われ、閲覧回数を消費しません。パスフレーズはリンクとは別の経路で共有してください。パスフレーズの追加 を参照。
閲覧回数、有効期限、自動非表示
各ノートには 1〜100 回の閲覧許容回数があり — 許可された最後の閲覧が同一のデータベーストランザクション内で暗号文を削除します — さらに 1 時間〜30 日の有効期限があり、5 分ごとのスイープで実施されます。先に達した方の上限でノートが燃えます。表示されたテキストをビューア内で再び隠す自動非表示のカウントダウン(10〜120 秒)も設定できます。この設定はノートの中に暗号化されて運ばれるため、サーバーでさえ知りません。閲覧回数と有効期限の選択 を参照。
開封確認
確認は既定でオフです。オンにすると、ビューアはノートを表示する前に送信者へ通知されることを受信者に伝え、開封時刻が記録され、あなたの端末には一般的なプッシュ通知 — 「ノートが開かれました。」 — が届き、ノート ID だけを運びます。1 つのノートの確認には、あなたの端末を最大 5 台まで登録できます。開封確認の使用 を参照。
送信済みタブと早期焼却
作成したすべてのノートは、送信済みにライブ状態で一覧表示されます: 使用した閲覧回数、有効期限、有効なら確認時刻。あなたの端末に保存されるのはノート ID、管理トークン、選んだ設定だけで — ノート本文は決して保存されません。焼却するとサーバーから暗号文が即座に削除され、その後リンクは他の無効なリンクと同じように振る舞います。ノートを早期に焼却 を参照。
ビューア
受信者が開くページは、単一の自己完結型ファイルです: フレームワークなし、Cookie なし、外部リクエストなし、厳格な Content-Security-Policy、そしてリンクが先に漏れないよう no-referrer ポリシー。受信者が表示する前にノートが自己消滅することを警告し、ブラウザの WebCrypto で復号し、9 言語にローカライズされています。ソースの表示で全体が分かります。
サーバー
burnpony.app のリレーは、封印されたエンベロープと最小限の記録 — ID、タイムスタンプ、閲覧回数、確認フラグ、ハッシュ化された管理トークン — を保存し、最後の閲覧時、有効期限時、または早期焼却時に暗号文を削除します。焼却済み・期限切れ・存在しないノートは外部から区別できません。作成は、アドレスのログではなく短命のソルト付き IP ハッシュを用いてレート制限されます。詳細は セキュリティページ に。
セルフホスティング
設定はカスタムのサーバー URL を受け付け、各ノートは自分がどのサーバーに存在するかを記憶します — なので自分のリレーに対して作成したノートは、元に戻しても動き続けます。リレーサーバーのソースは公開が予定されています。公開されるまで、セルフホスティングはアプリが対応している機能であって、今日公開リポジトリから展開できるものではありません。ロードマップ がそれを正直に追跡しています。
制限の一覧
ノートサイズ: 50,000 文字。エンベロープサイズ: 512 KiB。閲覧回数: 1〜100。有効期限: 1 時間、8 時間、1 日、3 日、7 日、または 30 日。自動非表示: オフ、10、30、60、または 120 秒。作成: (ハッシュ化された)アドレスごと 1 時間あたりでレート制限。