KeyManagerApp: 完全ローカル暗号化のキーマネージャー
KeyManagerApp は完全ローカルなキーマネージャーだ。マスターキーで解錠し、閉じれば施錠、すべてのエントリは自分のマシン上の 3 つのファイルにしか残らない。ネットにつながず、同期せず、第三者を経由しない。パスワードをどこかのクラウドサーバーに預けるのが不安な人、同期経路が見えないのが気になる人、そういう用途向けだ。
GUI は PySide6 で組んだ。本物のデスクトップウィンドウなので、ブラウザのタブを開き直す必要はない。Qt6 のウィジェット、クリップボード、テーマはすべて揃っている。ロジック全体は 1 つの main.py に詰め込んである。ログイン、メイン画面、設定、暗号化・復号がすべてそこにある。個人ツールなら、きれいに階層化するより一目で読み切れることのほうが大事だ。
暗号化がコアで、車輪の再発明はしていない。マスターキーはまず Scrypt で派生させ(n=2^14, r=8, p=1, 16 バイトのランダムソルト)、派生した key を cryptography ライブラリの Fernet に渡して AES 認証暗号化を行う。ソルトは初回起動時に secrets でランダム生成し、salt.dat に書き出す。データは 3 つのファイルに分ける。salt.dat にソルト、settings.dat に暗号化した設定、data.dat にエントリ本体を格納し、3 つとも .gitignore に入れてある。誰かが data.dat を手に入れても、マスターキーもソルトもなければ、ただの暗号文の塊にすぎない。
マスターキーを失えば完全におしまいだ。復旧の入口はない、そういう設計だ。移行するときは 3 つのファイルをまとめて運ぶ。気に入っているパラノイアな設定が 2 つある。失敗試行が上限を超えると即座にデータ破棄が発動すること、そしてツールバーのワンクリックで 3 つのファイルをまとめて消去し、取り消しはできないこと。残りはついでに足したものだ。2FA のバックアップコードや秘密の質問を持たせるためのカスタムキーバリューペア、ワンクリックコピー、二次認証、マスターキー変更による再暗号化、いくつかのテーマとランダム背景画像。
いまは 0.1.0、MIT。主に Windows でテストしていて、ほかのプラットフォームではネットワーク機能を検証していない。CI は python -m compileall で構文チェックを走らせるだけで、自動テストはまだない。