← そなえナビ TOPへセキュリティ仕様
技術ホワイトペーパー
そなえナビのセキュリティ仕様
バージョン: 2026-05-19 / 適用範囲: app/sonae/* と lib/sonae/* の暗号化対象項目
サマリ
- マスターパスワードを設定した時点から、機密フィールドはご自身のブラウザ内で AES-256-GCM 暗号化されてからサーバーに送信されます。
- 鍵導出は PBKDF2-SHA256 600,000 反復(OWASP 2023 推奨値)。マスターパスワード本体は送信もログ記録もしません。
- 家族継承用の鍵は招待 URL の末尾
#k=...(フラグメント)に埋め込みます。フラグメントは仕様上サーバーに送信されません。 - 長期不在の自動配信(デッドマンスイッチ)を有効化すると、設定期間アクセスがないとサーバー側のバックアップ鍵を自動破棄します。
- マスターパスワード未設定の項目、およびサービス名・カテゴリ・更新日時などのメタデータは平文でサーバーに保管されます。
1. 暗号アルゴリズム
| 鍵導出関数 (KDF) | PBKDF2-SHA256 / 反復回数 600,000 / 出力 256bit |
| 対称暗号 | AES-256-GCM / 認証付き暗号 / nonce 96bit (CSPRNG) |
| salt | 128bit / アカウントごとに生成 / Postgres に保管 (公開情報) |
| 乱数源 | crypto.getRandomValues (Web Crypto API) |
| リカバリーキー | 32byte (256bit) CSPRNG / Base64 表記 |
| 家族継承鍵 (FK) | 32byte (256bit) CSPRNG / URL フラグメント Base64 |
実装: lib/sonae/crypto.ts・lib/sonae/unlock.ts
2. 鍵階層
- MK(Master Key): ユーザーのマスターパスワードと salt から PBKDF2 で導出。 端末メモリ(SessionStorage)にのみ保持し、サーバーには送信しない。
- DK(Data Key): アカウントごとに乱数生成(256bit)。MK で暗号化した
encDataKeyByMkをサーバーに保管。 - FK(Family Key): 家族招待ごとに乱数生成(256bit)。MK で暗号化した
enc_fk_by_mkをサーバーに保管し、FK で暗号化したenc_data_key_by_fkも保管。FK そのものは URL フラグメントとして家族へ配布。
家族側端末は、招待リンクの #k=FK と、サーバーから受け取った enc_data_key_by_fk から DK を復号し、暗号化された機密項目を読みます。サーバーは DK・FK の平文を一切保持しません。
3. 暗号化対象と非対象
暗号化される
- 銀行・サブスク・SNSの「保管場所のヒント」「家族向けメモ」「カード末尾4桁」
- 希望事項(葬儀・医療意思・家族へのメッセージ)の本文
- 連絡先の電話・メール・住所・メモ
暗号化されない(平文保管)
- サービス名・銀行名(家族の手続きに必要なため)
- カテゴリ・on_death_action・disclosure_mode などのメタデータ
- 招待先のメールアドレス(送信のため)
- 最終アクセス日時(デッドマンスイッチ用)
4. 家族継承プロトコル
- 本人が招待ボタンを押すと、クライアントで FK(32byte 乱数)を生成。
- FK を MK で暗号化(
enc_fk_by_mk)、DK を FK で暗号化(enc_data_key_by_fk)し、両方をサーバーに送信。 - FK の Base64 を URL の
#k=フラグメントに付与。本人はそのリンクを家族へ手渡し(LINE・メール・印刷)。 - 家族が Emergency Access を申請し、本人が応答しない場合、待機期間(標準 30 日)を経て自動 GRANT。
- 家族が招待リンクを開くと、フラグメントの FK でサーバー保管の
enc_data_key_by_fkを復号し DK を取得。DK で暗号化済み機密項目を復号して表示。
5. デッドマンスイッチ
本人が指定期間(90 〜 730 日)ログインしない場合、サーバー側に保管された encDataKeyByMk を自動削除します。これにより、本人死亡後にサーバー侵害があっても暗号化済み項目は復号できなくなります。家族側の FK 配布経路は別途存続するため、家族継承は影響を受けません。
実装: app/api/cron/sonae-deadman-check/route.ts
6. 守る対象・守らない対象(脅威モデル)
| 脅威 | 本サービスの対応 |
|---|---|
| サーバー単独侵害 | 暗号化済み機密項目は復号不可。サービス名等のメタデータは漏洩可能性あり。 |
| 運営者の内部不正 | 暗号化済み機密項目は復号不可。マスターパスワードは保管していない。 |
| 本人端末の侵害(マルウェア・盗難) | セッション中のMK/DKがメモリにあるため復号可能。守備範囲外。 |
| 本人のマスターパスワード漏洩 | 復号可能。守備範囲外。 |
| 家族の招待URLの第三者奪取 | Emergency Access の待機期間中の本人による拒否で防御可能。GRANT 後は復号可能。 |
| サービス終了 | 6ヶ月前通知+全データを PDF/JSON でユーザーへ自動配信。 |
7. ロードマップ(公開予定)
- 第三者セキュリティ監査(Cure53 / Trail of Bits 軽量レビュー相当)の予算化と監査レポート公開
- クライアント暗号化部分(
lib/sonae/crypto.ts)の検証用 GitHub 公開リポジトリ - 暗号資産シードフレーズ向け BIP39 12/24単語入力UI
- disclosure_mode の 3 値化(public / restricted / secret)と受信者単位の開示制御
- マスターパスワード未設定でも家族共有を可能にする「縮退モード」