Submarine がパスワードを守るしくみ
Submarine は、保管庫をデバイスから送り出す前に、デバイス上で暗号化します。保管庫を保存するサーバーに見えるのは暗号化されたデータだけで、間に Submarine のアカウントや Submarine のサーバーが入ることもありません。このページでは、何がどのように守られているのか、そしてまだできていないことは何かを説明します。
保管庫の鍵
保管庫にはそれぞれ専用の鍵があり、保管庫を作成したときにデバイス上で作られます。この鍵を持っている人だけが保管庫を開けます。サーバーにも、私たちにも開けません。
- 保管庫を作成すると、Submarine がその鍵を表示します。紙に書き留める、すでに使っているパスワードマネージャーに保存するなど、安全な場所に保管してください。
- 好きなパスワードで鍵を暗号化して保管することもできます。その場合、保管庫を開くには、暗号化された鍵とそのパスワードの両方が必要です。
- なくした鍵は誰にも復元できません。アカウントもリセット用のリンクもないため、鍵のコピー、または暗号化された鍵とそのパスワードのコピーを必ず残しておいてください。
デバイス上での保護
- 保管庫は各デバイス上で、そのデバイスの鍵で暗号化されます。
- その鍵はロック用パスワードで保護されます。Submarine は Argon2id を使ってロック用パスワードから鍵を作ります。Argon2id は、パスワードの推測に時間とコストがかかるように設計された方式です。ロック用パスワードを忘れた場合も復元はできません。そのときは、各保管庫をその鍵でもう一度開くことになります。
- ロック用パスワードの代わりに、指紋、顔認証、画面ロックで Submarine のロックを解除できます。
- Submarine は、選んだ時間(即時から数時間まで)が経つと自動的にロックし、ロックするときに保管庫をメモリから消去します。
- コピーしたパスワードは、選んだ時間が経つとクリップボードから消去されます。
- Android では、許可しない限り、Submarine のスクリーンショットと画面録画はブロックされます。
サーバー上での保護
保管庫は Nostr のリレーに保存されます。リレーは独立した運営者が運営するオープンなサーバーで、誰でも利用したり運営したりできます。各保管庫は複数のリレーにコピーされるため、どれか一つが止まっても失われません。保管庫を保存するリレーは、自分で運営するリレーも含めて自由に選べます。
変更を加えるたびに、その変更はデバイス上で暗号化され、封をした封筒に入れてリレーに送られます。リレーに見えるのは次のものです。
- リレー自身には読めない、暗号化されたデータ。
- 保管庫の公開鍵。これでどの封筒が同じ保管庫のものかはわかりますが、中身はわかりません。
- 変更した時刻ではなく、変更前の 2 日間からランダムに選ばれた日時。
- ほかのウェブサイトを訪れたときと同じく、あなたの IP アドレス。
リレーがパスワードを書き換えることもできません。変更にはすべて保管庫の鍵で署名されており、Submarine は保管庫が署名していないものをすべて無視します。
アカウントなし、トラッキングなし
- Submarine のアカウントはなく、あなたのデータを保管する Submarine のサーバーもありません。
- Submarine には、分析ツールもクラッシュレポートも広告もありません。
- コードは MIT ライセンスのオープンソースなので、Submarine が何をしているかを誰でも確認できます。ソースコードを見る。
まだできていないこと
Submarine のセキュリティは、まだ第三者機関による監査を受けていません。監査を受けるまでは、メールや銀行など特に大切なパスワードは実績のあるパスワードマネージャーで管理し、それ以外のパスワードから使い始めてください。
セキュリティ上の問題を見つけた場合は、報告していただくか、Nostr でご連絡ください。
技術的な詳細
フォーマットの全体は Nostr Passwords プロトコルで説明されています。
- 保管庫は Nostr の鍵ペアです。鍵は
nsecとして表示され、暗号化された形式は NIP-49 のncryptsec(scrypt のあとに XChaCha20-Poly1305)です。 - 変更はそれぞれ、アイテムの新しいバージョンです。保管庫が署名したイベントを、NIP-44(ChaCha20 と HMAC-SHA256。正確な長さを隠すためにパディングを追加)で保管庫宛てに暗号化し、NIP-59 のギフトラップに入れます。ギフトラップは使い捨ての鍵で署名され、直前の 2 日間からランダムに選ばれた日時が付けられます。
- アイテムは Bitwarden のアイテムそのものです。そのため、Submarine は Bitwarden の形式でインポートとエクスポートができます。
- デバイス上では、保管庫の鍵はデバイスの鍵を使って AES-256-CBC と HMAC-SHA256 で暗号化されます。デバイスの鍵は、Argon2id を通じてロック用パスワードで保護されるか、システムの安全なストレージに保存されます。保管庫のローカルコピーは AES-256-GCM で暗号化されます。
- Nostr を使っている場合は、外部署名に保管庫の鍵を預け、鍵が Submarine に一切入らないようにできます。使えるのは、リモート署名の bunker(NIP-46)、Amber などの署名アプリ(NIP-55)、ブラウザ拡張機能(NIP-07)です。