セキュリティアーキテクチャ:技術スタック全体像

Vaultaireは単一のアルゴリズムや単一の巧みなトリックに依存しない。すべてのコンポーネントが特定の役割を持ち、一つのレイヤーが失敗しても他のレイヤーを侵害しない、階層的な暗号化アーキテクチャを使用する。プライベートデータと外部世界の間に立つすべての暗号方式、プロトコル、設計上の決断がここにある。

Vaultaireは、保管庫のインデックス、ラップされた鍵、ファイルヘッダー、コンテンツ、サムネイル、メタデータの認証付き暗号化にAES-256-GCMを使う。PBKDF2-HMAC-SHA512は、パターンとデバイス共通のKeychainソルトからローカルの保管庫キーを導出する。その保管庫キーが別のランダムな256ビットのマスターキーをラップし、マスターキーがアプリのプロセス内でCryptoKitを通じてファイルを暗号化する。

暗号化スタック

Vaultaireは複数の暗号メカニズムを組み合わせて使い、それぞれに特定の役割を持たせている。PBKDF2は人が覚える認証情報を保管庫キーやリカバリーキーに変換する。AES-256-GCMはインデックス、鍵ラッパー、メタデータ、サムネイル、ファイルの内容を保護する。ランダムなマスターキーは、長く使うファイル暗号化を変更可能なパターンから切り離す。KeychainとiOSのData Protectionは、デバイスがロックされている間、デバイスに紐づいたソルトとリカバリー記録を保護する。開発者が保管庫の平文に日常的にアクセスできるような、事業者保有の復号鍵は存在しない。

複雑さそのものが目的ではない。各レイヤーは異なる攻撃面に対応する。AES-256-GCMは機密性と認証を組み合わせるため、改変された暗号文は検証に失敗する。PBKDF2は、パターンやフレーズを1つ試すごとのコストを上げる。ランダムなマスターキーがあるので、パターンを変えてもすべてのファイルを再暗号化せず、鍵を1つラップし直すだけで済む。Keychainのデータ保護はローカルのソルトとリカバリー記録を守る。一方でアプリは、対称暗号化がプロセスのメモリ内で行われることを明示している。

これらのレイヤーは多層防御のアーキテクチャを形作るが、すべてが独立した障壁というわけではない。推測したパターンはインデックスのファイル名やAES-GCMの認証と照合して確かめられるし、ロック解除中に侵害されたデバイスでは、アプリのプロセス内の鍵や平文を観察される可能性がある。したがってこのアーキテクチャは、AES自体の強度に加えて、認証情報のエントロピー、PBKDF2のコスト、iOSのデバイス保護、認証付き暗号化の正しい扱いに依存する。

多層防御

Vaultaireの階層は、鍵のかかった入れ子の容器だと考えるとよい。パターンから導出した保管庫キーが認証済みのインデックスを開く。インデックスはラップされたランダムなマスターキーを取り出す。そのマスターキーがファイルとメタデータを保護する。PBKDF2、AES-GCM、Keychain、iOSのData Protectionはそれぞれ異なる性質を担うが、セキュリティの強さはチェーン全体の強さを超えない。

AES-256-GCM:ファイル暗号化

Vaultaireに保存するすべての写真、動画、書類はAES-256-GCMで暗号化される。これは256ビット鍵を使うAdvanced Encryption Standardをガロア/カウンターモードで動かす方式だ。Vaultaireは保管庫のインデックス、ファイルヘッダー、サムネイル、鍵エンベロープにもAES-GCMを使う。アルゴリズムと鍵長は標準化されているが、Vaultaireのセキュリティはノンスの扱い、鍵管理、認証情報の強さ、実装の正しさにも依存する。

AES-256の「256」は鍵の長さをビットで表す。256ビット鍵は2256 の可能な値を持つ。この数字を理解するために:観測可能な宇宙にはおよそ1080 個の原子がある。すべての原子がビッグバン以来毎秒10億個の鍵をテストするスーパーコンピューターだったとしても、鍵空間の1兆分の1の1兆分の1のパーセントも探索できない。AES-256の鍵を総当たりで探すのは現実的ではない。そのため攻撃者は、鍵そのものではなくパターンのような人が選ぶ部分を狙う。

