セキュリティ アーキテクチャ

クライアント側暗号化(CSE)のプロトコルと、信頼を前提としない保存インフラの技術仕様です。

セキュリティの基本

  • エンドツーエンド暗号化は、お使いのブラウザ内で行われます。アップロード前にローカルで暗号化されるため、平文が端末の外に出ることはありません。
  • 暗号化と復号の鍵は、お使いのブラウザで生成され、共有リンクに埋め込まれます。PrivateNote.aiがそれを受け取ることも、保存することもありません。
  • 当社のサーバーが保存するのは暗号化された暗号文だけであり、復号に必要な鍵は持っていません。

クライアント側暗号化

メモは送信前に、Web Crypto APIでブラウザのメモリ上においてローカルに暗号化されます。サーバーが見るのは、その結果の暗号文だけです。

鍵の取り扱い

通常のプライベートメモでは、生の256ビット鍵をBase64urlとして、URLのフラグメント(#...)に入れます。パスワードで保護されたメモでは、コンテンツ鍵をArgon2idから導出した鍵で包みます。

共有リンクがあれば、そのメモにアクセスできます。共有先は、意図した受信者だけにしてください。

暗号

共通鍵暗号

  • AES-256-GCM

    128ビットの認証タグと、メモID、有効期限、閲覧回数の上限を結び付ける追加認証データ(AAD)による、認証付き暗号です。256ビット鍵は、グローバー型の量子鍵探索に対しても、実用上の障壁であり続けます。

  • 12バイトの暗号学的IV

    一意の初期化ベクトルにより、複数のメモにわたってパターンが識別されるのを防ぎます。

鍵導出(KDF)

  • Argon2id(v2プロファイル)

    パスワードで保護されたメモは、Argon2idをメモリ負荷の高いパラメータ(time=3、memory=64 MiB、parallelism=1)で使い、特にGPUやASICによる総当たりのコストを高めます。

  • 16バイトの暗号学的ソルト

    メモごとに一意のソルトを使い、レインボーテーブル攻撃から守ります。

インフラと運用セキュリティ

EU管轄での保存

認証データ、暗号化されたメモ、運用記録は、EU管轄のインフラに保存されます。

原子的な状態管理

Cloudflare Durable Objectsが、1回限りの処理に原子的な一貫性を与え、競合状態と二重消費を防ぎます。

トラッキングCookieなし

ステートレスなAPIです。広告やトラッキング用のピクセルは読み込まれません。

Turnstile による確認

人間だけを通すリクエスト確認により、メモの総当たり列挙を防ぎます。

サプライチェーンと完全性

暗号化はブラウザ内で行われるため、読み込むアプリのバンドルも信頼モデルの一部です。静的ホスティング、固定されたCIビルド、ブラウザの保護に依拠しています。侵害されたクライアントへの保証ではありませんが、実行できるものは意図的に限っています。

デプロイとブラウザの保護策
  • CIで作ったコンテンツハッシュ付きのビルド資産による、静的なCloudflare Pagesへのデプロイ
  • HTTPのContent Security Policyとセキュリティヘッダー。許可リストは、機能に必要な場合だけです(Turnstile、端末上AIのCDN、WASM)
  • package-lock.jsonからの再現可能なインストール(デプロイのパイプラインではnpm ci)
  • Cloudflareのエッジにおける、HSTS(preload)付きのHTTPS
  • 広告や解析のスクリプトはありません。第三者のJSは、主にTurnstileと、それらの機能を使うときの任意のAI CDNの読み込みです

AIのデータ取り扱い

メモの下書きにAIは任意です。安全なリンクを作るために、AIは必要ありません。使うときは、端末上のPrivate AIと、オプトインのCloud Assistから選べます。プライバシーの境界は、それぞれ異なります。

Private AI(端末上)

プライバシー

ブラウザ内で動作します(WebLLM)。下書きのテキストは、推論のためにPrivateNote.aiや第三者へ送信されません。

保存したあと

テキストはローカルで処理されます。アップロードされるのは暗号化されたメモだけです。AIのプロンプトが、当社のサーバーへ送られることはありません。

必要な端末

対応している場合、WebGPU対応のデスクトップにQwen3 0.6BまたはGemma 2 2Bを読み込みます。モデルの重み用に、ブラウザのストレージが最大約1 GB、実行できるだけのGPUメモリが必要です。スマートフォンや性能の低いノートPCでは、動作しないことがよくあります。その場合はCloud Assistを使うか、AIなしで書いてください。

初回の準備

初回は、公開CDN(例: Hugging FaceやjsDelivr)から、量子化された重み(最大約1 GB)をダウンロードすることがあります。暗号化されたメモのアップロードとは別です。後のセッションでは、キャッシュされた重みを再利用できる場合があります。

Cloud Assist(ホスト型)

プライバシー

Cloudflare Workers AIで動作します(Google Gemma 4 26B)。オプトインが必要です。下書きの平文は端末の外に出ます。Cloud Assistを確認するまで、何も送信されません。

保存したあと

アップロードされるのは暗号化されたメモだけです。下書き中、プロンプトは平文のままPrivateNote.ai Workerを通過します。当社はそれを保存しませんが、Cloudflareが処理する前に、そのリクエストのためエッジで扱います。

必要な端末

最新のブラウザとネットワーク接続があれば使えます。GPUや大きなローカルストレージは不要です。端末でPrivate AIを実行できないときや、ホスト型の下書きを選ぶときに使います。

初回の準備

不要です。モデルのダウンロード、インストール、ローカルキャッシュはありません。オプトインして、案内に従い下書きを送信してください。

脅威モデルと制限

役に立つ脅威モデルでは、何を守り、誰から守り、何を前提とし、どの対策が適用され、何を明示的に対象外とするかを示します。このページの前半にある保護は第4節に対応し、第1〜3節と第5節が境界を定めています。

保護対象

  • メモの平文

  • 暗号鍵

  • 一度きりの閲覧の保証

  • 有効期限と閲覧上限

  • ユーザーアカウントのデータ

  • 認証情報

前提

  • 暗号化または復号のとき、ユーザーの端末とブラウザは信頼できるものとします。
  • ブラウザは Web Crypto を正しく実装しています。
  • 当社オリジンへの TLS は、意図どおりに機能しています。
  • 配信されたアプリケーションコードは、悪意をもって改変されていません(「サプライチェーンと完全性」をご覧ください)。
  • メモのリンクは、意図した受信者にのみ共有されます。

対象範囲

  • サーバーまたはデータベースの侵害(保存時は暗号文のみ)
  • 保存されたメモへアクセスする、悪意のある、または好奇心の強い管理者
  • ストレージまたはインフラ提供者の侵害
  • メモ通信のネットワーク傍受(TLSに加え、暗号文)
  • メモの自動的な列挙と悪用(Turnstile、レート制限)
  • パスワードで保護されたメモへの総当たり(Argon2id)
  • アカウント乗っ取りの試行(HttpOnlyセッション、ログイン時のローテーション、レート制限、任意のTOTP、機密な操作での追加認証)
  • 1回限りのメモの再取得や再送(初回の閲覧時に原子的に消費)

対象外

  • 送信者または受信者の端末上のマルウェア
  • 悪意のあるブラウザ拡張機能
  • 侵害されたオペレーティングシステム
  • 画面キャプチャまたは録画ソフトウェア
  • クリップボードの監視
  • メモの完全な URL(#fragment の鍵を含む)を、安全でない経路で、または権限のない相手と共有すること
  • 配信された JavaScript アプリケーションの侵害
  • ユーザーを対象としたフィッシング
  • ソーシャルエンジニアリング
  • 利用に同意したときの Cloud Assist による推論(下書き平文の第三者処理)

技術的な誠実さ

宣伝文句よりも、明確さと、測定できるセキュリティの保証を優先します。

安全なセッションを開始
PrivateNote on LaunchNest