クライアントサイド暗号化 · PDF共有

クライアントサイド暗号化によるPDF共有、正しく理解する。

「エンドツーエンド暗号化」という言葉は曖昧に使われがちです。ここでは、クライアントサイド暗号化PDFリンクの実際の暗号メカニズム — AES-256-GCM、鍵管理、フラグメント対パスフレーズモード、サーバーが文字通りできないこと — を解説します。注記: このページの「ゼロ知識」はサーバーがファイルを復号できる情報を一切保持しないことを指し、正式なゼロ知識証明(ZKP)ではありません。本製品はZKPを使用しません。

lockAES-256-GCM vpn_keyPBKDF2-SHA256 · 310,000 linkフラグメントまたはパスフレーズ memoryWeb Crypto API

「ゼロ知識」がここで意味すること

最初に明確にしておきます: このシステムはゼロ知識証明(ZKP)を使用しません。このページの「ゼロ知識」とは、共有ファイルを保存するサーバーが暗号的にも運用上も復号に使用できる情報を一切持たないという、より弱いが実用的な性質を指します。鍵はサーバーに触れないため、サーバーはいかなる状況でも鍵を開示できません。仕組みは純粋なクライアントサイド暗号化と、URLフラグメントのみで移動する鍵(またはサーバーが見ることのないパスフレーズから導出)です。

memory
暗号化はブラウザ内で実行
サーバー上でも、管理されていないワーカーでもなく — あなたのタブ内で、window.crypto.subtleを介して実行。DevToolsで確認可能。
cloud_off
アップロードされるのは暗号文のみ
アップロードデータはAES-256-GCM暗号文です。PDF本体、ファイル名、メタデータは読み取り可能な形でサーバーに届きません。
vpn_key
鍵は受信者と共に移動
URLフラグメント内(サーバーに送信されない)、または送信者が設定したパスフレーズから導出します。いずれの場合も、鍵を見ることはありません。
block
回復手段なし = バックドアなし
リンクを紛失またはパスフレーズを忘れた場合、ファイルは永久に復元不可能です。鍵はサーバーに届かないため、保証を弱める回復経路は存在しません。

クライアントサイド暗号化PDFリンクの作成方法

送信者のブラウザ、サーバー、受信者のブラウザがそれぞれ行うことを、実際のWeb Crypto呼び出しと共に解説します。

1 — 送信者のブラウザ
// 256-bit AES key, generated locally key = crypto.subtle.generateKey({name:"AES-GCM", length:256}) // fresh 96-bit IV per file iv = crypto.getRandomValues(new Uint8Array(12)) // ローカルで暗号化する。GCMは整合性のための認証タグを提供する ct = crypto.subtle.encrypt({name:"AES-GCM", iv}, key, pdfBytes) // upload ciphertext + iv (and salt, if passphrase mode) id = await PUT("/api/transfer", ct, {iv, expiry})
2 — 共有リンクの形式
// fragment mode: key lives after # link_f = `https://pdfpro.tools/s/<ID>#<KEY>` // パスフレーズモード: リンクにキーなし。受信者はパスフレーズを知っている必要がある link_p = `https://pdfpro.tools/s/<ID>`
3 — サーバーが不透明なバイト列を保存
ciphertext = ??? // random-looking, unreadable iv = 12-byte nonce salt = 16-byte random (passphrase mode only) expiry = 24h free / 30d Pro
4 — 受信者のブラウザ
// ブラウザはURLフラグメントをサーバーに送信しない rawKey = /* location.hashから または */ PBKDF2(passphrase, salt, 310_000, "SHA-256") ct = await GET("/api/transfer/" + id) pdf = crypto.subtle.decrypt({name:"AES-GCM", iv}, importKey(rawKey), ct) // ブラウザがPDFをダウンロードフォルダに提供する

フラグメントモード対パスフレーズモード

受信者に鍵を届ける2つの方法。暗号文の保証は同一で、使いやすさと漏洩リスクのトレードオフが異なります。

フラグメントモード

