暗号化と信頼

セキュリティモデル

iOS および Android に関する Revault の技術リファレンス: ローカル ボールト、デバイス キー、ネイティブ クラウド同期、および独立した共有がデータを保護する方法と、それらの保護が終了する場所。

技術リファレンス · 2026 年 10 月更新

アップロード前に保護が開始される

ネイティブ ボルトは、Revault アカウントなしでローカルで動作します。ファイルの内容、ファイル名、MIME タイプ、サムネイル、ボールト名、フォルダー、タグ、お気に入りはデバイス上で暗号化されます。ローカル使用では、ボールト ファイルは Revault にアップロードされません。ネイティブ クラウドの同期と共有はオプションの別個の操作です。

このモデルは、ボールトの作成時またはロック解除時に、信頼できるオペレーティング システム、インストールされているアプリ、および暗号化ランダム ソースを前提としています。暗号化されたファイルとキーラッパーしか持っていない人は、必要なシークレットがなければファイルを復号化できません。ボールトが開いているときにマルウェアまたは侵害されたアプリが実行されると、平文とキーがキャプチャされる可能性があります。

お使いのデバイス平文とボールトキー
ローカルで暗号化する認証された暗号文
暗号化ストレージ平文のボールトキーがありません

すべてのボールトの独立したキー

各ボールトは、オペレーティング システムの暗号化ランダム ソースを使用して生成されたランダムな 256 ビット AES マスター キーから始まります。ジェスチャはこのキーを直接決定しません。すべてのボールトには独立したマスター キー マテリアルがあるため、あるボールト キーの開示によって別のボールト キーが派生することはありません。

デバイス パターンは、その順序付けられたドット シーケンスとランダムな 256 ビットのデバイス シークレットを組み合わせます。結果の入力は NFKC で正規化され、新しい 128 ビット ソルトと 600,000 回の反復で PBKDF2-HMAC-SHA-256 に渡されます。派生した 256 ビット キーは、AES-256-GCM を使用してマスター キーをラップします。アプリは平文パターンや別のパターンのフィンガープリントを保存しません。

パターンは 6 ~ 25 個の異なるドットを含む 5 × 5 グリッドを使用し、同じデバイスに登録されているボールト間で一意である必要があります。一致するパターンはそのボールトのみを開きます。他のボールト名と内容は非表示のままです。予測可能なジェスチャは、さらに推測しやすくなります。デバイスの秘密とその暗号化されたラッパーの両方を取得した人は、オフラインでパターンの推測を試みることができます。

ネイティブ コンテナーを開くには、Revault アカウントやパスキーではなく、ローカル パターンまたは明示的な回復フローが必要です。オプションのクラウド同期ではプラットフォームの Apple または Google 認証が使用され、ストアでの購入ではプラットフォームの請求先アカウントが使用されます。クラウド認証でも購入でも、ボールトの復号化キーは提供されません。

暗号パラメータ
目的工事
ボールトマスターキーランダムな 256 ビット AES キー
キーのラッピングPBKDF2-HMAC-SHA-256 · 600,000 反復 · 128 ビット ソルト → AES-256-GCM
メタデータとサムネイルAES-256-GCM · ランダムな 96 ビットノンス · 128 ビット認証タグ
ファイルキーの導出HKDF-SHA-256 · ファイルごとのランダムな 256 ビット ソルト · 256 ビット AES 出力
回復の秘密生成: 18 個のランダム ワード (198 ビット)。カスタム: 少なくとも 6 つの異なる単語と 32 ~ 512 文字

デバイスのみのキーの保護

iOS では、デバイス ロックは WhenUnlockedThisDeviceOnly 保護を使用して非同期の Keychain アイテムとして保存されます。デバイスがロック解除されている間のみアクセスでき、Keychain 同期を通じて移行されません。保存されたシークレットは Secure Enclave キーではありません。

Android では、デバイスのロックは、ロック解除されたデバイスを必要とするエクスポート不可能な Android Keystore キーの下で AES-256-GCM を使用して暗号化されます。暗号化されたロック ファイルは、アプリのバックアップなしディレクトリに存在します。 Keystore ハードウェア バッキングはデバイスによって異なります。このアプリは、すべてのデバイスがハードウェア ベースのキーを使用することを保証するものではありません。

