仕組み
アーキテクチャ:IMAP トランスポート → ローカルストレージ → 分析
GravesMail は、メールプロバイダーの IMAP サーバーを、純粋にトランスポート層としてのみ使います。メッセージを表示するために IMAP から読み出すことは決してしません。それでは遅く、信頼性にも欠けるからです。代わりに、次のことが行われます。
- IMAP から取得 — メッセージは、暗号化された接続を通じてプロバイダーのサーバーからダウンロードされます。
- DMZ に一時保管 — 新しいメッセージは、お客様の目に触れる前に、ローカルの一時保管領域(SQLite)に置かれます。
- 7 層のセキュリティ分析 — すべてのメッセージと添付ファイルが、お客様のコンピューター上で、YARA マルウェアスキャンを含む 7 つの保護レイヤーすべてを通ります。
- クイックルールによるフィルタリング — お客様個人のクイックルールに一致するメッセージは、そのルールに従って自動的に振り分けられます。確認用にスパムトラップへ取り置く、移動する、削除する、のいずれかです。
- 受信箱、スパム、マルウェアのいずれかへ振り分け — 問題のないメッセージは受信箱に届きます。スパムは「スパム」に入ります。マルウェアが検出されたメッセージは、危険な添付ファイルを取り除いて保留したうえで、別の「マルウェア」フォルダーに入ります。
- サーバーから削除(任意) — 「ダウンロード後にサーバーから削除」を有効にしている場合、メッセージはプロバイダーから削除されます。
SQLite が唯一の信頼できる情報源です。UI に表示されるものはすべて、IMAP からではなく、ローカルのデータベースから来ています。
大きなメールボックスのための 2 段階同期
アカウントを初めて接続するとき — 特に何千件ものメッセージがあるアカウントの場合 — GravesMail は 2 段階の方式を使います。
フェーズ 1(クイックスタート):フォルダーごとに最新の 500 件のメッセージを最初に取得します。通常は 1 分かかりません。すぐに読み始め、作業を始められます。
フェーズ 2(バックグラウンド同期):残りのメッセージは、バックグラウンドで静かにダウンロードされます。ステータスバーの進行状況インジケーターに、完了率と推定残り時間が表示されます。いつでも一時停止、再開、停止ができます。アプリを閉じても、進行状況は保存されます。
7 つの保護レイヤー
受信するすべてのメッセージとその添付ファイルは、独立した 7 つの保護レイヤーを通ります。各レイヤーは異なる種類の問題を探し、単独で判定します。1 つでもレイヤーが警報を出せば、そのメッセージはスパムとして扱われます。平均を取ることも、到達すべき合計スコアもありません。警報は 1 つで十分です。これが「7 層 OR」モデルです。
1. ドメイン検証
差出人のドメインは存在するか、実際のメールサーバーを持っているか。アドレスの末尾(.shop、.top、.click、.xyz などの TLD)は、スパムによく悪用されるものか。
2. ベイジアンフィルター
メッセージに使われている言葉がどの程度スパムらしいかを、学習に基づいて判定します。あらかじめ学習済みの状態で出荷され、その後はお客様から学習します。「スパムとマーク」や「スパムでないとマーク」をするたびに賢くなります。
3. ヘッダー認証
SPF、DKIM、DMARC — 差出人が名乗っているとおりの相手であることを証明する標準的な検査です。
4. ヒューリスティックスコアリング
本文とヘッダーのパターンを対象とする 41 個の検出器。偽装された単語(H0ME、S4LE)、前払い金詐欺や遺産相続詐欺の言い回し、偽造されたヘッダー、日付の異常、差出人の発信国などを検出します。
5. レピュテーション
安全リストとブロックリスト、差出人の履歴、そしてメッセージをまたいだキャンペーン追跡。これにより、差出人ドメインを次々に変えながら、同じ発信元サーバー、ペイロードのホスト、配信停止リンクを使い回すスパム送信者を捕捉できます。
6. マルウェア:システム AV
Windows では、添付ファイルは AMSI インターフェイスを通じて、インストールされているウイルス対策ソフト(Windows Defender、Norton、Bitdefender、Kaspersky など)に渡されます。このレイヤーは macOS、Linux、モバイルでは利用できません。それらのプラットフォームでは、実際には出していない「クリーン」の結果を報告するのではなく、利用できないことをはっきりと表示します。
7. マルウェア:YARA
添付ファイルのバイト列とメッセージ本文を、Neo23x0/signature-base リポジトリにある何千ものコミュニティ製マルウェアシグネチャと照らしてスキャンします。トロイの木馬、ランサムウェア、RAT、悪意のある Office マクロ、PDF エクスプロイト、フィッシング文書を検出します。モバイルを含むすべてのプラットフォームで動作し、オフラインで使えるようアプリに組み込まれて出荷されます。
正直な報告 — 偽りの安心は与えません
任意のメッセージの「プロパティ」を開くと、レイヤーごとの内訳が表示されます。各レイヤーのスコア、警報を出すしきい値、そして状態 — 警報あり、クリーン、利用不可 — です。スキャナーが実行できなかった場合、GravesMail は「利用不可」と報告します。「クリーン」と表示されることは決してありません。起動に失敗したのにクリーンと報告するウイルス対策ソフトは、最悪の部類のセキュリティツールです。実際には下されていない判定を信頼してしまうからです。
「セキュリティエンジン」画面(「ツール」→「セキュリティエンジン」、モバイルでは「設定」→「セキュリティエンジン」)では、7 つのレイヤーそれぞれを、0~100% の感度スライダーで個別に調整できます。0% でそのレイヤーはオフになり、100% が最も高い感度です。全体をまとめて調整するコントロールはありません。レイヤーは個別に調整します。同じ画面には、マルウェアスキャナーの現在の状態、国別ポリシーのエディター、そしてすべての検出器とその重みを示す読み取り専用の一覧が表示されます。
外部に問い合わせない位置情報の判定
ヒューリスティックのレイヤーは、メッセージの発信元がどこかを考慮します。この照会は完全にローカルで行われます。GravesMail には国と IP 範囲の対応表が組み込まれており、お客様のデバイス上でそれを参照します。DNS クエリも、外部 API の呼び出しも、途中に介在するサードパーティーのサービスもありません。位置を特定するために、メッセージのメタデータがデバイスの外に出ることは決してありません。
結果が何を意味するかは、お客様が決めます。「セキュリティエンジン」画面で、国を安全(スパムの兆候を加えない)または脅威(強い兆候とする)に指定できます。どちらのリストも最初は空なので、お客様がポリシーを選ぶまで、通常の国際メールが不利に扱われることはありません。
IP 位置情報データは DB-IP(db-ip.com)提供、CC BY 4.0 ライセンス。
外部画像のブロックとトラッキングピクセルの除去
メールの差出人は、自分のサーバーから読み込まれる外部画像をメールに埋め込むことができます。画像が読み込まれると、差出人には、お客様の IP アドレス、メールを開いたこと、開いた日時、使ったデバイスが伝わります。
GravesMail は、既定で外部画像をブロックします。それとは別に、目に見えないトラッキングピクセル(開封確認の追跡だけを目的とする 1×1 の画像)を検出して除去します。この 2 つは独立した設定です。トラッカーを読み込まずに画像を読み込むことも、その逆もできます。
エンドツーエンド暗号化(OpenPGP)
GravesMail は OpenPGP に対応しています。エンドツーエンドで暗号化・署名されたメールのための、オープンで相互運用可能な標準です。ほかの GravesMail ユーザーだけでなく、どのメールシステム(Proton Mail、Thunderbird、gpg など)でも、PGP を使っている相手なら誰とでも、内密のメールをやり取りできます。これは本物の PGP/MIME であり、GravesMail 独自の方言ではありません。
鍵
PGP 鍵マネージャーで鍵を生成します。Ed25519/Curve25519 を推奨しますが、古い PGP ソフトウェアとの互換性のために RSA-4096 も選べます。ほかの人がお客様宛てに書けるように公開鍵をエクスポートし、お客様が相手宛てに書けるように相手の公開鍵をインポートします。インポートすると、GravesMail はその鍵のフィンガープリントを表示します。電話や対面など、メール以外の経路で本人に確認し、検証済みにしてください。未検証の鍵も使えますが、未検証の印が付いたままになります。その印が意味するのは、ただ 1 つのことだからです。この鍵が本当にその人のものであることを、お客様はまだ確認していないということです。
鍵は、メールアドレスではなくフィンガープリントで識別されます。1 つのアドレスに 2 つの鍵があるのは普通のことです。古い鍵と新しい鍵、あるいは RSA の鍵と Ed25519 の鍵が並んでいる場合などです。そのため、すべての操作は、アドレスにたまたま最初に一致した鍵ではなく、お客様が選択した鍵に対して行われます。
鍵を連絡先にリンクできます。そうすれば、鍵マネージャーの中を探し回らなくても、その相手宛ての暗号化がそのまま機能します。鍵をリンクしても、暗号化がオンになるわけではありません。暗号化するかどうかは、引き続きメッセージごとに選びます。
秘密鍵を失うと、その鍵宛てに暗号化されたすべてのメッセージが永久に復元できなくなります。私にも、ほかの誰にも復元できません。秘密鍵をバックアップを使って、パスワードで保護されたバックアップファイルを安全な場所に保存し、そのパスワードを覚えておいてください。秘密鍵を復元は、新しいデバイスや再インストールしたデバイスに秘密鍵を戻し、その鍵の識別情報とフィンガープリントを表示して、どの鍵が復元されたかを確認します。自分の秘密鍵の削除は取り消せないため、GravesMail は警告を一段強め、確認を求めます。
送信と閲覧
作成画面にはセキュリティのコントロールがあり、モードは 3 つあります。署名、暗号化、署名 + 暗号化(内密のメールに推奨)です。既定ではオフなので、通常のメールは変わりません。受信した暗号化メールは自動的に復号され、閉じた錠前 🔒 が表示されます。署名付きのメールには署名の状態が表示され、無効な署名は、目立たない形ではなく、はっきりと目立つ形で表示されます。そのデバイスにない鍵宛てに暗号化されたメッセージは、空白の本文を表示するのではなく、その旨を明示します。
暗号化メールを送信するとき、GravesMail はお客様自身の鍵宛てにも暗号化します。そのため、「送信済み」フォルダーのコピーをお客様が読める状態に保てます。そうしなければ、手元に残る自分のコピーが復号できなくなります。この動作は常にオンです。
曲げられないルール
暗号化を選んだのに、受信者に使用可能な鍵がない場合、送信はブロックされます。GravesMail は処理を止めて尋ねます。キャンセルするか、暗号化せずに送信することを明示的に選ぶか、です。後者は、危険にさらされる受信者の名前を示したうえでの意図的な 2 回目の操作であり、既定の動作になることも、自動で行われることも決してありません。暗号化を選んだのに、黙って平文で送信されるようなコードパスは存在しません。これはインターフェイスだけでなく、エンジンそのもので強制されており、自動テストの対象になっています。
PGP が保護するもの、保護しないもの
PGP はメッセージの本文と添付ファイルを暗号化します。件名、宛先/差出人/Cc、メッセージが送信された日時は隠しません。これらは平文のまま送られます。これは Proton を含むすべての PGP/MIME システムに共通する限界であり、GravesMail の欠点ではありません。ただし、頼りにする前に知っておくべきことです。
PGP は、転送中のメールを、傍受とメールプロバイダーから保護します。フォレンジック対策のツールではありません。復号されたメールは、オフラインで検索して読めるように、GravesMail の暗号化されたローカルデータベースにキャッシュされます。
さらに 2 つの限界を、はっきりと述べておきます。GravesMail は、鍵サーバーや WKD の自動検索を行わず、信頼の輪(web of trust)もありません。鍵は自分でインポートし、フィンガープリントは自分で検証します。相手が誰であるかについてネットワークサービスを信頼することを避けるための、意図的な選択です。また、インラインのクリア署名メッセージは、署名の検証を行わずに、読めるテキストとして表示されます。GravesMail は、実際に検査していない署名を有効だと主張するのではなく、そのまま表示します。
相互運用性
GravesMail の PGP は、OpenPGP の参照実装である GnuPG との間で双方向に検証されています。GravesMail で生成した鍵を使い、Ed25519 と RSA-4096 の両方について、GravesMail で暗号化して gpg で復号、gpg で暗号化して GravesMail で復号、そして署名の検証を両方向で行っています。これは自動テストスイートであり、一度きりの手作業の確認ではありません。
Proton Mail も確認済みです。こちらは自動テストではなく手作業によるものです。GravesMail と実際の Proton アカウントとの間で、本物の暗号化メールを両方向に送信し、読んでいます。このテストの過程で、実際の不具合が 3 つ見つかり、修正されました。Proton の厳格な鍵検証が GravesMail の Ed25519 鍵を拒否する問題、鍵の有効期限に関するバグ、そして復号時に暗号化メールから添付ファイルが何の通知もなく失われる問題です。3 つとも修正済みで、Proton との相互運用は両方向で機能します。
Thunderbird については、PGP に限ったテストを私は行っていないため、ここでは対応を主張しません。標準的な OpenPGP クライアントなので動作するはずですが、「はず」は検証済みと同じではありません。実際に確認したことをお伝えするほうを選びます。
パスワード保護付きメール(鍵は不要)
PGP は、相手も PGP を使っている場合に適したツールです。相手が使っていない場合 — ほとんどの人は使っていません — は、代わりに以下のパスワード保護のオプションを使ってください。
暗号鍵も特別なソフトウェアも持たず、普通のメールアカウントしかない相手に、内密のものを送らなければならないことがあります。GravesMail のパスワード保護(鍵は不要)オプションは、メッセージとすべての添付ファイルを、本物の標準的な AES-256 暗号化 ZIP の中に封入します。受信者は、どのプラットフォームでも、無料の一般的なソフトウェアでそれを開けます。
これには、業界標準の WinZip AES-256(AE-2)形式を使います。7-Zip、Keka、モバイルのアーカイバーアプリがすでに対応している、同じ強力な暗号化です。GravesMail 専用のコンテナーではなく、古い ZIP ツールが使っていた、脆弱で解読可能な「ZipCrypto」でもありません。相互運用性は、実際の標準的なアーカイバーソフトウェアを相手に実証されており、アーカイブの AE-2 暗号化形式は自動テストで固定されています。つまり、送り出されるのは真に標準的なファイルであり、同じアプリどうしの間でだけ動くように見えるものではありません。
実際に送り出されるのは、protected-message.zip という 1 つの添付ファイルです。本当のメッセージとすべての添付ファイルはその中で暗号化され、表に見えるメール本文には、開き方を平易な言葉で説明した手順だけが入ります。アーカイブ内の添付ファイル名は中立的な仮の名前に置き換えられ、本当の名前は暗号化されたマニフェストに保持されます。マニフェストは、受信者がパスワードを入力すると現れます。そのため、ファイル名も漏れません。
送信時に、GravesMail は強力なパスワード(12 文字以上で、大文字と小文字、数字 2 つ、記号 2 つを含む)を設定するよう求めます。リアルタイムのチェックリストと確認用の入力欄があるため、入力ミスで受信者が開けなくなることはありません。その後、GravesMail は「コピー」ボタンとともにパスワードを 1 回だけ表示し、メール以外の経路 — 電話、テキストメッセージ、チャット — で相手に伝えるよう促します。GravesMail がパスワードをメールで送ることを提案することは決してなく、パスワードをどこかに保存したり送信したりすることも決してありません。GravesMail は、受信した保護付きメッセージを、すべてのプラットフォームでその場で開くこともできます。
セキュリティのすべてはパスワードにかかっています。良いパスワードを選び、メールそのものとは別の経路で伝えてください。有効期限も「自己消滅」もありません。それらはサーバーなしでは強制できず、GravesMail はローカル優先なので、私はそれらを謳いません。ZIP が暗号化するのはファイルの内容であり、アーカイブの構造ではありません。そのため、メッセージを傍受した者は、中にいくつファイルがあるか、そのおおよそのサイズとタイムスタンプを知ることができます。ただし、ファイル名と内容はわかりません。また、メールの件名、宛先/差出人、送信時刻は、どのメールでもそうであるように、平文のまま送られます。
クイックルール:お客様専用のメール仕分け
クイックルールを使うと、特定の差出人、ドメイン、件名のパターンに対して、ワンクリックの仕分けルールを作成できます。ルールごとに専用のツールバーボタンが付きます。メッセージにルールを適用すると、その差出人がルールの一致リストに自動的に追加されます。使うほどに、ルールは賢くなります。
ルールは、一致したメールをスパムトラップに送って確認用に取り置く、フォルダーに移動する、削除する、または指定した日数の後に自動削除することができます。ルールは同期中に自動適用するよう設定できるため、一致するメッセージは受信箱に届きません。また、フォルダー全体を数秒でスキャンして、古いメールをまとめて捕捉することもできます。ルールが捕捉したものは、いつでも確認、復元、完全削除ができます。
お客様のルールは、スパムフィルターより優先されます。お客様のルールに一致したメッセージは、スパムフィルターが行き先を変える前に、お客様のルールによって振り分けられます。そのため、ルールを作成してある差出人が、誤って「スパム」に送られることはありません。フィルターは引き続き実行され、メッセージにスコアを付けます。その判定は「プロパティ」で確認できます。ただ、お客様のルールを覆さないだけです。唯一の例外はマルウェアです。マルウェアスキャンは常に優先されるため、ルールが危険な添付ファイルを受信箱に届けることは決してありません。
フィルター済みリストには、一定の時間枠(デスクトップでは 1~96 時間、既定は 24 時間)の中で、すべてのルールが捕捉したものが表示されます。確認用の各リスト — ルール、フィルター済み、スパム — には、それぞれ専用の検索ボックスがあります。
捕捉されたメッセージを開くと、最初のタブは安全なプレビューです。メッセージは閲覧ウィンドウでの見た目どおりに描画されますが、スクリプトは無効化され、トラッキングピクセルはブロックされ、リモート画像は信頼できる差出人のものだけが読み込まれます。返信、全員に返信、転送のボタンがあるので、捕捉されたメッセージを先に受信箱へ復元しなくても、返事を出せます。メッセージは元の場所に残り、返信は通常のメッセージとして送信されます。
保留された添付ファイル
YARA またはシステムのウイルス対策ソフトが添付ファイルにマルウェアを検出すると、GravesMail は次の処理を自動的に行います。
- メッセージを隔離 — 「スパム」とは別の、専用の「マルウェア」フォルダーに移動します。
- 添付ファイルを除去 — 危険なファイルはメッセージから取り除かれます。誰が送ったかがわかるよう、メッセージ本文は残されます。
- データは保持されます — 添付ファイルのデータはローカルに保管されます。保留された添付ファイルで、保留された項目を一つずつ確認し、保留された理由を確かめ、信頼できる場合はディスクに保存し、不要なら完全に削除できます。保留された項目は、あなたが判断するまで保管されます。知らないうちに失われることはありません。
- 詳しい説明 — メッセージのプロパティには、どの YARA ルールまたはウイルス対策エンジンが反応したか、どのファイルが対象だったか、どのような処置が取られたかが正確に表示されます。
添付ファイルをいつでも右クリックして「マルウェアをスキャン」を選び、その場でスキャンを実行することもできます。YARA ルールは「設定」から手動で更新することも、週 1 回のスケジュールで自動更新することもできます。
暗号化された自動バックアップ
GravesMail はプロファイル全体の暗号化バックアップを自動的に作成します。メールデータベースだけでなく、連絡先、カレンダー、ルール、安全リストとブロックリスト、調整済みのしきい値、差出人のレピュテーション、学習済みのスパムフィルター、PGP 鍵リング、保存されたアカウント資格情報も含まれます。(地理情報の参照テーブルや基準スパムモデルなど、アプリに同梱され、更新時に置き換えられるファイルは、意図的に対象外としています。)
- 完全バックアップ — プロファイル全体のコピー。AES-256 で暗号化されます
- 差分バックアップ — 前回の完全バックアップ以降の変更分のみ。復元時には、チェーンを自動的にさかのぼります
- 操作前スナップショット — 破壊的な操作(クイックルールのスキャン、一括消去、ゴミ箱を空にする)の前に作成されます
スケジュールはバックアップマネージャーで設定します。間隔(オフ、毎日、毎週、または任意の時間数。N 日ごとに完全バックアップ)か、各曜日を「なし」「完全」「差分」のいずれかに設定する週間グリッドのどちらかを選びます。完全バックアップ、差分バックアップ、スナップショットの保持数の上限は変更できます。唯一のコピーが削除されることはありません。
バックアップの暗号化の仕組み
GravesMail 自身が行うスケジュールバックアップと手動バックアップは、アプリが生成して管理するバックアップマスターキーで封印されます。キーそのものが平文でディスクに書き込まれることはありません。保存されるのはラップされたコピーだけで、ラップは次の 2 通りで行われます。
- デバイスのセキュアキーストア — 日常のバックアップは、パスワードを一切求められることなく、静かに実行されます。
- あなたの復旧用パスフレーズ — キーストアを使わずに、どのマシンでも同じキーのラップを解除できます。
この 2 つ目のラップによって、バックアップはデバイスに依存しないものになります。以前のバージョンでは自動バックアップが 1 台の物理マシンに結び付けられていましたが、現在は作成した場所でしか復元できないということはありません。
復旧用パスフレーズは、最初にバックアップを作成するときに一度だけ設定します。これは必須であり、省略できません。設定するまでバックアップは完了しません。復旧できないバックアップを抱えることが決してないようにするためです。設定後は、バックアップは確認なしで実行されます。パスフレーズはバックアップマネージャーからいつでも変更でき、変更しても既存のバックアップはすべて復元可能なままです。
新しいデバイスや初期化したデバイスでこれらのバックアップを復旧する方法は、このパスフレーズだけです。そして私があなたの代わりに復旧することはできません。そのように設計しています。リセット用のリンクも、サポート用の裏口もありません。どちらも、あなた以外の誰かが入り込む経路になるからです。パスフレーズを忘れ、デバイスも失った場合、そのバックアップは開けません。安全な場所に保管してください。
バックアップマネージャーでは、任意のバックアップの内容を閲覧し、すべてのバックアップを横断して検索し、現在のデータベースと比較し、個々のメッセージを選んで復旧できます。復元では、現在のプロファイルに触れる前に、バックアップが完全で損なわれていないことを検証します。途中で切れたバックアップや破損したバックアップは拒否され、既存のデータはそのまま残ります。完了すると、何が戻ったかをデータセットごとに表示します。
削除ログと復旧
削除されたメッセージはすべて、本文を含めてローカルの削除ログに記録されます。削除したメッセージは最長 90 日間(変更可能)、閲覧、検索、ワンクリックでの復旧ができます。バックアップファイルは不要です。削除ログからすぐに復旧できます。