ゼロ知識アーキテクチャと
セキュリティ設計

KeepTempMailerは、運営者を含む第三者が絶対にメールの内容を読めない「ゼロ知識(Zero-Knowledge)」原則に基づき設計されています。本ドキュメントでは、その技術的背景と実装の詳細について解説します。

1. クライアントサイドでの鍵ペア生成の仕組み

本アプリでは、すべての暗号化および復号の根幹となるRSA-OAEP 鍵ペアを、ブラウザ標準の WebCrypto API を用いてユーザーの端末内(クライアントサイド)でのみ生成します。

通常、多くのWebサービスはサーバー上でパスワードや暗号鍵を生成・管理しますが、KeepTempMailerは window.crypto.subtle.generateKey メソッドを呼び出し、ユーザーのブラウザ・デバイスのセキュアな乱数生成器を用いて 2048-bit 以上の強固な鍵ペアを作成します。

// 実際の暗号化モジュール内での鍵生成プロセス(概念コード)
const keyPair = await window.crypto.subtle.generateKey(
  {
    name: "RSA-OAEP",
    modulusLength: 2048,
    publicExponent: new Uint8Array([1, 0, 1]),
    hash: "SHA-256",
  },
  true, // extractable: false にすることでさらなる保護が可能
  ["encrypt", "decrypt"]
);

生成された公開鍵(Public Key)のみがサーバーに送信され、秘密鍵(Private Key)は決してネットワークを通じて送信されることはありません。

2. なぜ「運営者にもメールが読めない」のか

KeepTempMailerにおけるメールの受信から閲覧までのライフサイクルは、以下のステップで完全に暗号化されています。これにより「運営者すら読めない」ゼロ知識性を担保しています。

1

メール受信時の即時暗号化 (サーバーサイド)

Cloudflare Workers上でメールを受信した瞬間、事前に登録されたユーザーの「公開鍵」を用いて、メール本文および件名(Subject)などのメタデータを直ちに暗号化します。

2

データベースへの保存 (D1 / KV)

データベース(Cloudflare D1等)には、完全に暗号化されたバイナリ/Base64文字列のみが保存されます。この状態のデータは、正しい秘密鍵がなければスーパーコンピューターを用いても現実的な時間内での解読は不可能です。

3

クライアントでの復号 (ブラウザ内)

ユーザーがアプリを開くと、暗号化されたデータがダウンロードされます。その後、ブラウザ内の WebCrypto API とローカルに保管された「秘密鍵」を用いて、初めて平文に復号され、画面に表示されます。

データベースにアクセスできる運営者やデータベース管理者がデータを見たとしても、そこに記録されているのは無意味な文字列(暗号文)のみです。秘密鍵はサーバーに一切存在しないため、物理的・技術的に運営者がユーザーのメール内容を把握することは不可能です。

3. LocalStorageを用いた安全な暗号鍵の管理手法

絶対にサーバーに送信してはならない「秘密鍵」をどのように安全に永続化するかは、ゼロ知識アーキテクチャの最大の課題の一つです。KeepTempMailerでは、ブラウザの LocalStorage または IndexedDB をセキュアに活用しています。

これにより、高い利便性(ブラウザを開くだけで使える)と極めて高い機密性を両立した、次世代の使い捨てメールサービスを実現しています。