短く言うと、Senvra は入力されたパスワードを、写真、動画、ファイル、ノートを直接暗号化する鍵として使っているわけではありません。
プライベートスペースを作成すると、Senvra はまずランダムなスペース用マスターキーを生成します。パスワードと Space Access Key は、そのマスターキーを開くための別々の経路です。保護された内容はスペースキーとアイテムキーの体系の下に残るため、パスワード変更時にはパスワード側のラッパーだけを置き換えられ、暗号化済みファイルをすべて書き直す必要はありません。
Senvra の安全設計を見るときに重要なのは、単に「暗号化しているか」だけではありません。鍵がどう分離されているか、パスワード変更時に何が変わるのか、復旧の境界がどこにあるのかです。より広いローカルファーストの設計については、Senvra の製品ガイド も参照できます。
パスワードはファイル鍵ではない
単純な写真ロッカーなら、ユーザーのパスワードを直接使いすぎる設計もあり得ます。しかし、それは理想的ではありません。人間が覚えられるパスワードは、通常、ランダムな暗号鍵よりもエントロピーが低く、各ファイルの長期的な直接鍵としては適していません。
Senvra は別の構造を使います。
- 各プライベートスペースには、ランダムな 256-bit マスターキーが作成されます。
- 入力されたパスワードは、そのスペース固有の salt と組み合わせられ、PBKDF2-HMAC-SHA256 でストレッチされます。現在の本番パラメータでは 600,000 回の反復を使います。
- 派生されたパスワード鍵は、マスターキーの暗号化ラッパーを開くために使われます。
- ロック解除後、マスターキーによって暗号化されたスペース情報とアイテムキー体系にアクセスできます。
この違いが重要です。パスワードはスペースキーを開くための権限材料であり、すべての暗号化オブジェクトにコピーされる長期ファイル鍵ではありません。
横にスワイプして図全体を表示
図を生成できませんでした。下でソースを確認できます。
図のソースを表示
flowchart LR
P[入力されたパスワード] --> KDF[PBKDF2-HMAC-SHA256 + スペース salt]
AK[Space Access Key] --> HKDF[HKDF-SHA256 + Access Key salt]
KDF --> PW[パスワードラッパー]
HKDF --> RW[復旧ラッパー]
PW --> MK[256-bit スペースマスターキー]
RW --> MK
MK --> IK[アイテムキーと暗号化されたスペース状態]
IK --> DATA[AES-256-GCM で保護されたメディア、メタデータ、サムネイル]
Space Access Key の役割
Space Access Key はパスワードのヒントではありません。そのプライベートスペースのために独立して生成されるランダムな復旧材料です。Senvra では、スマートフォンとは別の場所に保管しやすいよう、グループ化された 16 進数テキストとして表示されます。
内部的には、Space Access Key はパスワードとは別の派生経路を通ります。同じマスターキーに対する別の暗号化ラッパーを開けます。これにより、Senvra がサーバー側のパスワードリセット機構を持ったり、ユーザーの代わりに鍵を保管したりしなくても、ユーザー自身が復旧経路を持てます。
そのため、Space Access Key は忘れたパスワードの再設定にも使えます。有効な Access Key が残っていれば、Senvra は復旧ラッパー経由でスペースマスターキーを開き、新しいパスワード用のラッパーを作成できます。
実際に内容を保護しているもの
スペースマスターキーは、そのプライベートスペースの境界を定義します。個々の保護対象アイテムは、その境界の下でさらに暗号化された鍵材料を持ちます。大きなメディアファイルは境界付きのチャンクに分割され、各チャンクは AES-256-GCM の認証付き暗号で封印されます。メタデータやサムネイルも、平文の付随情報として残されるのではなく保護されます。
認証付き暗号が重要なのは、バイト列を隠すだけでは不十分だからです。アプリは、改ざん、切り詰め、チャンク順序の入れ替え、暗号化データの誤った文脈への移動も拒否する必要があります。Senvra は、保護データを本来のスペース、アイテム、メタデータの役割、またはチャンク順序に結び付けることで、検証の境界を明確にしています。
なぜパスワード変更が速いのか
プライベートスペースのパスワードを変更するとき、Senvra はまず現在の権限で既存のマスターキーを開けることを確認します。次に、新しいパスワードと新しい salt から新しいパスワードラッピング鍵を派生し、同じマスターキーを新しいパスワードラッパーで再封印して、更新後の認証情報をコミットします。
暗号化済みメディアファイルを一つずつ復号して書き戻す必要はありません。下にあるスペースキーとアイテムキーは変わっていないからです。変わるのはパスワードラッパーであり、コンテンツ暗号化層ではありません。
これは、多くのよく設計された暗号化システムが key wrapping を使う実用的な理由でもあります。人間の認証情報は入れ替えられても、巨大なオブジェクトをすべて書き直す必要はありません。
この設計が主張しないこと
この設計は、パスワードのローテーションを現実的にし、復旧をユーザーの管理下に置くためのものです。ただし、あらゆる状況で万能の安全性を約束するものではありません。
デバイスや OS が侵害されている場合、ロック解除中にパスワードを見られた場合、ユーザーがファイルを別のアプリに書き出した場合、またはパスワードと Space Access Key の両方を失った場合、それらは単純な暗号化の約束を超える領域です。Senvra はプライベートスペース用のサーバー側復旧バックドアを保持しません。
より正確な約束は、私的な内容をローカルで処理し、独立した鍵と認証付き暗号で保護し、復旧はユーザー自身が管理する認証情報だけに依存する、ということです。