GCMモードが重要な理由

AESはブロック暗号だ——128ビットのチャンクでデータを暗号化する。「モード」がそれらのチャンクをどう組み合わせるかを決定する。GCM(ガロア/カウンタモード)はCBCのようなよりシンプルなモードが提供しない二つのものを提供する:並列化された暗号化と組み込みの認証だ。

認証の部分が重要だ。GCMは暗号化されたすべてのファイルに対して暗号化タグを生成する。このタグは改ざん封印として機能する。悪意のある攻撃者によるものでも、破損したディスクセクタによるものでも、暗号文の1ビットでも変更されると、認証タグが一致せず、復号が失敗する。破損したデータを受け取るのではない。何かが間違っているという明確なシグナルを受け取る。この特性は認証付き暗号化と呼ばれ、攻撃者が暗号化データを変更して復号出力を操作する攻撃のクラス全体を防ぐ。

PBKDF2:鍵導出

Vaultaireは用途ごとに異なる鍵を導出する。パターンとデバイス共通のKeychainソルトをPBKDF2-HMAC-SHA512に入力し、600,000回の反復でローカルの保管庫キーを作る。別途、パターンからの決定的な導出でクラウドバックアップ用の鍵を作る。正規化したリカバリーフレーズは800,000回のPBKDF2反復を経て、リカバリー用エンベロープの鍵になる。出力が256ビットだからといって、人が覚える認証情報が256ビットのエントロピーを持つことにはならない。

PBKDF2があなたのパターンを守る方法

PBKDF2の核となる考え方は、意図的に手間をかけさせることだ。シリアライズしたパターンや正規化したフレーズに対して、HMAC-SHA512を数十万回繰り返す。正規のユーザーがこのコストを払うのは、ロック解除やリカバリーのときの1回だけだ。攻撃者は候補ごとにこのコストを払うが、実際の推測速度は並列ハードウェアと実装の選択で決まる。

Vaultaireはパターンから導出する鍵について、PBKDF2の反復回数を600,000回に設定している。これで推測1回あたりのコストは上がるが、責任ある攻撃見積もりには、候補1つあたりの実測時間とハードウェアの前提を明記する必要がある。候補1つにちょうど1ミリ秒かかるとすると、10億回の逐次推測にかかるのは数年ではなく約11.6日だ。出力が256ビットでも、予測しやすいパターンのエントロピーは増えない。

ローカルのパターン導出には、デバイスごとに1つの暗号論的にランダムなソルトを使い、WhenUnlockedThisDeviceOnlyのKeychain項目として保存する。ソルトは秘密ではなく、そのデバイス上のすべての保管庫で共有される。あるデバイス向けに作ったテーブルを、ソルトの異なる別のデバイスにそのまま使うことは防げるが、同じデバイス上の保管庫ごとに攻撃者を一からやり直させるわけではない。

256-bit
暗号化鍵の長さ
6
暗号化レイヤー数
0
サーバーに保存される鍵数

AES-256-GCM: メタデータ保護

ファイルの内容を暗号化するだけでは不十分だ。ファイル名、作成日、サムネイルの寸法、保管庫構造はすべてメタデータだ——そしてメタデータはデータ自体と同様に多くを明かすことがある。「tax-return-2025.pdf」という名前のファイルは、内容が暗号化されていても攻撃者に中身を正確に伝える。タイムスタンプは保管庫を使用した時期を示す。サムネイルサイズは何かが写真か動画かを明かす。

Vaultaireはこのメタデータを、ChaCha20ではなくAES-256-GCMで保護する。ファイル名とMIMEタイプは暗号化されたファイルヘッダーに格納される。暗号化された保管庫インデックスには、ファイル記録、日付、サイズ情報、ストレージの配置、ラップされたマスターキーが含まれる。サムネイルデータもランダムなマスターキーで暗号化される。

メタデータに認証暗号化を使用する理由