ローカルのロック解除シークレットは、ネイティブ クラウド同期およびポータブル ボールト バックアップから除外されます。 Apple または Google アカウントを所有していても、それらのシークレットが再作成されたり、復元されたボールトのロックが自動的に解除されたりすることはありません。新しいデバイスは、独立した回復シークレットを検証し、独自のパターンを登録する必要があります。

機密保持と改ざん検出

Vault メタデータ、ファイル メタデータ、サムネイル、およびラップされたキーは、128 ビット認証タグを持つ AES-256-GCM を使用します。すべての独立した暗号化では、新鮮なランダムな 96 ビットのナンスが使用されます。復号化では、平文を返す前にタグが検証されます。暗号文が変更されているか、キーが間違っていると、認証が失敗します。

追加の認証データは、暗号化された各オブジェクトをその形式バージョン、ボールト識別子、オブジェクト識別子、および目的にバインドします。たとえば、サムネイルとファイルのメタデータ レコードは異なるコンテキストを使用します。暗号化されたオブジェクトを別のボールトに移動したり、別のオブジェクトに置き換えたりすると、認証されたコンテキストが変更され、検証に失敗します。

認証されたコンテキストは識別子を隠さず、新鮮さを証明しません。有効な古いレコードには、引き続き有効なタグを付けることができます。アプリケーション リビジョン チェックは通常の同時更新を検出しますが、これは完全に古い状態を再生する悪意のあるサービスに対する暗号化防御ではありません。

大きなファイルは認証されたセグメントを使用します

ネイティブ ファイル暗号化では、Tink によって説明された AES-256-GCM-HKDF-SHA-256 ストリーミング構造が使用されます。 iOS は AES-GCM および HKDF に CryptoKit を使用します。 Android はプラットフォーム暗号化プリミティブを使用します。新しいストリームにはそれぞれ、長さマーカー、ランダムな 32 バイトのソルト、およびランダムな 7 バイトのノンス プレフィックスを含む 40 バイトのヘッダーがあります。

HKDF は、ボールト マスター キーから別のファイル暗号化キーを派生します。そのコンテキストには、ボールトとファイルの識別子、プレーンテキストのバイト長、設定されたセグメント サイズが含まれます。各セグメントの 12 バイトのノンスは、ランダムなプレフィックス、4 バイトのセグメント カウンター、および最終セグメント フラグを組み合わせます。セグメントには 128 ビットの GCM タグが含まれます。

ネイティブ アプリは、約 5 MiB の境界付きセグメント内のファイルを処理します。セグメント カウンター、最終セグメント フラグ、および予期されるバイト長により、変更、並べ替え、または切り捨てられたセグメントが検出されます。各セグメントは使用前に認証され、プライベート プレビューはファイルの復号化が完了した後にのみ公開されます。不完全な出力は失敗すると破棄されます。再試行すると、既存の暗号化されたバイトが転送されます。

施工は以下の通りです ティンク AES-GCM-HKDF ストリーミング仕様。 Revault の実装とセグメント構成は、Tink による独立した監査または認定を受けていません。

プライベートストレージ、インポート、プレビュー

暗号化されたボールト ファイルはプライベート アプリ ストレージに保存されます。ファイル名、MIME タイプ、フォルダー、タグ、お気に入り、サムネイルは、認証された暗号化されたレコードです。検索とタグ フィルタリングは、ロック解除後にアクティブなボールトの復号化されたメタデータに対して動作します。平文サーバー検索インデックスはありません。

写真、ビデオ、ファイルのインポートでは、暗号化の前にプライベートの一時ステージングを使用できます。 Vault のカメラ キャプチャでは、コピーがギャラリーに自動的に保存されません。写真または別のプロバイダーからインポートすると、そのプロバイダーの元のデータはそのまま残ります。オプションのメディアの最適化は、暗号化の前にローカルで行われ、新しくインポートされたメディアのみを変更します。

