Skip to content

feat(keychain): Linux で secret-service を優先シークレットストアにする#35

Merged
hitalin merged 1 commit into
mainfrom
feat/secret-service-store
Jul 16, 2026
Merged

feat(keychain): Linux で secret-service を優先シークレットストアにする#35
hitalin merged 1 commit into
mainfrom
feat/secret-service-store

Conversation

@hitalin

@hitalin hitalin commented Jul 16, 2026

Copy link
Copy Markdown
Collaborator

なぜ

notedeck-dev/notedeck#786 の実装。#785 で Linux (keyutils) は「再起動非永続 → DB フォールバックを残す」挙動にしたが、GUI デスクトップに原則存在する secret-service (gnome-keyring / KWallet) を使えば at-rest 暗号化 + 再起動永続が得られ、DB から平文トークンが自然に消える。

設計の要点

  • 選択は D-Bus 接続可否ではなく roundtrip probe — WSL2 の gnome-keyring のように「daemon は応答するが default collection が無く書込だけ失敗する」中間状態が実在する(実機で確認済み: ReadAlias default/ を返し、書込は result not returned from SS API で失敗)。接続成功だけで選ぶと永続ストアと誤認して危険
  • probe 失敗時は従来どおり keyutils に劣化 → is_persistent() が false → DB フォールバック維持(#785 の仕組みにそのまま乗る、フラグ・設定追加なし)
  • secret-service 選択時は既存の lazy migration が DB の平文トークンを secret-service へ載せ替えて DB をクリアする(移行コード追加なし)
  • 依存: zbus-secret-service-keyring-store 0.3(keyring-core 0.7 互換・pure Rust・openssl 非依存・async-io なので tokio と実行時競合しない)。1.0 系は keyring-core 1.0 が必要なため、エコシステム一括更新は別途

テスト

  • is_persistent_matches_selected_store: 選択された store の vendor と永続性の整合を検証(secret-service 環境 / keyutils 環境の両方で意味を持つ)
  • roundtrip_against_real_store (--ignored): 実環境 keyring への store/get/delete roundtrip。WSL2 実機で「secret-service 拒否 → keyutils 劣化 → roundtrip 成功」を確認済み

未検証

  • 実デスクトップ Linux (gnome-keyring がアンロック済みの環境) での probe 成功 → secret-service 永続化の end-to-end。コードパスは probe と同一 API なのでリスクは低いが、デスクトップ実機での動作確認が望ましい

🤖 Generated with Claude Code

GUI デスクトップに原則存在する secret-service (gnome-keyring / KWallet)
を keyutils より優先し、at-rest 暗号化 + 再起動永続を得る
(notedeck-dev/notedeck#786)。

選択は D-Bus 接続可否ではなく roundtrip probe で行う。WSL2 の
gnome-keyring のように「daemon は応答するが default collection が無く
書込だけ失敗する」中間状態があり、接続成功だけで選ぶと永続と誤認する
ため (実機で確認)。probe に失敗した環境は従来どおり keyutils に劣化し、
再起動非永続なので DB フォールバックが正となる (notedeck#785 の
is_persistent() ゲートにそのまま乗る)。

secret-service が使える環境では、既存の lazy migration が DB の平文
トークンを secret-service へ載せ替えて DB をクリアする。

zbus-secret-service-keyring-store 0.3 (keyring-core 0.7 互換, pure Rust)
を rt-async-io-crypto-rust で採用 — openssl 非依存、tokio と実行時競合
しない。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant