セキュリティとアーキテクチャ
Revault がファイルを保護する方法と保護の終了場所。
Next.js PWACloudflare WorkerPostgreSQL · R2アカウント設定
パスキーでアカウントを作成。メールアドレスやパスワードは不要です。
パスキーはアカウントへのアクセスを証明しますが、保管庫のロックは解除しません。サーバーは公開鍵を保存し、セッショントークンは HttpOnly・SameSite Cookie に封印されます。
タブを閉じるか更新するとサインアウトします。新しいタブでは、保管庫の一覧を表示する前にパスキーと保管庫のパターンが必要です。
保管庫のパターン
パターンとランダムな256ビットの秘密値から、PBKDF2-SHA256(600,000回)でラッピング鍵を導出します。秘密値はこのブラウザーに残り、サービスは暗号化されたマスター鍵だけを受け取ります。
このパターンで解除できるのはこの端末だけです。別の端末を設定するために復旧キーを保管してください。
アップロード前に暗号化される
各保管庫にはランダムな AES-256-GCM マスター鍵があります。名前とフォルダー構造は暗号化されます。ファイルはアップロード前に、サイズを制限した Tink AES-GCM-HKDF のストリーミング区間で暗号化されます。
名前、プレビュー、ファイルの内容は暗号化されます。カウント、サイズ、タイムスタンプはサービスから参照可能なままです。
ストレージとアップロード
Next.js PWA は同一オリジンの API プロキシを使います。Cloudflare Worker がセッションと所有権を検証します。PostgreSQL はアカウントと暗号化メタデータを、R2 は暗号化ファイルのチャンクを保存します。
ブラウザのストレージはクリアまたは削除できます。暗号化されたバックアップをこのブラウザの外部に保存してください。
回復キーを保存します
ブラウザーデータを消去すると端末の秘密値が削除されます。パスキーでサインインし、復旧キーを使って新しいパターンを設定してください。
暗号化バックアップには端末の秘密値は含まれません。パターンで保護された保管庫の復元には復旧キーを使います。古い保管庫では元のパスフレーズが使われている場合があります。
リカバリ キットにはリカバリ シークレットとキー ラッパーが含まれていますが、ファイルは含まれていません。暗号化されたクラウド コピーまたは自己完結型の暗号化バックアップが引き続き必要です。
セキュリティについて
パターンの組み合わせは限られています。端末の秘密値をコピーされると、オフラインでパターンを試される可能性があります。
端末のパターンを変えても、他の端末や古い復旧キーは無効になりません。暗号鍵が漏えいした場合は、ファイルを新しい保管庫へ移してください。
暗号化により保存されたコンテンツが保護されます。オブジェクトの数、サイズ、タイムスタンプ、アカウントの関連付けは引き続き表示されます。デバイスやフロントエンドが侵害されると、ロックされていないデータが公開される可能性があります。 Revault は独立したプロジェクトであり、独立したセキュリティ監査を受けていません。