プライベート プレビューは、開いている間は一時的なプレーンテキストを必要とします。アプリは、閉じてロックし、その後起動すると一時的なプレビューを削除します。 iOS は、復号化されたプレビュー ファイルに完全なファイル保護を適用します。別のアプリに明示的にエクスポートされたファイルは、ボールトの保護を解除します。一時ファイルの削除は、フォレンジック消去を保証するものではありません。

オプションのネイティブクラウド同期

同期はデフォルトではオフになっており、各デバイスのコンテナーごとに個別に有効になります。 iOS は、暗号化されたレコードとファイル セグメントを iCloud のユーザーのプライベート CloudKit データベースに保存します。 Android は Google Drive のプライベート appDataFolder を使用します。どちらのトランスポートも Revault アカウントを必要とせず、ネイティブ同期データを Revault の Web クラウドにアップロードすることもありません。

クラウドは、平文のボールト マスター キー、ローカル デバイス シークレット、またはリカバリ シークレットではなく、暗号化されたメタデータ、ファイル セグメント、およびキー ラッパーを受け取ります。同じプラットフォーム上の別のデバイスが独自のローカル パターンを登録するには、同じネイティブ クラウド アカウントとボールト回復キーが必要です。 Apple および Google 承認は、暗号化されたレコードへのアクセスを制御しますが、復号化するわけではありません。

同期をオフにすると、現在のデバイスからそのボールトへのそれ以上の転送が停止します。既存の暗号化されたクラウド コピーは残ります。同期の変更と削除は伝播する可能性があり、同時編集では競合のレビューが必要になる場合があります。 iCloud と Google Drive は別個のストアであり、自動クロスプラットフォーム ブリッジはありません。 iPhone と Android の間を移動するには、暗号化された電話転送を使用します。

リカバリは同じキーへの 2 番目のパスです

Revault は、バンドルされた 2,048 語のリストから独立して選択された 18 語を含む 1 つのリカバリ フレーズを生成し、198 ビットのランダム性を提供します。 Creation ではカスタム フレーズや再生成は提供されません。このフレーズは、PBKDF2-HMAC-SHA-256 とフレッシュ ソルトを使用してラッピング キーを個別に取得し、ボールト マスター キーを AES-256-GCM でラップします。このフレーズと暗号化された保管庫を持っている人は誰でもそれを復号化できます。既存のカスタム フレーズと 16 進数の回復キーは、元のボールトとの互換性を維持します。

リカバリ シークレットはセットアップ中に表示され、ネイティブ アプリ ストレージに保存されたり、ネイティブ クラウド ストレージにアップロードされたりしません。暗号化されたファイルとは別に保管してください。別のデバイスを登録するには、元のネイティブ クラウド アカウントの暗号化されたコンテナー、または暗号化されたバックアップと回復キーが必要です。シークレットでは欠落したファイル データを復元できず、Revault にはプロバイダーが保持するリセット キーがありません。

ポータブル .qvault バックアップには、暗号化されたキー ラッパー、認証された暗号化インベントリ、および暗号化されたファイル セグメントが含まれています。ローカルデバイスのロック解除シークレットは除外されます。インポートでは、新しい識別子、マスター キー、ファイル キー、および新しいデバイス パターンを使用してボールトに復元する前に、インベントリ、メタデータ、およびすべてのセグメントが検証されます。復元後、新しい回復キーを保存します。

新しい回復フレーズでは大文字と小文字が保持され、Unicode が NFKC で正規化され、余分な空白が折りたたまれます。従来の 16 進キーは引き続きサポートされます。新しいフレーズを保存した後、ボールトのリカバリ フレーズをその設定で置き換えることができます。これは現在のリカバリ ラッパーを置き換えます。古いバックアップと同期されていないデバイスには、古いラッパーがまだ保持されている可能性があります。パターンまたはリカバリフレーズを変更しても、ボールトマスターキーがローテーションされたり、コピーが取り消されたりすることはありません。キーマテリアルが侵害された場合は、ファイルを新しいキーを使用して新しいボールトに移動します。

暗号化された電話機間の移行

電話転送では、新しいボールト識別子、マスター キー、ファイル キー、ストリーム ヘッダーを含むポータブルな暗号化コピーが作成されます。その独立した転送シークレットではソース ボールトのロックを解除できません。また、ソース リカバリ シークレットとデバイス ロック解除シークレットは含まれていません。暗号化されたパッケージと転送シークレットは個別に配信する必要があります。

