論文一覧に戻る 📚 用語集トップ 🗺 概念マップ
📚 用語解説
📚 用語解説
盗聴
Eavesdropping
セキュリティ

🔖 キーワード索引

盗聴中間者攻撃MITM暗号化TLSVPN公開Wi-Fiパケットキャプチャ通信傍受セキュリティ

別名・略称:(なし)

eavesdropping」は統計データ分析の文脈で扱う重要概念のひとつ。 本ページでは「eavesdropping」を取り巻く中核キーワードを以下にチップで一覧化する。 各キーワードは関連する概念・手法・道具立てを含み、 文献検索や学習計画の起点になる。

盗聴通信傍受中間者攻撃パケットキャプチャ暗号化TLSVPN機密性セキュリティ脅威

これらのキーワードは「eavesdropping の理解 → 適用 → 検証」のプロセスを構成する。 各章で詳しく解説する。

💡 30秒で分かる結論

🍰 まずはやさしく

盗聴は、こっそり話を聞かれることです。

通信の内容を不正に盗むために行われます。

無料のWi-Fiでパスワードが漏れる例があります。

この章では盗聴の正体と対策を学びます。

盗聴(Eavesdropping):通信内容を不正に傍受

📍 あなたが今見ているもの

🍰 まずはやさしく

盗聴は、情報の通り道を狙う攻撃です。

大切なデータを守るために知識が必要です。

スマホで個人情報を送る時に危険があります。

ここでは法律やルールの重要性を読みます。

データサイエンティストも API キー、 データベースのパスワード、 個人情報を含む CSV をネットワーク経由で扱います。 通信が暗号化されていないと、 公開 Wi-Fi で 誰でも見れる状態。 GDPR や個人情報保護法では 「通信路の暗号化」 が要件として明示されており、 盗聴対策はもはや常識です。

🎨 直感で掴む

🍰 まずはやさしく

盗聴は、手紙を途中で読まれるようなものです。

どうやって情報が盗まれるかを知るために使います。

カフェのWi-Fiで通信内容が見られる例があります。

ここでは盗聴が起きる仕組みを詳しく読みます。

盗聴がどう起きるか

  1. あなたがカフェの公開 Wi-Fi に接続
  2. 同じ Wi-Fi に接続している攻撃者が tcpdumpWireshark でパケットをキャプチャ
  3. HTTP(暗号化なし)のページを開くと、 入力したパスワードが 平文で流れる
  4. 攻撃者は流れたパケットを解析して、 そのパスワードを取得

中間者攻撃(MITM)

攻撃者が 通信路の真ん中に割り込み、 両者の通信を中継しながら 内容を盗み見+改ざん できる。 偽の Wi-Fi アクセスポイントが代表例。

🎨 直感を深める — SSDSE-B-2026 を盗聴シナリオで考える

SSDSE-B-2026(都道府県 × 110 統計列 × 12 年のオープンデータ)自体は公開情報なので「盗聴されても困らない」と思うかもしれません。 しかし、 同じデータが 研究室サーバから API 経由で配布される場面を考えると、 盗聴は次のような実害を生み得ます:

シナリオ盗聴で漏れるもの想定される実害
公開 Wi-Fi で論文を執筆中に SSDSE をダウンロードCSV 内容 + 研究者のアクセスパターン + 検索クエリ研究テーマの推測、 競合への漏洩
学内サーバへ研究者が SSH 接続して SSDSE 解析SSH パスワード(telnet なら平文)、 解析結果サーバ侵入、 学内データ漏洩
API キーを HTTP で URL パラメータに含めて送信API キー丸ごと第三者によるなりすまし、 課金被害
企業の管理画面(HTTPS なし)で SSDSE 集計を確認Cookie、 セッション ID、 集計結果セッションハイジャック、 意思決定情報漏洩
SSDSE をメール(SMTP without TLS)で共有メール本文、 添付 CSV配布前データの先取り公開

→ 「公開データ」と「公開データを誰がいつどう使ったか」は別物。 後者は秘密情報になり得るため、 公開データを扱う研究でも通信は HTTPS が常識です。

📐 定義 / 数式

🍰 まずはやさしく

盗聴は、通信の仕組みに関する問題です。

情報を安全に送る方法を考えるために使います。

鍵を使って中身を隠す仕組みが大切です。

ここでは暗号化という守り方を読みます。

盗聴は数式というより通信モデルです。 通信路の暗号化を表現すると:

【暗号化通信】
$$\text{送信者} \xrightarrow{E_K(M)} \text{通信路} \xrightarrow{D_K(\cdot)} \text{受信者}$$
$E_K$ は暗号化、 $D_K$ は復号。 鍵 $K$ を持たない盗聴者は内容を見られない

🔬 記号・式を言葉で読み解く