メタデータには機密性だけでなく完全性も必要だ。AES-GCMは暗号化した値ごとに認証タグを生成するので、Vaultaireは改変されたヘッダー、インデックス、サムネイル、エンベロープを、攻撃者が操作した平文として受け入れずに拒否できる。この設計は、実装にない暗号の多様性を謳うのではなく、これらのストレージ形式全体で意図的に1つの認証付き暗号方式を使っている。

暗号が同じでも、同じ鍵やノンスを無造作に使い回すわけではない。保管庫キーはインデックスを保護し、ランダムなマスターキーをラップする。マスターキーはファイルのデータを保護する。CryptoKitは新しいノンスで認証付きのsealed boxを作り、Vaultaireのストリーミング形式は順序付きのチャンクごとに別々のノンスを導出する。保証の根拠は、メタデータ用の2つ目の暗号ではなく、鍵の分離、ノンスの規律、認証にある。

ゼロ知識アーキテクチャ

あらゆるセキュリティアプリについて問うに値する質問がある:背後にある会社がハッキングされたり、召喚状を受けたり、単純に悪意を持つようになったりしたらどうなるか?

ほとんどのアプリでは、答えは不快だ。彼らはあなたのデータ、鍵、またはその両方を保持する。裁判所命令が手渡しを強いる。データ侵害が露出させる。不正な従業員がアクセスする。アプリのセキュリティは会社の運用セキュリティと同じ強さしかない——そして歴史は企業が定期的に侵害されることを示している。

Vaultaireは、パターン、秘密のフレーズ、復号鍵、読める状態の保管庫の中身を受け取るアカウントサービスやストレージサービスを運営していない。暗号化と復号は、デバイス上のアプリのプロセス内で行われる。iCloudバックアップが有効なとき、アプリは認証付きの暗号文を、Vaultaireが管理する保管サービスではなく、あなたのプライベートなCloudKitデータベースに送る。

ゼロ知識が実際に意味すること

法執行機関が保管庫の平文を求める召喚状をVaultaireに送っても、同社は復号に必要なパターン、リカバリーフレーズ、保管庫キー、バックアップキー、マスターキーを持っていない。暗号化されたiCloudの記録は、ユーザーのCloudKitプライベートデータベースにある。ただしデバイス上では、リカバリー用のデータが暗号化されたKeychainデータベースに保存され、CryptoKitが開いている保管庫を暗号化・復号している間は、対称鍵がアプリのメモリ上に存在する。

この事業者側の境界はアーキテクチャ上の性質であり、クライアント環境のあらゆる部分を信頼モデルの外に置けるという約束ではない。Vaultaireは、通常の保管庫復旧のために差し出せるサーバー側の復号鍵を持っていない。一方で、配布されたアプリ、iOS、ロック解除されたデバイス、暗号実装は読める状態のデータを扱えるため、それ相応に信頼する必要がある。

設計によって誰も信頼しない

Vaultaireの事業者側の境界は、会社が保有する復号鍵を通常の設計から取り除く。これにより、Vaultaire自体が侵害されたときに漏れうる範囲が小さくなる。それでも、配布されたクライアント、iOS、デバイスの状態、文書化された鍵階層の実装を信頼する必要はなくならない。これらの境界は、1つの絶対的な約束にまとめず、個別に評価するべきだ。

Keychainとアプリのプロセス境界

AppleのSecure Enclaveは対応する秘密鍵を保護でき、プラットフォームのセキュリティアーキテクチャの一部を担っている。しかしその公開APIは、PBKDF2で導出した任意の対称鍵を受け取ってVaultaireのAES-GCMファイル処理をコプロセッサ内で実行することはできない。そのためVaultaireは、自らの保管庫暗号を「Secure Enclave AES」とは説明しない。

Vaultaireは、ランダムなデバイスソルト、暗号化されたリカバリーデータベース、そのデータベースを守るランダムな鍵を、通常のiOS Keychainの汎用パスワード項目として保存する。これらの項目はWhenUnlockedThisDeviceOnlyのアクセシビリティクラスを使う。KeychainとData Protectionは、特にiPhoneがロックされている間、意味のあるデバイス境界を作るが、このアーキテクチャはエクスポートできないSecure Enclave鍵とは別物だ。