受信側アプリはパッケージとそのファイル セグメントを認証し、新しいローカル パターンと回復キーを使用して新しいコンテナーに復元します。これは、クラウド アカウントをブリッジすることなく、iOS と Android の間で機能します。オリジナルは古いデバイスに残ります。復元された内容を確認し、新しい回復キーを削除する前に保存してください。

ロックとセッションのクリーンアップ

デフォルトでは、モバイル アプリはバックグラウンドで動作し、非アクティブ状態が 60 秒続くとすぐにロックされます。各ボールトでは、30 秒、1 分、2 分、5 分、または 10 分を選択できます。共有コンテナーでは、60 秒のデフォルトが使用されます。終了するとパターン画面に戻り、復号化されたセッションが終了します。

ロックすると、セッション作業がキャンセルされ、復号化されたメタデータと検索状態がクリアされ、プレビューが閉じられ、一時ファイルが削除され、所有キー バッファが解放される前に上書きされます。一時的な導出キーも使用後にクリアされます。 Swift および JVM メモリ管理、暗号化ライブラリ、およびメディア デコーダはコピーを作成する可能性があります。すべてのコピーを即座に消去することは保証できません。

iOS は、アプリスイッチャーのスナップショットをプライバシー シールドでカバーします。 Android は、セキュア ウィンドウ フラグを使用して、スクリーンショットと最近使用したアプリのプレビューを制限します。これらのプラットフォーム保護は、誰かがロックされていない画面を撮影することを妨げたり、以前に別のアプリにエクスポートされたファイルを取り消したりすることはありません。

Revault Cloud

Revault Cloud は、クロスプラットフォーム同期用のオプションの Pro ストレージ プロバイダーです。暗号化されたセグメントと暗号化されたファイルのメタデータは、仮名課金インストールにリンクされます。このサービスは、ストレージ識別子、サイズ、チェックサム、リビジョン、および転送アクティビティを監視できますが、ラップされていないボールト キーや回復フレーズは受け取りません。別のランダム接続コードによりストレージへのアクセスが許可されます。別のデバイスを接続する場合もリカバリ フレーズが必要です。既存のクラウド データは、Pro の有効期限が切れた後も回復のために読み取り可能のままです。

共有ごとに独立したキー

ネイティブ共有は、選択したファイルのスナップショットであり、所有者の個人用保管庫にアクセスするものではありません。デフォルトでは、アプリは選択されたファイル バージョン キーを取得し、新しい共有マスター キーの下で AES-256-GCM でラップします。共有のメタデータとサムネイルを再暗号化しながら、暗号化されたファイル バイトを再利用します。ソースボルトキー、そのリカバリシークレット、フォルダ構造、タグ、お気に入りは除外されます。

この共有には、独自に生成された 18 ワードの復号化フレーズと回復ラッパーが含まれています。送信者は、招待リンクとは別に、そのシークレットを非公開で渡します。サーバーは暗号化されたデータを受け取りますが、平文の共有キーや復号化シークレットは決して受け取りません。受信者は、選択したファイル キーから非共有ファイル キーまたはソース ボールト マスター キーを派生できません。

オプションの追加分離設定では、新しいキーとストリーム ヘッダーを使用してファイルの内容を再暗号化します。デフォルトでは、すべてのファイルの書き換えが回避されるため、高速になります。暗号文が繰り返されると、同じファイル バージョンのコピーが関連付けられる可能性があります。どちらのモードでも個別のスナップショットが作成され、受信者がすでに保持している暗号文とキーを取り消すことはできません。

ネイティブ共有トランスポートとアクセス制御

iOS では、プライベートの読み取り専用 CloudKit 招待により、暗号化されたスナップショットが個人同期ゾーンの外側の別の共有レコード階層に配置されます。 Apple は招待アクセスを制御します。受信者には依然として別の復号化秘密が必要です。 CloudKit の招待では、サーバーのアクセス セッション数、固定有効期限、または破棄タイマーが強制されません。所有者は今後の CloudKit アクセスを停止できます。