受動的盗聴
通信を見るだけで改ざんしない。 検出が困難。
能動的盗聴
通信に介入して内容を改ざん(MITM)。
TLS
Transport Layer Security。 HTTPS の暗号化を担う標準プロトコル。
証明書
通信相手が「本物」であることを保証する公開鍵証明書。
VPN
Virtual Private Network。 通信路全体を暗号化トンネルで包む。

🔬 数式を言葉で読み解く — 暗号化通信の各要素

$M$(メッセージ)
送信したい平文。 SSDSE シナリオなら CSV 1 行(「北海道, 2023, 5092000, ...」など)。
$E_K$(暗号化関数)
鍵 $K$ で $M$ を 不可逆っぽい形に変換する関数。 AES-256 なら 256 ビットの鍵で 128 ビットブロックを 14 ラウンド攪拌。
$D_K$(復号関数)
同じ鍵 $K$ で $E_K(M)$ を元に戻す関数。 $D_K(E_K(M)) = M$ が成り立つ。
通信路
送信者から受信者までの経路。 ルーター・スイッチ・Wi-Fi 親機を通る。 どの中継地点でも盗聴され得ると仮定するのがセキュリティの基本姿勢(脅威モデル)。
盗聴者(Eavesdropper / Eve)
暗号文 $E_K(M)$ だけは見られるが、 鍵 $K$ を持たない。 計算量的に $K$ を総当たりするのが現実的時間で不可能なら、 $M$ は復元できない(AES-256 を 2025 年現在のコンピュータで総当たりするには宇宙年齢を超える時間が必要)。
$K$(共通鍵)
送信者と受信者が事前に 安全な方法で共有する秘密。 鍵の共有自体が問題(鍵配送問題)で、 これを解くのが 公開鍵暗号(RSA、 楕円曲線)と Diffie-Hellman 鍵交換
TLS ハンドシェイク
クライアントとサーバが暗号スイートを合意し、 公開鍵で鍵交換し、 共通鍵を確立し、 以後は対称暗号で通信。 「最初の挨拶」が TLS ハンドシェイクで、 ここが成功すれば残りの通信は安全。
証明書(X.509)
サーバが「私は本物の example.com です」と主張するための公開鍵証明書。 CA(認証局)が署名している。 ブラウザは事前に CA の公開鍵を持っており、 署名を検証。 これがないと MITM 攻撃に易々と引っかかる。

🔬 Wireshark で見える / 見えない情報

Wireshark でパケットキャプチャすると、 同じ通信でも HTTP と HTTPS で見える情報が全く違います。 SSDSE データ取得を例に:

情報HTTP で見えるかHTTPS で見えるか
送信元 IP / 宛先 IP
ポート番号○ (80)○ (443)
SNI(接続先ドメイン名)○(ESNI なしの場合)
URL パス(/api/data 等)×
HTTP メソッド(GET/POST)×
リクエストヘッダー×
Cookie / Authorization×
レスポンス(CSV データ本体)×
パケットサイズ / タイミング○(メタデータは漏れる)
TLS バージョン
暗号スイート
証明書(サーバ公開鍵含む)○(公開情報)

→ HTTPS でも 「いつ・どこと・どのくらい通信したか」のメタデータは漏れます。 これを隠すには Tor や VPN を併用、 ダミーパケットでカモフラージュ、 などのテクニックが必要です。

📡 主要プロトコルの暗号化対応状況

プロトコル既定暗号化推奨代替SSDSE での該当場面
HTTPなしHTTPS (TLS 1.3)Web API、 ダウンロード
FTPなしSFTP / FTPSファイル転送
telnetなしSSHリモートシェル
SMTP条件付きSMTPS / STARTTLS 強制メール送信
POP3 / IMAP条件付きPOP3S / IMAPSメール受信
DNSなしDoH / DoTドメイン名解決
SSHありサーバ管理
HTTPSあり (TLS)Web 全般
WSS(WebSocket Secure)あり (TLS)リアルタイム通信
MQTT既定なしMQTTSIoT / センサーデータ

→ 古いプロトコル(HTTP, FTP, telnet, DNS)は 暗号化なしが既定。 必ず TLS 版に置き換えるのが現代の常識です。

🧮 実データで計算してみる

通信プロトコル別の盗聴リスク:

プロトコル暗号化リスク
HTTPなし高(平文通信)
HTTPSTLS
FTPなし
SFTP/FTPSSSH/TLS
SMTPなし(STARTTLSで可)

🧮 実値で計算してみる — SSDSE 1 レコードを HTTP vs HTTPS で送る

SSDSE-B-2026 の 1 行(例:北海道・2023 年)を Web API 経由で送信したらどう見えるか、 平文 vs 暗号化で比べます:

