このページの内容
セキュリティ アーキテクチャ
クライアント側暗号化(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 による推論(下書き平文の第三者処理)
技術的な誠実さ
宣伝文句よりも、明確さと、測定できるセキュリティの保証を優先します。