鍵はURLハッシュ(#)に含まれる

最もシンプルな方法: リンクをコピーして受信者のチャットに貼り付けるだけ。#以降のURL部分は、準拠したブラウザによってWebサーバーに送信されることはなく、それが鍵を非公開に保ちます。

  • 受信者の操作は1ステップ — リンクをクリックするだけ。
  • 摩擦が少なく、低〜中程度の機密性の共有に適しています。
  • リスク: スクリーンショットやブラウザ同期でリンクが漏洩すると、ファイルも漏洩します。
  • チャンネルを信頼できる場合(署名付きメッセンジャー、社内チャット)に使用。
パスフレーズモード

パスフレーズから鍵を導出(PBKDF2)

送信者がパスフレーズを設定します。ブラウザは128ビットのランダムソルトに対してPBKDF2-SHA256を310,000回繰り返して256ビット鍵を導出します。ソルトはサーバー側に保存され、パスフレーズは帯域外(電話、Signal、対面)で共有されます。

  • 2要素共有: リンクとパスフレーズを別々に送付。
  • リンクだけでは不十分 — 暗号文は読み取り不可能のまま。
  • パスフレーズの強度が重要: 310k回の繰り返しでブルートフォースを遅らせますが、6文字のパスフレーズを救うことはできません。
  • リンクが転送されたり、完全に信頼できない場所に保存される可能性がある場合に使用。
項目フラグメントモードパスフレーズモード
鍵の搬送手段URLハッシュ(#パスフレーズ + ソルト
サーバーが鍵を見るかいいえいいえ
サーバーが保存するもの暗号文 + IV暗号文 + IV + ソルト
受信者の手間リンクをクリックリンクをクリック + パスフレーズを入力
スクリーンショットで漏洩可能かはい(リンク = 鍵)いいえ(リンクだけでは無意味)
ブルートフォース耐性256ビットランダムパスフレーズ次第
最適な用途信頼できるチャンネルでの低摩擦共有より高い機密性が必要な共有

サーバーに暗号文を保存してもプライバシーが守られる理由

「サーバーにあるなら、どうしてプライベートなの?」とよく聞かれます。答えは、暗号文はファイルではないということです。鍵がなければ、ランダムに見えるバイト列にすぎません。実際にどういう意味かを解説します。

storage
データベース侵害 = 暗号文の漏洩
攻撃者がデータベースを侵害しても、持ち出せるのは不透明なバイト列だけです。1つのファイルを復元するには256ビット鍵をブルートフォースする必要があり、既知の物理法則では不可能です。
gavel
召喚状があっても暗号文しか提出できない
裁判所は保有するデータの提出を命じることができます。保有しているのは暗号文です。裁判所命令によって、保存したことのない鍵を遡って生成することはできません。
group
内部アクセスは無力化される
データベースの完全な認証情報を持つ不正な従業員でも、ファイルを読むことはできません。保証は数学によって強制されており、アクセス制御ポリシーによるものではありません。
timer
有効期限が保証をさらに強化
暗号文は有効期限(無料24時間、Pro最大30日)に削除されます。その後は暗号文も消え、ファイルの唯一のコピーは復号された場所にのみ存在します。

warning正直な制限事項

クライアントサイド暗号化はエンドポイントセキュリティの問題を解決しません。送信者または受信者のデバイス上のマルウェアはメモリから鍵を盗むことができます。侵害されたブラウザ拡張機能は復号されたファイルを読むことができます。そして、グループチャットで転送されたリンクはあらゆる暗号保証を無効にします。このアーキテクチャは侵害のコストを高めますが、すべてのリスクを排除するわけではありません。

クライアントサイド暗号化と他の「安全な」オプションの比較

PDFを共有する一般的な選択肢の明確な比較。「安全」とラベル付けされたオプションのほとんどはトランスポート暗号化であり、転送中のデータを保護しますが、受信サーバーは引き続き平文と鍵を保持します。

オプション転送中のTLSサーバーがファイルを読めるか有効期限受信者アカウント
メール添付通常はいはい — すべての中継点で永久不要
汎用クラウド共有リンクはいはい任意場合による
パスワード保護PDFはいはい(ホストがファイルを持つ場合)なし不要
PDF Pro(フラグメントモード)はいいいえ24時間 / 30日不要
PDF Pro(パスフレーズモード)はいいいえ24時間 / 30日不要

信頼が必要な共有 対 ゼロ知識 ライブ対決

同じ目標 — PDFを共有する。2つの信頼モデルが並んで進む様子をご覧ください。

cloud_upload
信頼が必要な共有
サーバーが平文を保持
  1. PDFをサーバーにアップロード
  2. サーバーが平文を保持平文
  3. サーバーが削除を約束信頼
  4. 相手側での侵害リスクリスク
  5. 受信者が平文をダウンロード露出
サーバー上の平文コピー数
1+
サーバーが読み取り可能か
はい
サーバー上の鍵
はい
shield_lock
このツール
ゼロ知識共有
  1. ブラウザ内でPDFを暗号化E2E
  2. サーバーは暗号文のみを保持ゼロ知識
  3. 受信者がローカルで復号完了
check_circle
共有済み — サーバーは読み取れません。
サーバーに平文なし。鍵の管理なし。設計上、侵害に強い。
サーバー上の平文コピー数
0
サーバーが読み取り可能か
いいえ
サーバー上の鍵
いいえ
アニメーションは1回表示 — もう一度見るには再生をタップ。

よくある質問

クライアントサイド暗号化PDF共有とは実際どういう意味ですか?
共有ファイルを保存するサーバーが文字通り復号できないことを意味します。暗号化鍵は送信者のブラウザで生成され、アップロードされることはなく、受信者のブラウザだけが再構築できます — URLフラグメントまたは送信者が帯域外で共有するパスフレーズから。保証は変更可能なアクセス制御ポリシーではなく、暗号によって強制されます。注記: これは正式なゼロ知識証明(ZKP)とは異なり、本製品はZKPを使用しません。
PDF Proはクライアントサイド暗号化共有にどの暗号化を使用しますか?
ファイルごとに96ビットのランダム初期化ベクトルを使用したAES-256-GCM対称暗号化。パスフレーズモードでは、128ビットのランダムソルトに対してPBKDF2-SHA256を310,000回繰り返して鍵を導出します。すべての暗号処理はブラウザのネイティブWeb Crypto APIで実行されます。
フラグメントモードとパスフレーズモードの違いは何ですか?
フラグメントモードは256ビット鍵をURLハッシュ(#以降)に入れ、ブラウザはいかなるサーバーにも送信しません。完全なリンクを持つ人は誰でも復号できます。パスフレーズモードは送信者が設定したパスフレーズから鍵を導出し、それなしでは暗号文は読み取り不可能なままです。リンクが漏洩する場合はパスフレーズモードが安全です。低摩擦共有にはフラグメントモードが便利です。上記の比較表をご参照ください。
URLフラグメントは暗号鍵の搬送手段として本当に安全ですか?
準拠したブラウザはURLのフラグメント部分(#以降)をサーバーに送信しません。クライアントサイドに留まり、受信者のタブで実行されるJavaScriptにのみ表示されます。それが共有リンク自体を復号認証情報にする理由です — 鍵はアップロードではなく受信者と共に移動します。ブラウザのネットワークタブで確認できます: リクエストURLは?または#で切り捨てられています。
PDF Proや裁判所はクライアントサイド暗号化共有で保存されたファイルを読めますか?
いいえ。サーバーはAES-256-GCM暗号文と初期化ベクトル(パスフレーズモードではソルトも)を保存します。鍵なしでは — 受け取ったことがない鍵なしでは — そのデータは暗号的にランダムなバイト列と区別がつきません。開示できるのは暗号文のみ、それが保有するすべてです。
リンクを紛失またはパスフレーズを忘れた場合はどうなりますか?
ファイルは永久に復元不可能です。これは設計上のものです — クライアントサイド暗号化は回復経路を意味せず、回復経路があれば鍵を保持する必要があるからです。パスフレーズはパスワードマネージャーに保存し、リンクは安全な場所に保管してください。
クライアントサイド暗号化PDF共有は無料ですか?
はい。無料プランはAES-256-GCM暗号化と24時間リンク有効期限をサポートし、登録不要です。無料プランのファイル上限は転送あたり約25MBです。Proは有効期限を30日に延長し、ファイルサイズ制限を引き上げます。
受信者はアカウントが必要ですか?
いいえ。受信者はリンクをクリックするだけで、ブラウザがWeb Crypto APIを通じてローカルで復号し、ファイルをダウンロードできます — 登録不要、インストール不要、ファイルとの間にポータル画面もありません。

エンドツーエンド暗号化リンクを1つ送信。スケジュール通りに期限切れに。

ブラウザ内でAES-256-GCM暗号化。登録不要、サーバー側に平文なし、回復バックドアなし。

send暗号化リンクを作成