クロスプラットフォーム共有は、暗号化された部分を Revault の共有サービスにアップロードします。独立したランダムな 256 ビット読み取りおよび管理機能は、SHA-256 ハッシュとして保存されます。 Web サイトのリンクには、復号化の秘密ではなく、そのフラグメントの読み取り機能が含まれています。これを開くと、共有ボールトにディープリンクされ、送信者の秘密の入力を求められます。個人のパターンや既存のボールトは必要ありません。個人保管庫はロックされたままになります。

制御されたサーバー共有により、送信者の最大アクセス セッション、30 日以内の固定有効期限、取り消し、およびオプションのエクスポート許可が強制されます。セッションはアトミックに付与され、共有の期限に制限され、最長 15 分間継続します。ダウンロードや復号化が失敗した場合でも、セッションが許可されるとアクセスがカウントされます。ビューアは進行中のアクセスを確認し、期限が来ると閉じます。

SHA-256 チェックサムは転送された部分を検証し、認証された暗号化はその内容を検証します。エクスポートが許可されている場合、閲覧者は共有シークレットで開く暗号化された .qvault コピーを保存できます。エクスポートを無効にすると、そのアプリケーションのアクションが削除されます。スクリーンショットや平文を保持する変更されたクライアントを暗号的に防ぐことはできません。ソース ファイルを削除しても、個別に作成された共有は取り消されません。

初回アクセス後の期限

送信者は別の破棄タイマーを有効にすることができます。最初のサーバー アクセス セッションが許可されると、後で転送または復号化が失敗した場合でも、アトミックに開始されます。その後のセッションはすべて同じ締め切りになります。再度開いてもリセットされることはありません。固定有効期限、破棄時刻、セッション有効期限のいずれか早い方が適用されます。期限が来ると、サービスはそれ以上の読み取りを拒否し、暗号文を削除のキューに入れますが、ネイティブ ビューアは閉じて共有キーと一時ファイルを解放します。クリーンアップは非同期であり、スクリーンショット、変更されたクライアントの保持データ、または以前にエクスポートされたコピーを消去することはできません。

オプションのボールトアクティビティ

ネイティブ監査ログはデフォルトではオフになっており、各デバイスのコンテナーごとに構成されます。最新の 500 件のローカル イベントは、ボールトのマスター キーと専用の認証されたコンテキストを使用して暗号化されます。これらはキー、パターン、ファイルの内容、その他のボールトのデータを除外し、同期せず、クリアまたは無効にすることができます。これらは改ざん防止の証拠ではありません。失敗したロック解除はボールトに割り当てられません。

ログを有効にして作成された新しい制御された共有は、共有サービス上に最大 100 個のアクセス セッション タイムスタンプを保持します。管理機能のみがそれらを取得できます。ログには受信者の ID や復号化の秘密は含まれません。ローカルログを無効にすると、将来の共有に影響します。既存の共有ログは、取り消しまたは有効期限が切れてクリーンアップされるまで、元の設定を保持します。

オプションの暗号化された侵入写真

所有者は、各デバイスの各保管庫に対して個別に侵入アラートを有効にすることができます。 3 つの一致しないパターンの後、フォアグラウンド アプリは、許可、カメラの可用性、および 1 分間のクールダウンを条件として、フロント カメラの写真をキャプチャできます。システムカメラのインジケーターは表示されたままになります。最新の 10 件のアラートはローカルに保存され、写真に追加されたりアップロードされたりすることはありません。一致しないパターンはターゲット コンテナーを識別しないため、オプトインされた各コンテナーは個別に暗号化されたデバイス試行レコードを受け取ります。

専用の RSA-3072 公開キーは、OAEP と SHA-256 および MGF1-SHA-256 を使用して、アラートごとに新しい 256 ビット AES-GCM キーをラップします。これにより、ボールトがロックされている間でも暗号化が可能になります。対応する秘密キー自体は、専用の認証されたコンテキストを使用して、そのボールトのマスターキーの下で暗号化されます。その保管庫のロックを解除するだけで、その写真を復号化できます。アラートは通常のアクティビティ ログとは別に監査ビューに表示され、侵入アラート設定でクリアできます。これらは改ざん防止の証拠ではありません。

Safe Exit はローカル アクセスを削除します