<HTTP (平文) の場合: Wireshark で見える内容> POST /api/upload HTTP/1.1 Host: api.example.com Content-Type: application/json Authorization: Bearer abc123secretkey ← 鍵が丸見え! {"pref":"北海道","year":2023,"pop":5092000,"births":24430} ← データも丸見え!
<HTTPS (TLS 1.3) の場合: Wireshark で見える内容> Application Data: 17030301F8 + 504 バイトのバイナリ (鍵もデータも完全に暗号化され、 解読不能) → TLS Layer は「TLS Application Data」とだけ表示 → ヘッダーもボディも一切見えない

→ HTTP では API キーも CSV データも丸見え。 SSDSE のような「公開データ」を送る場合でも、 API キーや認証情報まで 道連れに漏洩するのが問題。 HTTPS なら全て暗号化されてバイナリにしか見えません。

項目HTTPHTTPS (TLS 1.3)
ボディ暗号化なしAES-256-GCM など
ヘッダー暗号化なしあり(TLS 1.3 で完全)
サーバ認証なし(なりすまし可)X.509 証明書 + CA 署名
改ざん検出なしHMAC / AEAD
追加ハンドシェイク0 往復1 往復(TLS 1.3)
速度オーバヘッド最速数 ms(無視できる)

最近の TLS 1.3 は 1 往復で鍵交換が完了し、 0-RTT モードなら 0 往復で送信開始も可能。 速度のために HTTP を使う理由はもはやありません。

🧮 数式に値を入れて手で計算する: SSDSE-B-2026 の Code (都道府県識別子) の通信エントロピー

盗聴を語る上で「データのエントロピー」が中心概念。 SSDSE-B-2026 を HTTPS でダウンロードする際、 47 都道府県の Code (R01000-R47000) のうち、 「人口最大の 3 県 (東京・神奈川・大阪) に偏った問合せがある」想定で、 平文と圧縮後のエントロピーを比較する。

Step 1: 観測した Code の出現確率 (SSDSE 想定アクセスログ)

CodePrefecture確率 p-p log₂ p
R13000東京都0.50.500
R14000神奈川県0.30.521
R27000大阪府0.20.464

東京 50% / 神奈川 30% / 大阪 20% という偏り。 盗聴者はパケットサイズや頻度パターンからこの分布を推定できる (Traffic Analysis 攻撃)。

Step 2: エントロピー (盗聴者が得る情報量)

H(平文) = 0.500 + 0.521 + 0.464 = 1.485 bit/Code H(一様分布) = log₂ 3 ≈ 1.585 bit/Code 情報量損失 = 1.585 - 1.485 = 0.100 bit → 盗聴者は 1 Code につき 0.10 bit 多く推測できる (頻度パターン解析)

HTTPS 暗号化を入れると Code 自体は読めないが、 パケット長 / 頻度から「人口最大の県へのクエリが多い」と推定可能 (= Side-channel 漏洩)。 これを防ぐには pad-padding (= 全 Code を同じ長さで送る) が必要。

🐍 Python で再現

このコードでやること: SSDSE-B-2026 で「東京 50%、 神奈川 30%、 大阪 20%」のアクセス分布のエントロピーと、 一様分布 (3 県均等) のエントロピーを計算し、 盗聴者が得る情報量を定量化する。

📥 入力データ:

codes = ['R13000', 'R14000', 'R27000'] # 東京・神奈川・大阪 p = [0.5, 0.3, 0.2] # アクセス頻度の事前分布
1
2
3
4
5
6
7
8
import numpy as np
codes = ['R13000', 'R14000', 'R27000']  # 東京/神奈川/大阪
p = np.array([0.5, 0.3, 0.2])
H_orig = -(p * np.log2(p)).sum()
H_uniform = np.log2(len(codes))
print(f"H(SSDSE アクセス頻度): {H_orig:.3f} bit")
print(f"H(理想 = 一様分布): {H_uniform:.3f} bit")
print(f"盗聴で得る情報: {H_uniform - H_orig:.3f} bit/Code")

📤 実行結果

H(SSDSE アクセス頻度): 1.485 bit H(理想 = 一様分布): 1.585 bit 盗聴で得る情報: 0.100 bit/Code

💬 手計算 (Step 2) 1.485/1.585 と Python 出力が完全一致。 SSDSE-B-2026 ダウンロードでも、 1 県 = 0.10 bit の情報漏洩が起きる。 47 都道府県のアクセスログを 1 万回サンプリングすれば 1000 bit 程度の情報が盗聴可能 — 暗号化していても「どの県が人気か」が漏れる怖さがある。

🐍 Python 実装

SSDSE-B-2026(47 都道府県・2023 年データ)を題材にした最小コード:

1
2
3
4
5
6
7
8
# requests で HTTPS を必ず使う(自動的に証明書検証)
import requests

# 安全: HTTPS で通信、 デフォルトで証明書検証
r = requests.get('https://api.example.com/data', timeout=10)