パターンを描くと、CommonCryptoがアプリのプロセス内で保管庫キーを導出する。続いてCryptoKitとVaultaireのCryptoEngineが、そのプロセス内の対称鍵のバイト列を使ってインデックスを認証・復号し、マスターキーのラップを解き、ファイルを処理する。アプリはロック時にアクティブな状態を消去する。それでも、ロック解除中のセッションを観察できるほどの権限を持つ攻撃者には、ロックされたデバイスの暗号文しか持たない検査者とは違う機会がある。

ジェイルブレイクされたり、その他の方法で侵害されたりしたOSは、パターン入力、アプリのメモリ、復号されたプレビュー、書き出し、画面を狙える。設計がiOSのプロセス分離、Keychain、Data Protectionに依存しているため、Vaultaireはジェイルブレイクしていない最新のiPhoneを推奨する。ルート権限の侵害を受けても開いている保管庫の対称鍵に手が届かない、とは主張していない。

ファイルごとの初期化ベクトル

同じ鍵で二つの同一ファイルを暗号化すると、ナイーブな実装では同一の暗号文が生成される。これは問題だ。二つの同一の暗号化ブロブを見た攻撃者は——何も復号することなく——二つの元のファイルが同じであることを知る。写真でいっぱいの保管庫では、この種のパターン分析が暗号化を通じてさえ情報を明かすことができる。

VaultaireはAES-256-GCMで封をするたびに新しい暗号論的ノンスを生成し、決定的な暗号文を防ぐ。ファイルヘッダーとファイルの内容は別々に封をし、大きなファイルには、ランダムなベースノンスと順序付きのチャンクごとに別のノンスを使う認証付きストリーミング形式を使う。そのため同じ写真を2枚保存しても、暗号化後の表現は同じにならない。

ノンスは暗号文と一緒に保存され、秘密ではない。求められるのは、同じ鍵の下で重複しないことだ。Vaultaireは一括暗号化のためにAppleの暗号論的乱数生成器から96ビットのノンスを取得し、ストリーミング形式ではベースノンスをヘッダーに記録する。衝突のリスクは1つの鍵で行う暗号化の回数で決まるため、実装は毎回新しい値を生成する。96ビットという長さを、296分の1という恒久的な保証として示すことはしない。

暗号化パイプライン
あなたのパターン
5×5グリッド入力
→
PBKDF2
高反復KDF
→
保管庫キー
インデックス+鍵ラッパー
→
ランダムマスターキー
AES-GCMでファイル+メタデータ

メモリ管理:アクティブな鍵の状態を消去する

セキュリティソフトウェアのよくある失敗は、不要になった後も機密データをメモリに残すことだ。暗号化鍵、導出されたパスワード、復号されたデータは、アプリがそれらを使い終わった後もRAMに長期間残ることがある。フォレンジックツールはデバイスメモリをダンプしてこれらの残骸を検索できる——コールドブート攻撃またはメモリダンプ分析として知られる技術だ。

Vaultaireは、アクティブな鍵の状態と復号されたUIデータが残る時間を制限する。アプリがロックされるか、セッションが終了すると、コードはいくつかの後処理を実行する。

  • アクティブな保管庫の状態を破棄する。 アプリは現在の保管庫キーのセッションを削除し、保管庫の中身を再び表示する前にロック解除を求める。
  • 鍵ラッパーが自身のバッファを消去する。 Vaultaireのセキュアなバイトコンテナは、解放されるときに自身が持つバッファを上書きする。
  • キャッシュしたマスターキーの状態を無効にする。 開いているインデックスのために保持している復号済みマスターキーは、該当するロック処理とキャッシュのリセット処理で破棄される。
  • Vaultaireが管理する範囲で、復号済みのUIキャッシュを消去する。 サムネイルとプレビューの後処理はアプリに残る状態を減らす。ただし、Swift、iOS、他のプロセスが作ったコピーまで管理できるとは主張しない。