デバイス上の 1 つのボールトを Safe Exit に指定できます。そのパターンを入力すると、他のローカル ボールト レコード、暗号化されたチャンク、デバイスのロック解除マテリアル、およびキューに入れられた変更が削除されながら、通常どおり開きます。アプリは永続的なローカル許可リストを保持するため、同期は除外されたコンテナーをサイレントに再設定できません。すでに実行中の暗号化された転送は引き続き終了する可能性があります。

ネイティブ クラウド コピーと他のデバイス上のコピーは残ります。明示的なリカバリでは、新しいローカル パターンが登録される前に、除外されたボールトのリカバリ キーが必要です。個別のバックアップのないオフライン専用コンテナーは失われる可能性があります。この設定は、同じクラウド アカウントを使用するすべてのデバイスではなく、現在のインストールに適用されます。

Safe Exit は、法医学的な消去や隠蔽を保証するものではありません。フラッシュ ストレージ、オペレーティング システムのキャッシュ、バックアップ、および以前のエクスポートはトレースを保持できます。アプリのデータを削除または再インストールすると、ローカル分離境界が削除される可能性があります。クラウド レコードは、ネイティブ クラウド アカウントを通じて再度検出される可能性があります。回復シークレットのみがこれらのレコードのロックを解除できます。

目に見えて残るもの

暗号化により、すべての運用情報ではなく、コンテンツが隠蔽されます。ローカル レコードとクラウド プロバイダーは、識別子、レコードの関係、オブジェクトの数、サイズ、リビジョン、タイムスタンプ、暗号化されたキー ラッパー、およびストリーム ヘッダーを監視できます。識別子は UUIDv7 を使用し、作成時の情報が含まれます。それらは秘密ではありません。 Apple または Google は、ネイティブ同期アクティビティをプラットフォーム アカウントに関連付けることができます。

Revault の制御された共有サービスは、暗号化されたパッケージのサイズ、パーツのチェックサム、有効期限設定、アクセス セッション数、およびオプションのセッション タイムスタンプを監視できますが、個別に配信された復号化シークレットは監視できません。 CloudKit の共有により、招待状と参加者の情報が Apple に公開されます。ネットワークおよび操作記録により、接続情報が公開される可能性があります。 Revault は匿名性やトラフィック分析耐性を提供しません。

HTTPS は、転送中のネットワーク リクエストを保護します。オンデバイス認証暗号化は、ローカルとクラウドに保存されているボールトのコンテンツを個別に保護します。トランスポート暗号化も暗号文も、いつ、どこで、どのくらいの量のデータが転送されるかに関するすべての事実を隠蔽するものではありません。

保護が終わる場所

ロックが解除されたコンテナーでは、必ず復号化された情報がアプリ セッションに公開されます。マルウェア、侵害されたオペレーティング システムやアプリ、画面を見ている誰か、または信頼できない受信者によってキャプチャされる可能性があります。デバイスのみのキー ストレージは追加の境界であり、デバイスが完全に侵害されることを保証するものではありません。予測可能なパターンは、ローカル秘密が侵害されると安全ではなくなります。

暗号化は、クラウドの削除、ランサムウェア、回復秘密の損失、プロバイダーによる記録の保留、または以前に有効だった暗号化状態全体のロールバックを防ぐことはできません。独立した暗号化バックアップを保持し、古いデバイスを削除する前に回復を確認します。取り消しでは、他の人がすでに保持しているスクリーンショット、エクスポート、またはコピーを取り消すことはできません。

Revault は独立したセキュリティ監査を受けていません。これらは実装された暗号設計についての説明であり、あらゆる侵入に対する認定や保証を行うものではありません。

既存のブラウザボルト

このリファレンスではネイティブ アプリについて説明します。既存のブラウザー コンテナーには、別個のアカウント、デバイス ストレージ、および Web クラウド モデルがあります。ブラウザ固有の S3 アップロードとブラウザ共有リンクは、ネイティブのクラウド同期ではありません。ブラウザ アカウントではモバイル アプリにサインインしません。暗号化されたバックアップとその回復キーを使用して、既存のブラウザ データをネイティブ ボールトに移動します。

セキュリティとアーキテクチャ