# 危険: 証明書検証を無効化(テスト以外で使わない)
# r = requests.get('https://api.example.com/data', verify=False)

🐍 Python 実装 2 — SSDSE 1 レコードを AES-256-GCM で暗号化

🎯 このコードでやること:SSDSE-B-2026 の 1 行(北海道・2023 年)を AES-256-GCM で暗号化し、 復号して元のデータが戻ることを確認する。 これは TLS 内部で実際に行われている対称暗号処理の簡略版です。

📥 入力データ:SSDSE-B-2026 の 1 行

北海道, 2023, 総人口=5092000, 出生数=24430
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
import pandas as pd
import json
from cryptography.hazmat.primitives.ciphers.aead import AESGCM

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', header=1)
row = df[(df['年度']==2023) & (df['都道府県']=='北海道')].iloc[0]
plaintext = json.dumps({'pref': row['都道府県'],
                        'year': int(row['年度']),
                        'pop':  int(row['総人口'])},
                       ensure_ascii=False).encode('utf-8')

# AES-256 用の 32 バイト鍵(教材では出力を再現できるよう固定。実運用は AESGCM.generate_key(bit_length=256))
key = bytes(range(32))
aes = AESGCM(key)

# 12 バイト nonce + 暗号化
nonce = b'\x00 12 bytes'  # 実運用は os.urandom(12)
ciphertext = aes.encrypt(nonce, plaintext, associated_data=None)

print('平文       :', plaintext)
print('暗号文     :', ciphertext.hex())
print('復号確認   :', aes.decrypt(nonce, ciphertext, None))

📤 実行すると次の出力が得られる

平文 : b'{"pref": "\xe5\x8c\x97\xe6\xb5\xb7\xe9\x81\x93", "year": 2023, "pop": 5092000}' 暗号文 : fc48b10eee1c3438fb66fbd3990daed475fbfd94986658fb609308780b5177cf96102d702f1a884519d1ea262ecc9e9a3c988a4db3ea5ac8450d117089e8fccf71bd22 復号確認 : b'{"pref": "\xe5\x8c\x97\xe6\xb5\xb7\xe9\x81\x93", "year": 2023, "pop": 5092000}'

💬 結果の読み方:平文 JSON(51 バイト。 \xe5\x8c\x97\xe6\xb5\xb7\xe9\x81\x93 は「北海道」の UTF-8 バイト列)が AES-256-GCM で 完全にランダムに見えるバイナリ 67 バイトに変換されました(51 バイト + 認証タグ 16 バイト)。 鍵と nonce を固定しているので、 何度実行しても上と同じ暗号文になります。 同じ鍵を持つ受信者は decrypt で元に戻せますが、 鍵を知らない盗聴者には解読不能。 GCM モードは 認証タグも含むため、 暗号文を 1 ビットでも改ざんすると復号時に例外が出ます(改ざん検出)。

🐍 Python 実装 3 — HTTPS で SSDSE を安全に取得

🎯 このコードでやることrequests ライブラリで HTTPS 経由のデータ取得を行う。 証明書検証を 必ず有効にし、 ローカルの SSDSE-B-2026 と比較して内容が一致することを確認する。

📥 入力データ:仮想的な API エンドポイント(公開 SSDSE データを HTTPS で配布する想定)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import requests
import pandas as pd
import io

# 安全: HTTPS + 証明書検証 (verify=True がデフォルト)
url = 'https://example.org/data/SSDSE-B-2026.csv'
resp = requests.get(url, timeout=10)
resp.raise_for_status()

df_remote = pd.read_csv(io.BytesIO(resp.content), encoding='cp932', header=1)

# ローカルの SSDSE と比較
df_local = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', header=1)
print('shape:', df_remote.shape, 'vs', df_local.shape)
print('内容一致:', df_remote.equals(df_local))

# 証明書情報の確認 (TLS バージョン、 暗号スイートも見える)
import ssl, socket
ctx = ssl.create_default_context()
with socket.create_connection(('example.org', 443)) as s:
    with ctx.wrap_socket(s, server_hostname='example.org') as ss:
        print('TLS:', ss.version())
        print('cipher:', ss.cipher())

📤 期待される出力

shape: (564, 112) vs (564, 112) 内容一致: True TLS: TLSv1.3 cipher: ('TLS_AES_256_GCM_SHA384', 'TLSv1.3', 256)

💬 結果の読み方:TLS 1.3 + AES-256-GCM の 最新かつ強力な組み合わせで通信されているのが確認できました。 内容一致 True なので、 通信中に改ざんもなし。 resp.raise_for_status() は証明書エラー時に例外を投げるので、 これだけで MITM 攻撃を防げます。

🐍 Python 実装 4 — パケット長から「何が送られたか」を推測する盗聴例

🎯 このコードでやること:TLS で暗号化されていても、 パケット長から「どのファイルがダウンロードされたか」推測される脆弱性を SSDSE で再現する。 サイドチャネル攻撃の入門例。

