KeepTempMailerを支える「ゼロ知識暗号化」とは
Web Crypto APIとCloudflare Workersが実現するハイブリッド暗号化の深層
KeepTempMailerが採用する「ゼロ知識暗号化(Zero-Knowledge Encryption)」は、サーバー側が秘密データや復号鍵を一切持たず、クライアント側のみでデータの秘匿性を完全に制御する設計思想です。本記事では、Web Crypto API、Cloudflare Workers、IndexedDBを組み合わせたエンドツーエンド暗号化(E2EE)の深層アーキテクチャを技術的に解説します。
1. ゼロ知識アーキテクチャの基本要件
一般的なWebサービスでは、データ通信経路こそ暗号化(HTTPS/TLS)されますが、サーバーに到着したデータはメモリ上で復号され、データベースへ保存される段階でクラウドプロバイダが管理する鍵を用いて暗号化されます。この設計では、運営会社の内部者やサーバー侵入者がデータに直接アクセスできるリスクが残ります。
対して、ゼロ知識設計においては、サーバー(クラウド環境)は単なる **「暗号文の永続ストレージおよび転送ハブ」** として機能します。データの「暗号化」および「復号」に必要な暗号鍵の生成・管理・処理は、すべて信頼境界内(ユーザーのデバイスのブラウザ環境)で行われ、平文データや秘密鍵がサーバーへ送信されることは物理的にありません。
2. ハイブリッド暗号プロトコルと詳細データフロー
大容量のメール本文や添付ファイルを高速かつ安全に処理するため、非対称鍵暗号(RSA)と対称鍵暗号(AES)の強みを組み合わせた **「ハイブリッド暗号方式」** を実装しています。
Step 1 クライアントサイドでの非対称鍵ペアの生成と保存
Webアプリケーションの初期化時、ブラウザの W3C Web Crypto API を叩いて非対称鍵ペア(2048-bit RSA-OAEP、ハッシュ関数はSHA-256)を生成します。
- 公開鍵(Public Key):
SubjectPublicKeyInfo (SPKI)形式でエクスポートされ、HTTPS経由でデータベース(Cloudflare D1)に公開保存されます。 - 秘密鍵(Private Key): クライアントデバイスから漏洩させないため、
extractable: false設定でエクスポートを禁止した状態のまま、ブラウザの安全なデータベース領域である IndexedDB 内に暗号鍵オブジェクトとして直接永続化されます(localStorageとは異なり、XSSによるトークン奪取から防御されます)。
Step 2 Cloudflare Workersによるエッジでのエンベロープ暗号化
SMTPエントリポイント(Cloudflare Email Routing)を通過したメールは、エッジコンピューティング環境である Cloudflare Workers にフォワードされます。
- DEK(データ暗号化鍵)の生成: Workers内で暗号学的に安全な乱数ジェネレータを用い、メール1件ごとに使い捨ての 256-bit **AES-GCM** 共通鍵(DEK)を生成します。
- メールペイロードの暗号化: メール本文および添付バイナリを、DEKと12バイトの一意な初期化ベクトル(IV)を用いて AES-GCM 方式で暗号化し、改ざん検知用の16バイトの認証タグ(Auth Tag)を出力します。
- DEKのラッピング(エンベロープ暗号化): 受信者のRSA公開鍵を取得し、DEK自体を **RSA-OAEP** 方式で暗号化(カプセル化)します。
Step 3 データベース格納とオンデマンド復号
データベースには、以下のカプセル化データのみが格納されます。
encryptedDEK: ArrayBuffer, // RSA-OAEP暗号化されたAES鍵
iv: Uint8Array(12), // 初期化ベクトル
tag: Uint8Array(16), // AES-GCM 認証タグ
ciphertext: ArrayBuffer // 暗号化されたメール本文
}
ユーザーがメールボックスを開くと、クライアントアプリがこのパッケージを取得。IndexedDBから秘密鍵を読み出し、Web Crypto APIでまず encryptedDEK を復号。取り出した生DEKと iv, tag を用いて、ブラウザのメモリ空間内だけで ciphertext を平文へ復号・描画します。
3. 従来の使い捨てメールサービスとのセキュリティ設計比較
アーキテクチャの違いがもたらす、セキュリティ上の防御能力の比較です。
| 機能・項目 | 一般的な使い捨てメール | KeepTempMailer |
|---|---|---|
| サーバーデータ漏洩時 | メール本文・パスワードがすべて平文で漏洩 | 鍵がなければ復号不可のため、事実上の無害化 |
| インサイダーによる覗き見 | 管理者や開発者が任意の受信メールを閲覧可能 | サービス開発者でも復号鍵を持たないため、閲覧・傍受不可 |
| サーバー保存状態 | 平文(データベース上で誰でも読める) | エンドツーエンド暗号化(解読不能) |
| 復号鍵の管理場所 | なし(またはサーバー側) | ユーザー端末内(IndexedDB)のみ |
| 独自ドメイン接続 | 不可(共有ドメインのみでブロックされやすい) | 可能(独自ドメインで信頼性UP) |
| 広告トラッキング | あり(行動データが分析される) | なし(完全匿名かつトラッキング排除) |
開発者向け:Web Crypto APIの実装例
KeepTempMailerがブラウザ内でどのように暗号鍵を生成しているか、実際のJavaScriptコードのサンプルをご紹介します。W3C標準の Web Crypto API を使用することで、外部ライブラリに頼らず安全に鍵生成を行っています。
// RSA-OAEP 鍵ペアの生成スクリプト
async function generateEncryptionKeyPair() {
const keyPair = await window.crypto.subtle.generateKey(
{
name: "RSA-OAEP",
modulusLength: 2048,
publicExponent: new Uint8Array([1, 0, 1]),
hash: "SHA-256"
},
true, // エクスポート可能にするか
["encrypt", "decrypt"] // 用途
);
// 公開鍵をエクスポート(サーバー共有用)
const exportedPublicKey = await window.crypto.subtle.exportKey(
"spki",
keyPair.publicKey
);
// 秘密鍵はアプリ内の安全な IndexedDB に直接保存する
return {
publicKeyBuffer: exportedPublicKey,
privateKey: keyPair.privateKey
};
}
まとめ:プライバシー重視の時代における唯一の選択肢
データの所有権は、サービスを提供する企業ではなく、ユーザー自身に帰属すべきです。自分のメールの内容やアカウント情報を他人に握らせないために、ゼロ知識暗号化は非常に強力な盾となります。
KeepTempMailerは、メールの送受信という日常の何気ないコミュニケーションに究極の安心感をもたらします。セキュリティを妥協したくない方は、ぜひ今すぐ無料の暗号化メールボックスを開設し、その安全性を体感してください。