次にVaultaireがロックされた状態で開いたら、パターンを描くと、アプリはインデックスを認証してマスターキーのラップを解く前に、保管庫キーをもう一度導出する。これはセッションの後処理であり、すべての一時的なメモリ上のコピーが検証可能な多重消去を受けたとか、Secure Enclaveの鍵参照が破棄されたという主張ではない。クラッシュするとiOSがプロセスを回収するが、突然の終了のたびに後処理のコードが走れるわけではない。

よくある質問

AES-256は本当に解読不能か?

AES-256は標準化され、徹底的に分析されたブロック暗号だ。ランダムな256ビット鍵で正しく実装されたAES-256-GCMに対する実用的な攻撃は公には知られていない。ただし、それで保管庫全体が破られないことにはならない。認証情報のエントロピー、PBKDF2のコスト、ノンスの扱い、鍵の保管、リカバリー、デバイスの状態、実装上の欠陥は、依然として攻撃経路になる。

なぜ鍵導出にPBKDF2を使用するのか?

VaultaireはCommonCryptoを通じてPBKDF2-HMAC-SHA512を使う。反復回数はパターンで600,000回、リカバリーフレーズで800,000回だ。ローカルのパターン導出には、Keychainに保存したデバイス共通のランダムなソルトを1つ使う。PBKDF2は推測1回あたりのコストを上げるが、パターンのエントロピーを増やすわけではない。そのため攻撃にかかる時間は、認証情報の強さ、実測したハードウェア速度、並列度で決まる。

Vaultaireはサーバーにどんなデータを送るか?

Vaultaireのサーバーがあなたのファイル、パターン、鍵を受け取ることはない。アプリが通信するサービスは4種類ある。暗号化されたiCloudバックアップはデフォルトでオンで、Appleが持たない鍵でデバイス上で暗号化された暗号文をあなたの個人のiCloudアカウントに保存する。オフにもできる。匿名の使用状況とクラッシュデータはデフォルトでPostHogに送られ、設定でオフにできる。フィードバックを送ると、フィードバックサービスがメッセージ、任意の返信用メールアドレス、言語、アプリのバージョンを受け取る。分析がオンの間は、Apple AdsのアトリビューショントークンとランダムなインストールIDが当社のサービスを経由してAppleに渡る。同期と共有は、使う場合にApple CloudKitを経由する。

ジェイルブレイクされたiPhoneは保管庫を侵害できるか?

ジェイルブレイクはデバイスの境界を大きく弱める。VaultaireのAES-GCM処理はCryptoKitを通じてアプリのプロセス内で実行されるため、保管庫が開いている間は対称鍵のバイト列がアプリのメモリ上に存在する。ルート権限での侵害は、入力、メモリ、スクリーンショット、復号後の出力を狙える。KeychainとData Protectionはデバイスのロック中も障壁を加えるが、VaultaireはAES鍵がSecure Enclave内に隔離されたままだとは主張していない。

メタデータはどのように暗号化されますか?

Vaultaireは保管庫のメタデータにChaCha20を使わない。ファイル名、MIMEタイプ、タイムスタンプ、サムネイルデータ、保管庫の構造、ラップされたマスターキーは、AES-256-GCMの認証付き暗号文の中で保護される。認証付き暗号の方式を1つに揃えることで、ストレージ形式全体で機密性と完全性のチェックが一貫する。

アプリがクラッシュしたら鍵はどうなるか?

iOSは終了したプロセスを回収する。次に起動したときは、Vaultaireがアクティブな鍵の状態を復元する前に、改めてロック解除が必要になる。VaultaireはセッションごとのSecure Enclave AES参照を作らない。鍵ラッパーは解放時にバッファを消去し、ロック処理はアクティブな状態を破棄するが、SwiftとiOSの仕組み上、クラッシュ前にすべての一時コピーが上書きされたとまでは保証できない。

スタックを実際に体験する

認証付き暗号化、階層化された鍵、コストの高い鍵導出、そして事業者が保有する保管庫キーはない。ここで説明したアーキテクチャを使うには、Vaultaireをダウンロードしよう。デバイスと認証情報の境界も、はっきり明記している。

Vaultaireを無料ダウンロード