📥 入力データ:SSDSE-B-2026(CSV ファイル、 約 351 KB)と他のオープンデータの CSV ファイル群

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
import pandas as pd
import os

# 各 CSV のサイズを取得 (盗聴者から見える「TLS 暗号文の長さ」相当)
files = {
    'data/raw/SSDSE-B-2026.csv': 'data/raw/SSDSE-B-2026.csv',
}
for name, path in files.items():
    size = os.path.getsize(path)
    print(f'{name} = {size:,} bytes')

# TLS パケットは通常 1 つあたり最大 16,384 バイト
# SSDSE-B-2026 ≈ 360,000 バイト → 22 パケットくらいに分割
# 他の同サイズ CSV (例: 国勢調査小地域) と区別がつかないこともある

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', header=1)
print(f'CSV 行数: {len(df)}, 列数: {len(df.columns)}')
print(f'JSON 化サイズ: {len(df.to_json(force_ascii=False)):,} bytes')

📤 実行すると次の出力が得られる

SSDSE-B-2026.csv = 359,821 bytes CSV 行数: 564, 列数: 112 JSON 化サイズ: 725,163 bytes

💬 結果の読み方:暗号化されていても 「351 KB のファイルをダウンロード」「22 パケット送受信」といったメタデータは見えます。 同じサイズのデータベース・CSV と区別がつかない場合、 盗聴者は 「SSDSE をダウンロードしたな」と推測可能です。 対策として VPN 経由でパケット長を均一化、 ダミーパケット注入などが研究されています。 これが サイドチャネル攻撃の入門例。

🛡 脅威モデル — 何を守りたいか・誰から守るか

セキュリティは 「脅威モデル」を明確化することから始まります。 SSDSE シナリオで考えると:

資産(守るもの)脅威(誰から)対策
研究者のログインパスワード同 Wi-Fi の盗聴者SSH(telnet 禁止)、 SSH 鍵認証
API キーパケット盗聴、 ログ漏洩HTTPS、 環境変数、 KMS(鍵管理サービス)
研究テーマ(アクセスパターン)プロバイダ、 政府機関VPN、 Tor
未公開の前処理済みデータ同僚、 競合研究者アクセス管理、 暗号化ストレージ
ML モデル(パラメータ)産業スパイHTTPS、 モデル難読化、 差分プライバシー
個人識別可能情報(PII)攻撃者(外部・内部)暗号化 + 匿名化 + アクセスログ

脅威モデルが定まれば、 どこに HTTPS を使い、 どこに VPN を被せ、 どこに DLP を仕込むかが機械的に決まります。 「とりあえず全部暗号化」より「資産別に対策」の方が運用しやすい。

📰 実際にあった盗聴インシデント

Firesheep(2010 年)

Eric Butler が公開した Firefox 拡張で、 公共 Wi-Fi で Facebook や Twitter のセッション Cookie を簡単に盗めることを実証。 当時の SNS は HTTP のままだったため、 業界が一斉に HTTPS 化(全文 HTTPS)へ動いた。

DROWN 攻撃(2016 年)

古い SSL v2 を残しているサーバを踏み台に、 同じ秘密鍵を使う TLS 通信を解読する手法。 「使わないからといって古いプロトコルを残してはいけない」という教訓。

公衆 Wi-Fi MITM(多数)

空港・カフェの偽 Wi-Fi で証明書警告を無視させ、 TLS を MITM する攻撃が定期的に報告されている。 警告を「うっとうしいから無視」するユーザが対象。

Heartbleed(2014 年)

OpenSSL の脆弱性で、 サーバのメモリ内容(鍵やパスワードを含む)が盗める。 厳密には「盗聴」ではなく「脆弱性悪用」だが、 通信路から秘密が漏れる点で類似。 サービスの 2 / 3 が影響を受けた歴史的事件。

Snowden 報道(2013 年)

米 NSA がインターネット基幹で 大規模通信傍受を行っていたことが報じられ、 IT 業界全体で End-to-End 暗号化(E2EE)が普及した。 Signal、 WhatsApp、 iMessage がデフォルト E2EE に。

⚠️ よくある落とし穴

⚠️ HTTP で API キー送信
URLパラメータに API キーを入れて HTTP で送ると即漏洩。 必ず HTTPS。
⚠️ 証明書エラーを無視
「verify=False」で本番運用は MITM の温床。
⚠️ 公開Wi-Fi で機密作業
VPN なしの公開Wi-Fi で銀行/管理画面にアクセス禁止。
⚠️ 古い TLS 版を使う
TLS 1.0/1.1 は脆弱性あり。 1.2 以上必須。
⚠️ DNS のリーク
VPN を使ってもDNSが暗号化されていないと、 アクセス先サイトが分かる。

⚠️ さらなる盗聴対策の落とし穴

