Skip to content

Security: ainyan03/prompt-relay

Security

SECURITY.md

セキュリティ

想定する利用環境

prompt-relay は LAN / VPN / Tailscale 等の信頼できるネットワーク内 での個人利用を想定しています。

脅威モデル

対応している範囲

  • HTTPS による通信の暗号化: サーバは自己署名証明書を自動生成し、HTTPS (ポート 3940) を提供します。Tailscale 証明書や Let's Encrypt 証明書の利用も可能です
  • ルームキーによるデータ分離: クライアントが送信する Bearer トークン(ルームキー)ごとにデータ空間が分離され、異なるキーのクライアントは互いのリクエストにアクセスできません
  • 揮発性ストレージ: 全データはインメモリで保持され、サーバ再起動で消去されます。ディスクへの永続化は行いません
  • 通知の取り違え防止: 古い通知から応答しても、サーバ側でキャンセル済みリクエストとして拒否されます

対応していない範囲

  • ルームキーの正当性検証: サーバは任意のキーでルームを作成できます。事前に登録されたキーとの照合は行いません。そのため、インターネットに直接公開すると第三者がルームを作成・参照できます
  • E2E 暗号化: プロンプト内容や選択肢のテキストはサーバ上で平文として保持されます。通信経路は HTTPS で暗号化されますが、サーバ自体が侵害された場合にはデータを保護できません
  • 認証の強度: ルームキーはパスワード的な文字列であり、レート制限やアカウントロックアウト等の総当たり対策は実装していません
  • 監査ログ: アクセスログはコンソール出力のみで、永続的な監査証跡は残りません

秘匿情報の管理

以下のファイルは .gitignore で除外されており、リポジトリにコミットされません:

  • server/.env — サーバ設定(VAPID キー、APNs 設定等)
  • server/certs/*.p8 — APNs 秘密鍵
  • server/certs/*.pem — HTTPS 証明書・秘密鍵

推奨事項

  • サーバはファイアウォールや VPN の内側で運用してください
  • ルームキーは十分な長さ(16 文字以上推奨)のランダム文字列を使い、他のサービスのパスワードと使い回さないでください
  • 複数人で 1 つのサーバを共有する場合は、ユーザーごとに異なるルームキーを使用してください

脆弱性の報告

セキュリティ上の問題を発見した場合は、Issue で報告してください。

There aren't any published security advisories