# セキュリティとプライバシー Frost は、何かを保存する前に、あなただけが持つキーを使って、お使いのコンピュータ上でバックアップを暗号化します。キーを持たない人は、クラウドプロバイダーも、Permafrost の運営者も、あなたのサーバーやドライブにアクセスできるほかの人も、Frost の作者も、中身を読むことはできません。 Frost にはアカウントがなく、あなたやあなたの使い方について何も収集しません。接続するのは、あなたのストレージと、アップデートの確認とダウンロードのための GitHub だけです。 ## 暗号化されるもの Frost は、ファイルの内容、ファイル名、フォルダ構成、各スナップショットの詳細など、バックアップの中身をすべて暗号化します。セットアップでは、小さな平文のテスト用オブジェクトも送信し、そのあと削除します。ファイル、名前、暗号化キーは含まれません。Frost がキーをサーバーに送ったり、復旧用の預かりコピーを保管したりすることはありません。 | 要素 | 方式 | | --- | --- | | キー | `frost init` がコンピュータ上で作る、ランダムな 256 ビット | | リカバリーフレーズ | キーそのものを、24 個の BIP39 単語で書き表したもの | | 暗号化 | XChaCha20-Poly1305。オブジェクトごとに新しいランダムな nonce を使います | | チャンク名 | チャンクの内容に対する、キーを使った HMAC-SHA256 | | 圧縮 | zstd。暗号化の前に、小さくなる場合だけ圧縮します | ## ストレージから見えるもの ストレージを運用する人や、ストレージを読める人には、次のものが見えます。クラウドプロバイダーや Permafrost のほか、セルフホストのサーバーやドライブなら、そこにアクセスできる人すべてです。 - オブジェクトの数、それぞれのサイズ、アップロードされた日時。 - どのオブジェクトがチャンク、スナップショットのヘッダー、ファイル一覧のインデックスなのか。 - いつバックアップや復元をしたか、どの IP アドレスからか。 - 各バックアップでアップロードされた新しいデータの量。ここから、どれくらい変更があったかの見当がつきます。新しい内容がないバックアップはスナップショットを保存しないので、新しいスナップショットが現れると何かが変わったことがわかります。 - 小さなファイルの圧縮後のおおよそのサイズ。ただし、それが何で、何という名前なのかはわかりません。大きなファイルはさまざまなサイズのチャンクに分かれるので、元のサイズのオブジェクト 1 つとして現れることはありません。 プロバイダーには、あなたが特定の既知のファイルを持っているかどうかを確かめる方法がありません。チャンク名も分割位置も、あなたのキーによって決まるからです。 ## Frost が守るもの - ストレージを運用する人やストレージに手が届く人に、ファイルを読まれること。バケット、サーバーのフォルダ、ドライブのコピーを手に入れた人も含みます。 - あなたとストレージの間のネットワーク上にいる人。通信には TLS か SSH を使います。ただし、S3 のエンドポイントに `http://` を指定した場合や、スキームのないエンドポイントで `storage.s3.insecure` を有効にした場合は使いません。Permafrost で `http://` を使えるのは、自分のコンピュータ上のサーバーだけです。暗号化なしの HTTP はローカルのテストにだけ使ってください。どちらの場合も、すべてのバックアップオブジェクトは認証されます。 - セルフホストのサーバーになりすます人。SSH はサーバーのホストキーを確認し、変わったキーを拒否します。詳しくは[セルフホスト](#self-hosted)を参照してください。 - 改ざん。変更、すり替え、切り詰めが行われたオブジェクトは復号に失敗し、Frost がそれを黙って受け入れることはありません。 - 復元によって、選んだフォルダの外にファイルが書き込まれること。 - 改ざんされた Frost のダウンロード。すべてのリリースは署名されており、インストーラ、npm の `getfrost` パッケージ、`frost update` はインストールの前に署名を確認します。 ## Frost が守れないもの - **あなたのコンピュータにアクセスできる人。** スケジュールされたバックアップを実行できるように、キーファイルはコンピュータ上に置かれています。セルフホスト用の Frost の SSH キーも同じです。キーファイルを読める人や、あなたとしてプログラムを実行できる人は、バックアップを読めます。ディスク全体の暗号化と画面ロックを使ってください。 - **ストレージでのデータ消失。** ストレージを管理する人がオブジェクトを削除したり、渡さなかったりする可能性があります。ドライブが故障したり、なくなったりすることもあります。抜き取りチェックで気づくことはできますが、Frost には防げません。失っては困るものは、コンピュータのそばのドライブ以外の場所に、独立したコピーをもう 1 つ持っておいてください。 - **スナップショットの隠蔽。** ストレージが最新のスナップショットを隠し、古いものだけを返す可能性があります。新しいスナップショットを見たことがあるコンピュータは、それが消えたと報告しますが、新しいコンピュータには気づく方法がありません。それでも、返されたスナップショットはどれも本物です。 - **日時とサイズ。** 上で挙げたとおり、いつ、どれだけバックアップしたかは見えてしまいます。 ## コンピュータ上のファイル macOS と Linux では、Frost はあなたのユーザーだけがアクセスできる権限で非公開のファイルを作ります。既存のファイルや、スケジューラが作るログの権限は異なる場合があります。Windows では、ユーザープロファイルの権限を引き継ぎます。ただし Frost の SSH キーは例外で、そのフォルダはあなたのアカウントしか開けません。設定とキャッシュは、ほかのユーザーが読めないフォルダに置いてください。 | ファイル | 内容 | | --- | --- | | `key` | リカバリーフレーズ (平文) | | `config.toml` | 設定とストレージの認証情報 | | `ssh/frost_ed25519` | セルフホスト用の Frost の SSH キー | | `manifest-*.jsonl` | チャンク ID、ファイルのパス、サイズ、更新日時。コンピュータの外に出ることはありません | | `frost.log` | スケジュールされたバックアップの出力。読めなかったパスも含みます | 場所は[ファイルとフォルダ](#files-and-folders)にまとめています。 ## おすすめの対策 - リカバリーフレーズはオフラインで、紙か信頼できるパスワードマネージャーに保管します。 - ときどき `frost key verify` を実行して、書き留めたフレーズが正しいか確かめます。 - Frost には、専用のバケットにしか届かないストレージの認証情報か、ほかの大切なものを変更できないサーバーのアカウントを渡します。 - ときどき `frost status` を確認し、健全性に問題があればすぐに調べます。 ## セキュリティ上の問題を報告する 公開の issue は作らないでください。Frost の GitHub リポジトリの [Security タブ](https://github.com/whatithasisandalwayswillbe/frost/security)から、**Report a vulnerability** で非公開で報告してください。見つけた内容、再現の手順、攻撃者が何を得られるかを書いてください。1 週間以内に返信します。