❌ 暗号スイートの古さ
HTTPS を使っていても TLS 1.0 / 1.1 や RC4・3DES などの古い暗号スイートは 事実上解読可能。 サーバ設定で TLS 1.2 以上、 AES-GCM / ChaCha20 のみに制限すべき。
❌ DNS の漏洩
HTTPS で通信内容は暗号化されても、 「example.com へアクセスした」という DNS 問い合わせは平文。 アクセス先サイトがバレる。 対策:DoH (DNS over HTTPS) / DoT (DNS over TLS) を使う。
❌ SNI(Server Name Indication)の漏洩
TLS ハンドシェイク初期で「どのドメインに接続するか」(SNI)が平文で送られる。 アクセス先がバレる。 対策:ESNI / ECH(暗号化 SNI)を使う、 まだ普及途上。
❌ 通信タイミング・パケット長
暗号化されていても 「いつ・どのくらいのデータが送られたか」のメタデータは見える。 SSH の鍵入力タイミングからパスワード長を推測される攻撃が知られている。
❌ HSTS 未設定
HTTPS を提供していても、 ユーザが「http://」と入力すると最初の 1 回は平文。 HSTS(HTTP Strict Transport Security)ヘッダで「次回からは必ず HTTPS」と強制する。
❌ 自己署名証明書を許可
開発時に verify=False を使った癖で本番でも使ってしまう。 自己署名証明書 + verify=False は MITM の温床。 必ず公的 CA の証明書(Let's Encrypt 無料、 商用 CA 有料)を使う。
❌ クライアント側で証明書ピン留めを怠る
モバイルアプリで「特定の CA 以外を信頼しない」ピン留め(Certificate Pinning)をしないと、 CA 自体が侵害されたとき MITM 可能。 銀行アプリなどはピン留めが標準。
❌ 量子コンピュータ時代への備え不足
2030 年代に量子コンピュータが実用化されると、 現行の RSA / ECC は破られる可能性がある。 耐量子暗号(PQC: Lattice ベース、 Hash ベース)への移行が進んでいる。 既に NIST が標準化を発表。

🔐 暗号化方式の分類

通信暗号化に使われる暗号方式は大きく 共通鍵(対称)公開鍵(非対称)の 2 種類。 TLS では両方を組み合わせます:

分類代表アルゴリズム用途SSDSE シナリオ
共通鍵(対称)AES-256-GCM, ChaCha20-Poly1305バルク暗号化(実データ)SSDSE CSV ボディ
公開鍵(非対称)RSA-2048/4096, ECDSA (P-256, P-384)鍵交換、 認証TLS 証明書、 SSH 鍵
鍵交換ECDHE (Curve25519, P-256)前方秘匿性TLS ハンドシェイク
ハッシュSHA-256, SHA-3改ざん検出TLS MAC、 証明書署名
耐量子暗号Kyber, Dilithium (NIST PQC)将来の鍵交換・署名2030 年代の TLS で必須化見込み

TLS 1.3 の典型的なフロー:
1. クライアント Hello(ChaCha20、 Curve25519 などを提案)
2. サーバ Hello + 証明書(ECDSA 署名) + サーバ鍵交換(ECDHE 公開値)
3. クライアント鍵交換(ECDHE 公開値)
4. 両者がセッション鍵を導出 → 以後 AES-256-GCM で通信

💼 データサイエンティストの実務での盗聴対策

SSDSE のような公開データを扱う研究者でも、 次の場面では盗聴を意識しないとリスクが生じます:

1. Jupyter Notebook の共有

Notebook 内に API キーや DB パスワードがベタ書きされたまま GitHub にプッシュする事故が頻発。 .env ファイル + python-dotenv で外部化、 git ignore する習慣を。

2. Google Colab / Kaggle Notebook

クラウド notebook は サーバ管理者がメモリを読める可能性あり。 機密データの解析は控え、 SSDSE のような公開データのみに留める。 API キーは Secrets 機能を使う。

3. SSH 経由のリモート解析

学内サーバへの SSH 接続は、 パスワード認証ではなく鍵認証に。 ~/.ssh/config で公開鍵を指定。 telnet, FTP, rsh は禁止(平文通信)。

4. データダウンロード時の URL

SSDSE 配布ページが HTTPS であることを確認。 リダイレクト先が HTTP に降格していないか curl -v で確認。 wget --secure-protocol=TLSv1_2 でプロトコル制限。

5. メトリクスの送信(テレメトリ)

ML フレームワーク(PyTorch, TensorFlow)がデフォルトで 使用統計をクラウドに送信することがある。 NO_ANALYTICS=1 等で無効化、 通信先を確認。

⚔️ 中間者攻撃(MITM)の仕組みを深掘り

MITM は単純な盗聴と違い、 通信路に攻撃者が割り込んで両端と独立に通信する高度な攻撃です。 流れを SSDSE シナリオで描くと:

【MITM 攻撃の流れ】
研究者 (Alice)                    攻撃者 (Eve)                    SSDSE サーバ (Bob)
   |                                  |                                  |
   |─── HTTPS request ───────────────▶|                                  |
   |                                  |─── HTTPS request ───────────────▶|
   |                                  |                                  |
   |                                  |◀── 証明書 (本物の bob.example) ──|
   |◀── 偽証明書 (偽 bob.example) ────|                                  |
   |                                  |                                  |
   ├─ ⚠️ 警告: 証明書エラー!          |                                  |
   └─ ユーザが「無視」をクリック       |                                  |
   |                                  |                                  |
   |─── 暗号化データ (Eve の鍵) ─────▶|                                  |
   |                                  |── 復号 → 内容を見る → 再暗号化 ──▶|
   |◀── 偽の応答 (Eve の鍵) ──────────|◀── 応答 (Bob の鍵) ──────────────|

→ 鍵となるのは 「証明書警告を無視させる」こと。 偽 Wi-Fi では SSL Strip(HTTPS → HTTP 降格)や偽証明書を使う。 HSTS preload証明書ピン留めがこれを防ぐ。

MITM の検出方法

⚖️ 法律と規制 — 盗聴は犯罪

日本では通信の盗聴・傍受は 法律で禁止されています:

法律該当条文罰則
電気通信事業法第 4 条「通信の秘密」2 年以下の懲役 / 100 万円以下の罰金
不正アクセス禁止法第 3 条3 年以下の懲役 / 100 万円以下の罰金
刑法(電子計算機損壊等業務妨害)第 234 条の 25 年以下の懲役 / 100 万円以下の罰金
個人情報保護法安全管理措置(第 23 条)改善命令、 公表
GDPR(EU)第 32 条「安全性」全世界年間売上の 4% または 2000 万ユーロ

→ 「セキュリティ研究」と称しても、 無許可で他人の通信を傍受すれば違法です。 自分のテスト環境のみで実験するか、 オーナーから書面で許可を得て行うこと。 SSDSE のような公開データの解析は問題ありませんが、 通信路の盗聴は別問題です。

🏛 多層防御アーキテクチャ

完璧な防御は不可能なので、 多層防御(Defense in Depth)が基本戦略:

対策SSDSE シナリオでの例
L1 物理設備の物理的セキュリティ研究室の鍵、 サーバルーム入退室管理
L2 ネットワークVPN、 IPsec、 WPA3学内 VPN 経由でリモートアクセス
L3 トランスポートTLS 1.3、 HSTSSSDSE API は HTTPS 必須
L4 アプリケーションEnd-to-End 暗号化、 認証API キー、 OAuth 2.0
L5 データat-rest 暗号化、 アクセス制御ディスク暗号化、 IAM ロール
L6 監査ログ、 SIEM、 異常検知アクセスログ収集、 不審なパターン検出
L7 人的教育、 ポリシー研究者向けセキュリティ研修

SSDSE データの取扱いでは、 L3〜L4(TLS、 API 認証)が研究者の直接の責任範囲。 L1〜L2 は組織側、 L5〜L7 はチームで共有する形になります。

🗺 概念マップ — 盗聴を中心とした学習地図

前提本概念発展
ネットワーク
HTTP / TCP
暗号化
盗聴
(Eavesdropping)
TLS / HTTPS
VPN
中間者攻撃
耐量子暗号
ゼロトラスト

盗聴は ネットワークセキュリティの古典的脅威。 ここを理解すると、 暗号プロトコル全般・現代の通信セキュリティ・量子時代の対策まで、 一連の流れで学べます。

❓ よくある質問 FAQ

Q1: SSDSE のような公開データなら盗聴されても問題ない?
A: データ自体は問題なしだが、 「誰がいつどんなクエリを投げたか」「API キーは何か」というメタデータと付属情報は秘密になり得る。 さらに送信時に API キー・パスワード・Cookieが一緒に漏れるのが本質的な問題。 HTTPS は必須。
Q2: 自宅 Wi-Fi なら安全?
A: WPA3(または WPA2 + 強いパスワード)なら局所的には安全だが、 ISP・経路上のルーター・接続先サーバの管理者からは見える。 HTTPS は依然として必要。
Q3: VPN を使えば HTTPS は不要?
A: 不可。 VPN は ISP からの隠蔽用、 VPN プロバイダから先の経路では HTTPS が必要。 また VPN プロバイダ自体が信頼できないと意味がない。 「VPN + HTTPS の二重」が最強。
Q4: 開発時に証明書エラーが出るが?
A: 自己署名証明書を 適切に CA に登録するのが正解。 verify=False は禁止。 開発環境でも本番と同じ TLS 構成にしておけば、 本番でエラーが出ることもない。
Q5: TLS は重い? パフォーマンスが心配。
A: TLS 1.3 は 1 往復で鍵交換完了、 0-RTT モードなら 0 往復で送信開始可。 セッション再利用で 2 回目以降はさらに高速。 SSDSE 1 ファイル取得程度なら 遅延差は数 msで無視できる。
Q6: モバイルアプリでの SSDSE 取得は?
A: iOS / Android 共に App Transport Security (ATS) が既定で HTTP を禁止。 HTTPS が必須。 さらに 証明書ピン留めでアプリ側からも信頼する CA を制限すると堅牢。
Q7: 「無料 Wi-Fi」は使ってはいけない?
A: 使うなら必ず VPN を併用。 SSDSE のような公開データを HTTPS 経由で読むだけなら大きな問題はないが、 ログインや SSH 接続は避ける。 銀行・管理画面は 絶対に避ける。
Q8: 量子コンピュータが実用化したら今の HTTPS はすぐ使えなくなる?
A: 段階的移行になる。 2024 年から Hybrid TLS(従来 + PQC)が始まっており、 量子コンピュータが実用化される前に少しずつ PQC へ切り替わる。 ただし「今キャプチャされた通信」が将来解読される Harvest Now, Decrypt Later リスクがあるので、 機密度が高いデータは今から PQC を検討。

🎓 やってみよう — SSDSE で盗聴対策の練習

問題 1:HTTPS の検証

SSDSE 配布ページ(独立行政法人統計センター)にブラウザでアクセスし、 鍵マーク → 証明書詳細を確認。 発行 CA、 有効期限、 公開鍵アルゴリズム(RSA / ECDSA)、 ハッシュアルゴリズム(SHA-256 等)を記録せよ。

問題 2:curl で TLS バージョン確認

ターミナルで curl -v https://example.org 2>&1 | grep -E "SSL|TLS|cipher" を実行し、 TLS バージョンと暗号スイートを確認。 TLS 1.2 以上が使われているか?

問題 3:API キーをコードから外す

SSDSE API(仮想)を呼び出すコードで、 ベタ書きされた API キーを .env + python-dotenv で外部化せよ。 .gitignore.env を追加することを忘れずに。

問題 4:AES-GCM で 1 県のデータを暗号化

SSDSE-B-2026 の東京都 1 行を JSON にして AES-256-GCM で暗号化、 復号して元に戻ることを確認。 鍵を変えると復号できないことも確認。

問題 5:Wireshark で HTTP vs HTTPS

同じ JSON データを http://httpbin.org/posthttps://httpbin.org/post に送信し、 Wireshark でキャプチャ。 HTTP では JSON が読めて、 HTTPS では暗号化バイナリしか見えないことを確認。 ※ httpbin は学習用の公開サービス

これら 5 問を解くことで、 「HTTPS を見抜く・使う・代替する」という 3 段階の実務スキルが身につきます。

盗聴攻撃 VPN Tor HTTPS で十分 「Harvest Now,

🔗 隣接手法への橋渡し

盗聴は単独の脅威ではなく、 改ざん ・なりすまし ・中間者攻撃と同じ通信路上で発生する複合リスクである。 暗号化 ・認証 ・物理隔離など複数の対策を層状に組み合わせて対抗する。

盗聴は「通信途中で第三者がデータを傍受する」攻撃で、 上流の通信路設計で平文を流さない方針を確立し、 並列の中間者攻撃・改ざんと区別し、 下流の暗号化 (TLS) ・VPN ・物理的隔離で多層防御を組む。

🌳 手法選択フロー

盗聴対策の必要レベルは「通信路の信頼性・データの機密度・規制要件」の 3 軸で決まる。 公開データのみなら TLS で十分、 個人情報含む通信なら VPN・E2E 暗号化・物理隔離まで層を重ねる。

  1. 通信路は誰が管理しているか
    自組織の閉じた回線か、 公衆 Wi-Fi か、 相手先のクラウドか。 管理していない経路を通る時点で、 傍受されうる前提で設計する。
  2. 流れるデータの機密度は
    公開統計だけなら TLS で足りる。 個人情報が含まれるなら、 経路の暗号化に加えて 保存時の暗号化とアクセス記録が要る。
  3. 暗号化はどこからどこまでか
    TLS は「自分とサーバの間」しか守らない。 サーバ側で復号されるので、 提供者に見られては困る内容ならエンドツーエンド暗号が要る。
  4. 鍵と証明書を誰が持つか
    証明書を検証しなければ、 なりすましたサーバと暗号通信するだけになる。 警告を無視して進む運用にしていないかを確認する。

SSDSE-B-2026 のような公開データは盗聴の直接対象になりにくいが、 自治体内部で個人情報と突合する分析では、 LAN ・無線・クラウド転送のどの段階で平文が流れるかを設計時に必ず洗い出す。