ドイツAfDメールリークの概要
Overview of the German AfD email leak (erik.gdn)
要約
この分析は、ドイツの政治党AfDから漏洩したメールとウェブサイトのデータアーカイブを詳細に調査しています。42万件以上のメールと139のウェブサイトのデータベースが含まれており、データの内容、送信者、ウェブサイトの構造、そしてデータ処理の方法について詳細な分析が提供されています。このリークは、政治組織におけるデータセキュリティの脆弱性と、その分析がもたらす影響を浮き彫りにしています。
全文翻訳
ドイツAfDメールリークの概要
この分析は、ドイツの政治党AfDから漏洩したメールとウェブサイトのデータアーカイブを詳細に調査しています。42万件以上のメールと139のウェブサイトのデータベースが含まれており、データの内容、送信者、ウェブサイトの構造、そしてデータ処理の方法について詳細な分析が提供されています。このリークは、政治組織におけるデータセキュリティの脆弱性と、その分析がもたらす影響を浮き彫りにしています。
リークに含まれるもの
hexaneアーカイブには、異なるシステムからの2つの独立したデータセットが含まれています。それらは、時折メールアドレスを共有する程度です。
- emails: AfDのメールサーバーからの10個のメールボックス、および
- websites: www.afd.deと約140の他の党ウェブサイトのWordPressデータベース。
このノートブックは、以下の質問に一つずつ答えます。すべての数値は、明示的にソースのものとしてマークされていない限り、ファイルから計算されています。これは、データを提供した個人またはグループ(以下、ソース)のメモから取られたものです。同じ「もの」の2つのカウントが一致しない場合、ノートブックはそれぞれがどの質問に答えているかを説明します。上から下へ読んでください。各セクションは短い回答から始まり、その後に証拠が続きます。
パートA:メール
A1・メールは何通?
emails
421,178
保存されたメッセージ、すべてのフォルダ
conversations
49,554
2通以上のメールが含まれるスレッド
email addresses
93,635
任意のヘッダー内
time span
2013–2026
2013年3月から2026年9月まで、送信日による
短い回答:421,178通のメール。 各メールは個別のメッセージです。ソースはリリース前にMessage-IDによってアーカイブを重複排除しました(DATA_DICTIONARY.md)、そしてそれは有効です。Message-IDを共有するメールは42通のみで、81通はMessage-IDがありません。したがって、「複数のメールボックスに同じメールのコピーがある」ということはここでは要因ではありません。2つのメールボックスが同じメールを保持していた場合、1つのコピーのみがフォルダのいずれかに残りました(これはA2で重要です)。最新のメールは2026年9月14日付けで、メールはそこで終了します。ウェブサイトデータ(パートB)は約3週間後まで続きます。
[画像]
[画像]メールボックスは非常に異なる期間をカバーしています:Gaulandのものは2017–2023年、bundesgeschaeftsstelle@は2018年初頭で停止し、ハイフン付きのHolmフォルダはわずか2週間(A6)をカバーしています。2016–2018年のピークは主にbundesschiedsgericht@フォルダで、これは仲裁裁判所のメール(A2)よりもはるかに多くのメールを保持しています。空のセルは、アーカイブにその年のそのフォルダからのメールがないことを意味します。
A2・DATA.mdに非常に異なる数値を持つ2つのメールテーブルがあるのはなぜか
docs/DATA.mdは、メールボックスごと(例:bundesschiedsgericht@は101,078通のメールを保持)と、アドレスごと(同じアドレスが「受信」したのはわずか8,800通)のテーブルを示しています。どちらも正しいです。それらは異なる質問に答えます。
| table | question it answers |
|---|---|
| per mailbox | メールはアーカイブのどのフォルダに保存されていますか? |
| per address | アーカイブ内のメールのFrom/To/Cc/Bcc行に、アドレスが何回記載されていますか? |
フォルダ内のすべてのメールがそのフォルダの名前から送受信されている場合のみ、それらは一致します。しかし、そうではありません。メールはBcc、メーリングリスト、エイリアス、または転送ルールを介してメールボックスに到達する可能性があるため、名前はヘッダーに記載されていません。また、フォルダには他人のメールがそのまま含まれることがあります。受信メールサーバーは、真の受信者をDelivered-Toヘッダーに記録し、何が起こったかを示します。
[画像]
3つのフォルダでその効果が明確に示されています。
- Gauland: 32,615通のメールが保存されています。彼のメールアドレスはTo/Ccに13,167回しか表示されません(DATA.mdの「受信」の数値、14,482は他のフォルダでの言及を含みます)。それにもかかわらず、サーバーは彼を32,600(100%)で実際の受信者として記録しました。彼のメールのほとんどは、Bcc、リスト、またはエイリアスを介して彼に届きました。そして彼が送信したのはわずか15通です。これは受信トレイであり、送信済みフォルダではありません。
bundesschiedsgericht@(連邦仲裁裁判所):101,078通のメールですが、ヘッダーにそのアドレスが関与しているのはわずか14,311通(14%)です。このフォルダは主に他人のメールです。Sankey図は、Alice Weidel、paypal@、Magnus Heutmannなどのメールを示しています。フォルダ名はソースがメールをどこに保存したかを示しており、それが誰のメールボックスであったかを示していません。leif.erik.holm@(ドット付き):60,215通のメールがありますが、そのアドレスはどれにも(0%)表示されません。これは、leif-erik.holm@(ハイフン付き)、MV党事務所buero@afd-mv.de、報道官などのメールです。
経験則:「このフォルダにはどれくらいのメールがありますか?」という質問には、メールボックスごとのテーブルを使用してください。「Xさんはどれくらいのメールを送受信しましたか?」という質問には、アドレスを使用してください。理想的には配信ヘッダーを使用し、1人の人物が複数のアドレスを持つ可能性があることを覚えておいてください(Jacobiは3つ持っています)。
緑色のリンク:フォルダ自身の名前に配信されました。紫色:誰か他の人に配信されました。灰色:配信ヘッダーなし(サーバーが記録しなかった)またはその他に折りたたまれた小規模な受信者。リンクをホバーするとカウントが表示されます。
A3・メールスレッドは何通?
ここではスレッドとは、メールがIn-Reply-To/Referencesヘッダーで参照するMessage-IDを介してリンクされた一連のメールです(コーパス内のthreads/;件名の一致なし)。見出しの数値は、スレッドを何と呼ぶかによって異なります。
- 300,807スレッド:返信のない各メールが独自の Сスレッドと見なされる場合。
- 49,554会話:スレッドが少なくとも2通のメールを必要とする場合。これらは169,925通のメール(全体の40%)を保持しています。
スレッドの84%は単一のメールです:ニュースレター、通知、スパム、誰も返信しなかった単発メッセージ、またはアーカイブに先行メールがない返信です。[画像]メールボックスが不完全である2つの兆候:63,718スレッド(21%)は、アーカイブにない少なくとも1通の以前のメールを参照しています(合計98,919通の欠落メール、例:返信の送信済みコピー)。そして、スレッドが複数のメールボックスフォルダにまたがるのはわずか9,111スレッドであり、これはMessage-IDの重複排除(A1)によるものです。
A4・誰がメールを送信していますか?スパム、政治家、AfD、企業、個人
各メールは、送信者アドレスから1つのカテゴリを受け取ります。ルールは単純で、順番に適用されます(最初に一致したものが勝ちます)。それらはsrc/analysis/senders.pyにあります。
| # | category | rule |
|---|---|---|
| 0 | No sender address | 送信者ヘッダーに解析可能なアドレスがない |
| 1 | Spam | サーバーのスパム判定、スパムタグ付き件名、使い捨てトップレベルドメイン(.su, .mom, .makeup, …)、またはローテーションドメイン:≥10通のメール、各回で異なるアドレスから≥80% |
| 2 | AfD | 党ドメイン(afd…, alternativefuer…、党のショップ/ホスティング) |
| 3 | Politics & state | 国会(Bundestag, Landtage, EU)、他の政党、政府、警察、裁判所、市町村役場 |
| 4 | Automated & newsletters | 自動返信またはメーリングリストヘッダー、no-reply/ニュースレター形式のアドレス、プラットフォーム(PayPal, Twitter, Amazon, …) |
| 5 | Private persons | フリーメールプロバイダー(gmail, web.de, gmx, t-online, …):個人アカウントから書いた個人 |
| 6 | Companies & orgs | その他すべて:独自の非党ドメインを持つ送信者(ビジネス、協会、メディア、法律事務所) |
これらはアドレスに関する記述であり、確認された身元ではありません。AfDの議員が@bundestag.deから書いた場合はPolitics & stateに分類され、gmailから書いた場合はPrivate personsに分類されます。
[画像]
短い回答:メールの約半分はAfD関連(53%)です:党事務所、役員、党システムから、わずか2,785アドレス。個人が次に多く(18%)、圧倒的に多くのアドレス(17,247)から来ており、次に企業(15%;印刷業者、商品供給業者、IT、弁護士、協会)と自動メール(10%;PayPalだけで22,000通)が続きます。AfDドメイン外のPolitics & stateは少なく(2%;主に@bundestag.de)。スパムは8,618通(2%)ですが、ほぼ同数の異なるアドレスから来ており、これはスパムの典型的な特徴です。
[画像]
スパム:サーバーのフラグとこれらのルールの比較
はい、メールサーバーからのスパムフラグ(X-Spam-Flag、およびX-Spam-Score)があります。しかし、それだけでは「どれくらいがスパムか」という質問には答えられません。ほとんどのメールには判定がありません。なぜなら、それらは判定を追加しなかったサーバーを通過したからです。判定が存在する場合、それは上記のルールをチェックすることを可能にします。
- 421,178通のメールのうち51,998通(12%)にサーバーの判定があります:1,227通がYES、50,771通がNOです。カバレッジはメールサーバーによって異なります:ハイフン付きHolmフォルダでは100%、
bundesschiedsgericht@では1%未満です。 - 判定が隠されている場合、ルールは依然としてサーバーがYESと判定したメール1,227通のうち815通(66%)を検出します。
- また、サーバーがNOと判定したメール2,036通をスパムと判定します(その4%)。ランダムサンプル(下記)は、これらがサーバーが見逃したスパムであり、誤検知ではないことを示しています。
- 判定がない369,180通のメールのうち、ルールは5,324通のスパムを見つけます。
したがって、8,618通のスパムメールという数は控えめな推定値です。サーバーフラグだけでは1,227通のフロアが得られ、ルールはサーバーフラグ付きスパムの約3分の1を見逃すため、真の数値はやや高くなる可能性があります。いずれにせよ、スパムは全体像を歪めていません。それはコーパスの約2%です。
ランダムサンプル:サーバーはNOと言ったが、ルールはスパムと判定した
| subject (server said: not spam) | rule |
|---|---|
| Gelenkschmerzen loswerden | rotating sender addresses |
| Effektive Schmerzbehandlung | rotating sender addresses |
| Toxictm Off - Reinigt das Blut und Organe von Giften | throwaway top-level domain |
| Ist dein Messer unscharf? Mit Wolframcarbid-Messerschärfer kannst du i | rotating sender addresses |
| Die Verbesserung der Potenz und der Libido in jedem Alter | rotating sender addresses |
| Richtige Behandlung fur Bluthochdruck | rotating sender addresses |
| =?UTF-8?Q?St=C3=B6rt_dich, _dass_deine_Z=C3=A4hne_nicht_makellos_sind= | rotating sender addresses |
| Hochkonzentriertes Cannabisöl | rotating sender addresses |
| Gelenkschmerzen loswerden | rotating sender addresses |
| RE: Shipping services from China to worldwide | rotating sender addresses |
| Die Psoriasis kann endlich geheilt werden | throwaway top-level domain |
| Plus 1 Duschkopf als Geschenk: hautfreundliche Dusche zaubert seidig | rotating sender addresses |
12 rows
AfDとPolitics & State:具体的に誰か?
左(青):AfD。 221,769通のメールが党のアドレスから来ており、428のドメイン(アドレスの@より後の部分)と2,785のアドレスに分散しています。グラフは最も多くのメールを送信した10のドメインを示しています。各バーは1つのドメインです。その長さと末尾の数字は、そのドメインのアドレスから10個のメールボックスに含まれるメールの数を示します。これら10のドメインでAfDメール全体の85%を占めています。右(オレンジ):Politics & State、これは国会、他の政党、政府、裁判所、警察(8,770通のメール)を意味し、送信者の種類別に分割されています。ここでも、各バーの数字はメールの数です。[画像]連邦議会(Bundestag)のメール(155アドレスから7,068通)は集中しています。90%はmarkus.frohnmaier、leif-erik.holm、beatrix.vonstorch、enrico.komning、alice.weidel、michael.espendiller、anton.friesenとそのスタッフ(.maNN)に属する15のアドレスから来ています。これらはAfDの連邦議員であり、Politics & Stateのほとんどは実際には連邦議会のアカウントから書いているAfDの人々です。他の政党は送信者としてはほとんど現れません。
[画像]各バーはカテゴリの送信者アドレスを、それぞれが送信したメール数で分割しています。個人は主に一度きりの書き手です:17,247人の個人のアドレスのうち13,199(77%)がちょうど1回だけ書き込みました。一般市民が党に宛てて書いています。AfDのアドレスは少ないですが、多作です。スパムはほぼすべて1通のメールです:毎回新しいアドレスです。
A5・ネットワークとしてどのように見えるか?
すべてのアドレスがノードです。エッジは送信者からTo/Cc/Bccの各アドレスへ、メール数で重み付けされて伸びます。
送信または受信したアドレス
77,610
送信者→受信者のペア
294,621
1つの連結クラスター内
86%
66,512アドレス
双方向に書き込んだペア
13%
短い回答:少数のハブと巨大なフリンジ。 86%のアドレスは1つのクラスターにまとまっており、数百または数千の他アドレスにメールを送信する少数の党アドレスによって結びつけられています。ほとんどのエッジは一方向です:送信者→受信者のペアの13%しか返信していません。残りの5,087の小さなクラスターは、ほとんどが孤立したペア(そのうち4,415)です:他の誰とも接続しない外部アドレス1つと受信者1つ。
[画像]行をこの種の送信者、列をこの種の受信者に書き込むとして読んでください。配信は1つの(メール、受信者)ペアなので、100人の受信者への1通のメールは100回カウントされます。これにより、大量送信者が大きく目立ちます。
- AfD → AfD が最大のブロックです:内部メールと党メーリングリスト。
- 個人 → Politics が大きく見えます(10%)が、これは人々が国会全体にメールを送っていることによって膨張しています:最も忙しい10人の個人送信者は、その34%と、個人送信者によるすべての配信の25%を占めています。
- 企業 → 企業 も同様です:アーカイブで最大の単一送信者である
musik-baron.deは、各々約100人の受信者に約1,900通のメールを送信しました(党アドレス、議員、メディア)。
[画像]双方向の連絡は、実際の通信の最も単純な兆候です。個人や企業の少数しかアーカイブ内で返信を受け取っていません。(アーカイブ外のアドレスやメールボックスから送信された返信はここで見えません。したがって、これは下限です。)
[画像]2つのクラスターが支配的です。一方にはNRW(州事務所、仲裁裁判所、Jacobiの3つのアドレス、州理事会)、これはMV事務所(7, 16)とファンショップ(5, 6)にリンクされています。もう一方には、GaulandとWeidelを中心とした連邦党(17, 11)があり、個人や企業の大量送信者に囲まれています。彼らは議員やすべての政党の議員にメールを送信しています(大きな緑色の点、番号1はこのような送信者です)。表示されていないもの:PayPalのpaypal@alternativefuer.deへの通知は、別の島を形成しています。個人は名前で表示されていません:それらはメールプロバイダーによってのみリストされ、独自のドメインから独自のドメインとして書いているものは、それなしで(送信者ルールはそのようなドメインを企業としてカウントします。ここでは個人として表示されています)表示されます。ポイントは構造であり、個人を特定することではありません。
A6・奇妙な構造
メールデータの中で、見た目とは異なるもの:
- 2つのHolmメールボックス、そして大きい方は名前を一度も名乗らない。 ドット付きの
leif.erik.holm@afd-mv.deフォルダは2019年から2026年までの60,215通のメールを保持していますが、そのスペルはアーカイブのメールのヘッダーには一切表示されません。実際のメールアドレスはハイフン付きのleif-erik.holm@であり、その独自のフォルダは2022年12月25日から2023年1月9日までのわずか2週間をカバーする247通のメールしか保持していません。ソースのブリーフィングにはハイフン付きアドレスのみがリストされています。 - 1つのアドレスの名前が付いたフォルダが他人のメールを保持している。
bundesschiedsgericht@は主にAlice Weidel、paypal@、Magnus Heutmannのメールです(A2)。フォルダ名はソースがメールをどこに保存したかを示しており、それが誰の受信トレイであったかを示していません。 unknown/は未知ではない。 その7,237通のメールにはフォルダの所有者がいませんが、配信ヘッダーが存在する場合、それは実際のメールアドレスを指しています:bundesgeschaeftsstelle@alternativefuer.de(1,147)、fabian.jacobi@afd.nrw(342)、buero@afd-mv.de(245)。- 受信トレイと送信済みメールはフォルダごとに異なる。 名前と同じアドレスは
alexander.gauland@のメールの0%を送信しましたが、bundesgeschaeftsstelle@では68%を送信しました。Gaulandのフォルダは受信トレイです(6年間で15通の送信メール)。「Xさんはどれくらいの頻度で返信しましたか?」のような質問は、送信済みメールがアーカイブにある場合にのみ回答できます。 sebastian.lux@は2021年に実質的に停止する。 その32,020通のメールのうち31,817通は2022年より前のもので、その後2026年までわずか203通しかありません。- 配信ヘッダーは、個人ではなくサーバーに依存する。 メール(
sebastian.lux@)の0%から(leif-erik.holm@)の100%まで。それらが欠落している場合、Bccとリスト受信者は表示されません。 - 大量メール。 31,750通のメールは、他のメールと全く同じテキスト(ニュースレター、通知、1人の受信者に1通ずつ送信されたメーリングリスト)を持っていますが、それぞれ独自のMessage-IDを持っています。
- 送信も受信もしないアドレス。 93,635アドレスのうち14,774は、Reply-Toヘッダーにのみ表示されます。これは通常、ウェブフォームやニュースレターです(「この人に返信してください、私にではなく」)。これが、DATA.mdが全体で93,635アドレスをカウントする一方で、送信者または受信者としては78,861アドレスしかカウントしない理由です。
A7・メールはどれくらい完全で、どれくらい本物か?
データの品質に関する2つのチェック。第一に、読み取り可能なテキストがないメールはどれくらいか?第二に、メールは送信されたときと全く同じ状態か?多くのメールでは、DKIM署名(後述)を通じてこれをチェックできます。DKIMの結果はuv run verify-dkimから取得されます(REPRODUCE.mdを参照)。
[画像]4,283通のメール(1.0%)に読み取り可能なテキストがありません。 そのほとんどは壊れていません。3,513通は添付ファイルのみ(PDF、スキャン、カレンダー招待)、281通は自動開封確認、230通はOutlookがテキストをwinmail.dat添付ファイルにパックしたものです。132通はテキストのないHTML部分(通常は画像で構成されたニュースレター)、67通は暗号化されており、わずか60通が完全に空です。どのフォルダも際立っていません。その割合は0.2%から2.0%(schiedsgericht@)の間です。これらのメールは、ヘッダーに基づいたすべての数値に引き続きカウントされます。
DKIMとは? 送信者のメールサーバーが送信時にメールに添付するデジタル署名です。後でテキストまたは署名されたヘッダー(送信者、件名、日付など)のいずれかが変更された場合、署名は一致しなくなります。[画像]100,929通のメール(24%)にDKIM署名があります。 その割合は年によって異なり、11%(2018年)から44%(2026年)です。(56通のメールは検証ツールで解析できませんでした。それらは署名なしとしてカウントされます。)今日の署名が示すこと:
- 27,120通は完全に検証されます:テキスト、ヘッダー、および送信者のキー(まだ公開されています)。
- 7,628通は数学的に完全ですが、期限切れまたは古いSHA-1で作成されています。
- 20,993通は変更されていないテキストを持っていますが、送信者のドメインはもはやキーを公開していないため、ヘッダー部分をチェックできません。これは古いメールでは正常です。キーは交換されます。
- 11,204通は変更されていないテキストを持っていますが、ヘッダーチェックが失敗します。 メールゲートウェイが件名をタグ付けするなど、途中でヘッダー行が変更されたか、またはドメインが同じ名前で新しいキーを公開した可能性があります。
- 33,805通は、もはや送信者が署名したものと一致しないテキストを持っています。 このチェックにはキーは必要ないため、古いメールでも信頼性があります。
壊れた封印は偽造を証明するものではありません。完全な封印は、テキストが送信サーバーが署名したものであることを示すだけで、それが真実であることを示すものではありません。
[画像]編集されたメール?変更されたテキストは技術的なパターンであり、個々の編集ではありません。 テキストが変更された33,805通のメールのうち31,690通(94%)は1つのフォルダ、bundesschiedsgericht@にあります。そこでは、2015年2月から2019年9月17日までの署名付きメールの92%が影響を受けており、あらゆる種類の送信者(PayPal領収書、Gmail、Twitter…)から来ています。その後、ある日から次の日まで停止します。その日付以降の1,397通の署名付きメールのうち、1通が影響を受けています。フォルダのボリュームは同時に急激に減少します。他のすべてのフォルダでは、署名付きメールの3.3%が変更されたテキストを持っており、比較可能なクラスターはありません。手動編集は、選択された少数のメールに影響を与えるでしょうが、1ヶ月のPayPal領収書のほとんどすべてではありません。このパターンは、例えばメールボックスが別のシステムに移動されたときに、メールを再エンコードしたソフトウェアに適合します。このフォルダからの200件の変更されたメールと200件の変更されていないメールの別のチェック(このノートブックでは実行されていません)はこれを支持しています。変更されたもののうち171件は、76文字で均一にラップされたbase64ブロックを含んでおり、変更されていないものは85件です。同じチェックでは、追加またはプリペンドされたテキスト、改行、mbox >Fromクォーティングは、変更のいずれも説明しませんでした。
パートB:ウェブサイトデータ
B0・どこから来て、ウェブサイトはメールにつながったのか?
ここでは2つのアカウントを相互にチェックできます:アーカイブ自体と、Lilith WittmannとHoodinformatikによる再構築("Zweimal gehackt"、2026年10月20日)、これはハッカーとホスティングプロバイダーに近い人々からの声明に基づいています。記事が述べたこと:安全でないWordPressサイト、wahlkampf.afd.deが侵入口でした。プラグイン(WP-Console)がサーバー上でコマンドラインを提供し、そこからメール管理に到達しました。党役員のメールボックスのパスワードが変更され、IMAP経由でメールがダウンロードされました。最初の実行は9月9日(約180GB)に気づかれ、2回目の実行は9月14日の午前6時頃に約300GB全体で停止されました。システムは党自身のサービス会社であるAlternita Dienstleistungs GmbHに属しており、多くの州および地方支部向けのホスティングを運営しています。アーカイブがそれ自体を示していること:04_TABULAR_DATA/000428_raw_console.jsonlは、12月12日に実行された201個のシェルコマンドのログです。これは、wahlkampf.afd.deウェブサイトのユーザー権限で、そのサイトのフォルダ内で実行されました。コマンドとその出力には、動作中のパスワードとAPIキーが含まれているため、ノートブックはコマンドがいつ実行されたか、およびどのような種類のステップであったかのみを示します(コマンドから読み取り、analysis/access.pyを参照)。
[画像]同じログの出力から読み取ります。
- ウェブサーバーからのパスワード。 マシン上のすべてのサイトの設定ファイルが読み取られ、データベースパスワードも含まれます。
- メール管理システムが応答します。
mail-management.afd.deの背後にある内部アプリがディスクから読み取られます。そこにあるキーを使用して、そのAPIは最初に拒否され(HTTP 401)、次にデータを返します(HTTP 200)。約16:30に、すべてのメールユーザーのリスト(約0.9MB)がダウンロードされ、メールボックステーブルに変換されます。アーカイブのメールボックス管理テーブル(000678_mm_mailboxes.tsv)は同じ種類のレコードです。 - メールサーバーログインが機能します(3つのメールホスト上のシステムアカウント
no-reply@…)。 - 直接ルートは失敗します。 2時間、ウェブサーバーからメールストレージ(
NFS_…_MAIL_BACKEND)をマウントしようと試みられますが、すべての試みが拒否されます。 - このログには表示されません:WP-Consoleプラグイン(サイトのアクティブプラグインのリストにもありません)、およびメールボックスパスワードの変更。どちらもこの単一セッション外で発生した可能性があります。これは、ある午後の201コマンドしかカバーしていません。
[画像]2番目のレコードが記事の時間とクロスチェックされます。アーカイブには、メール管理システムのメールボックステーブル(000678_mm_mailboxes.tsv、2,219個のメールボックス;パスワード列はここで読み取られません)も含まれています。これは、9月14日の04:24から04:27 UTC(ドイツ時間06:24–06:27)の間に6つの新しいメールボックスを示しており、それぞれが「Backup-Account von …@afd.nrw」として記録されています。そのうちの1つは、アーカイブに含まれているfabian.jacobi@afd.nrwのバックアップです。テーブルは誰がそれを作成したか、またはなぜ作成したかは示していません。タイミングは記事の「午前6時頃に検出」に合致します。テーブルの最新の変更は、その朝の08:47 UTCからのものです。したがって、このコピーは検出後に行われました。パスワード変更の確認:漏洩したメールボックスフォルダのうち9つがこのテーブルに表示されます(ドット付きleif.erik.holm@は表示されません。これは独自のメールボックスではないため、A2に適合します)。9月には1つだけ変更されました(2026年9月14日05:24 UTCにschiedsgericht@afd.nrw)。テーブルはメールボックスごとに最新の変更のみを保持するため、以前の変更は上書きされる可能性がありますが、変更されていないものについては、このシステムを通じてパスワードが変更された兆候はありません。パスワードが変更された場合、それはこのテーブルが記録していない場所で発生した可能性があります。
記事とアーカイブの連携:
| Claim in the article | What the archive says |
|---|---|
| The way in was the WordPress site wahlkampf.afd.de | Supported. The shell log runs as that site's user, in its folder. |
| WP-Console gave the command line | Not shown. Neither the shell log nor the site's exported settings name it. |
| From there into the mail administration | Supported. The log reads the mail-management app and pulls the full user list through its API. |
| Mailbox passwords were changed, mail downloaded over IMAP | IMAP plausible, password changes not seen. IMAP logins work in the log; the mail-management table shows no September change on the mailboxes in the archive before the detection (see above). |
| First run noticed on 9 Sept | Not confirmed. No email in the corpus mentions an incident. The only notice is planned "further server work" on the party's member system for 14–15 Sept, announced on 10 Sept; that may or may not be related. |
| Access kept after the first run | Consistent. The shell session was on 12 Sept, and the newest emails in the mailboxes are from 11 to 14 Sept. |
| Second run detected around 6 a.m. on 14 Sept | Supported. 6 "Backup-Account" mailboxes appear between 06:24 and 06:27 German time. The newest emails are from 08:29 and 09:04 German time, so mail still arrived, or was still copied, after that. |
| ≈300 GB in total | Matches the publication. The archive is 302 GB, of which 225 GB is email; the rest is website databases, documents and images. The split into 180 GB and 120 GB can't be checked: the source's upload records only cover the three oldest mailboxes. |
| The same mailboxes were copied twice | Consistent. Only 42 emails share a Message-ID, so the second copies were removed before publishing. |
| AfD: mainly older mailboxes | Partly. Three folders end before September 2026 (Gauland 2023, Bundesgeschäftsstelle 2018, the hyphenated Holm address 2023), but the large ones reach into September 2026. |
| Access to ≈300 mailboxes, largest first | Consistent. The archive holds 10 named mailbox folders, a small, large-volume selection out of the 2,219 the mail-management system lists. |
| Alternita runs 300+ domains | Not comparable. That counts domains (the mail system alone lists 500); B1 counts the WordPress databases that were exported. |
メール以外に、ソースの作業ファイルはさらなるウェブサイトへのアクセスを記録しています:設定ファイル(wp-config)やバックアップからの認証情報を使用したデータベースログイン、およびafd-fraktion-hessen.deへの管理者アクセスを許可したとされる独自のシングルサインオン(SSO)トークン(000264_SERVER_ACCESS_LEDGER.tsv)。wahlkampf.afd.deとalternita.deはどちらもエクスポートされたサイトに含まれています。Alternitaは、注文システム(bestellung.alternita.de)のオペレーターとしても、党サイトの管理者アカウントalternita_*としても登場します。
B1・ウェブサイトデータは何件漏洩し、どのドメインか?
短い回答:139のウェブサイト:www.afd.deに加えて138の他の党関連サイト。その数が、DATA.mdの「140」と異なる理由:
04_TABULAR_DATA/には142の異なるエクスポート名の下にテーブルエクスポートがあります。- そのうちの1つ(
h4_route_samples)はウェブサイトではありません(ソースのツールの1つの出力)。 - 1つ(
afd_de)はwww.afd.deの後続コピーであり、そのメインデータベースは02_DATABASES/にあります。 - これにより、140のエクスポート名(DATA.mdの「他のウェブサイト140件」)が残ります。各サイト独自の
siteurl設定は、2つのペアが同じサイトであることを示しています:afd-dessau-rosslau_de、afd_dessau_rosslau_de、ruben-rupp_de、test-micro_afd_de(afd-dessau-rosslau.de、ruben-rupp.de)。test-micro.afd.deはruben-rupp.deのステージングコピーです。したがって、138の個別のドメインに加えて、www.afd.deがあります。
以下のすべてのドメインは、サイトのファイル名から推測するのではなく、サイト独自のデータベース(siteurl設定)から読み取られています。サイトタイプは、ドメインから読み取られたこのノートブック独自のグループ分けです。
[画像]漏洩した139のウェブサイトすべて(個別のドメインごとに1行、サイトタイプ別にグループ化;カウントは漏洩したデータベースの個別のレコード数、B2と同様)。リストをスクロールすると、リンクが開きます。
domain
site title (its own setting)
accounts
form entries
posts & pages
comments
newest entry
National party, campaigns & media
1
afd.de
Alternative für Deutschland
7
138,049
5,214
0
2026-10-04
AfD Kompakt
18
5,080
12,166
0
2026-09-29
bilddatenbank.afd.de
2
0
2
0
2026-09-29
4
gemeinsam-fuer-das-grundgesetz.de
Gemeinsam für das Grundgesetz
6
0
20
0
2025-07-07
Generation Deutschland
8
53
9
0
2026-08-28
Mitmachen in der AfD
4
0
16
0
2026-09-29
AfD Sachsen-Anhalt
0
0
9
0
2025-05-13
AfD Spenden
4
0
9
0
2026-09-29
Wahlkampfportal der AfD
6
0
39
0
2025-12-10
State association
AfD Brandenburg
7
0
248
7
2026-09-03
Frauen in der AfD
4
0
12
3
2026-09-29
12
afd-lsa.de
AfD Sachsen-Anhalt
9
8,573
288
0
2025-10-17
13
afd-mv.de
Alternative für Deutschland Mecklenburg-Vorpommern
11
1,548
4,367
3
2026-10-05
AfD Thüringen
39
3,512
4,819
79
2026-10-03
15
afd.berlin
AfD Landesverband Berlin
10
546
60
0
2026-10-02
16
afd.nrw
AfD NRW
9
1,106
2,118
8
2026-10-03
17
afd.saarland
AfD Saarland
5
1,237
811
4
2026-10-03
18
afdbayern.de
AfD Bayern
16
9,485
1,625
4
2026-10-04
AfD Rheinland-Pfalz
8
969
751
4
2026-01-02
Bayern intern
477
556
360
0
2026-09-09
AfD Bayern Plakatshop
66
0
18
109
2026-09-29
Russlanddeutsche für die AfD NRW
6
416
1,194
3
2026-08-24
Regional association
AfD Bezirk Arnsberg
8
352
75
53
2026-09-15
AfD Bezirk Düsseldorf
9
215
95
0
2024-08-09
AfD Bezirk Münster
9
195
63
15
2026-09-24
AfD Bezirk Ostwestfalen-Lippe
9
223
457
18
2026-09-29
AFD Oberbayern | Bezirksverband Oberbayern | Alternative für
7
89
102
19
2026-09-30
Local chapter
AfD Kreisverband Anhalt-Bitterfeld
10
439
173
24
2026-10-01
29
afd-aw.de
AfD Ahrweiler
10
161
564
0
2026-09-30
AfD Bad Kissingen
5
74
20
0
2026-10-02
31
afd-bgl.de
AfD Berchtesgadener Land
7
0
126
6
2026-09-04
AfD Kreis Bielefeld
17
133
3,237
4
2026-10-03
AfD Kreis Bottrop
10
370
194
45
2026-10-04
AfD Kreis Dessau-Roßlau Stadt
8
296
619
15
2026-01-07
AfD Kreis Dortmund
8
787
543
50
2026-10-02
AfD Kreisverband Duisburg
6
708
95
27
2026-09-29
AfD - Kreisverband Ennepe-Ruhr
5
412
15
0
2026-09-30
38
afd-essen.de
AfD Kreis Essen
4
707
297
52
2026-09-08
AfD Kreis Euskirchen
7
483
47
3
2026-06-10
40
afd-hagen.de
AfD Kreisverband Hagen
7
272
230
46
2026-09-23
AfD Kreisverband Harz
8
135
24
1
2026-09-10
AfD Haßberge / Rhön-Grabfeld
7
71
20
0
2026-09-30
AfD Kreis Herford
8
204
500
28
2026-10-05
AfD Hochsauerlandkreis
7
121
58
9
2026-10-04
45
afd-hro.de
AfD Hansestadt Rostock
9
111
23
0
2026-09-18
AfD Fraktion im Stadtrat Iserlohn
5
262
46
3
2025-12-01
AfD Kreisverband Kelheim
4
4
55
0
2026-10-04
AfD Kreis Krefeld
10
423
143
9
2026-10-05
AfD Kreis Borken
7
350
189
13
2026-09-29
AfD Kreis Coesfeld
9
258
199
9
2026-09-29
AfD Kreis Düsseldorf
8
625
248
32
2025-10-10
AfD Kreis Hamm
7
484
160
7
2026-10-04
AfD Kreis Olpe
9
44
153
5
2026-09-30
54
afd-kreis-recklinghausen.de
AfD Kreis Recklinghausen
9
686
1,392
104
2026-09-30
AfD Kreisverband Wesel
5
551
283
61
2026-05-21
56
afd-kreisverband-rottal-inn.de
AfD Kreisverband Rottal-Inn
0
0
47
0
2026-10-03
Afd Landsberg Lech
8
85
23
7
2026-09-30
AFD Kreisverband Lichtenfels
9
75
55
0
2026-09-30
AfD Kreisverband Main-Spessart
6
89
15
0
2026-09-30
AfD Kreis Mettmann
13
581
1,319
18
2025-08-18
AfD Kreisverband Minden-Lübbecke
5
519
426
45
2026-10-03
AfD Kreis Mönchengladbach
12
666
39
0
2025-12-03
63
afd-mse.de
AfD Kreisverband Mecklenburgische Seenplatte
6
575
185
14
2026-10-01
AfD Kreis Mülheim
10
672
343
32
2026-10-04
Kreisverband München Land
6
78
15
51
2026-10-02
AfD Kreis München Ost
7
108
122
4
2026-02-20
AfD München
18
143
917
0
2026-10-01
AfD Kreisverband Münster
8
794
1,109
52
2026-09-29
69
afd-neuburg-schrobenhausen.de
AfD Kreis ND-SOB
1,932
293
16
0
2026-09-30
70
afd-nwm.de
AfD Kreisverband Nordwestmecklenburg
9
273
1
0
2026-09-29
AfD Kreisverband Oberberg
1,816
498
863
288
2026-10-04
AfD Oberhausen
7
311
1,148
2
2026-10-04
AfD Kreisverband Passau
7
74
55
3
2026-10-03
AfD Rhein Kreis Neuss
14
373
369
0
2025-09-25
75
afd-ro.de
AfD Kreisverband Landkreis Rostock
7
557
284
12
2026-09-29
AfD Kreisverband Schwarzwald-Baar
8
218
20
0
2026-10-03
AfD Kreisverband Schweinfurt-Land
5
4
5
0
2026-09-30
AfD Kreis Siegen-Wittgenstein
7
489
403
17
2026-03-03
79
afd-sn.de
AfD Kreisverband Schwerin
4
326
17
13
2026-06-25
80
afd-swm.de
AfD Kreis Südwestmecklenburg
7
181
36
16
2026-07-05
81
afd-trier.de
AfD Kreisverband Trier
6
261
50
10
2026-09-30
82
afd-unterallgaeu-memmingen.de
AfD Kreis Unterallgäu-Memmingen
9
255
426
37
2026-09-30
83
afd-vg.de
AfD Kreisverband Vorpommern-Greifswald
7
239
1,999
0
2026-10-02
84
afd-vr.de
AfD Kreisverband Vorpommern-Rügen
7
383
190
26
2025-10-25
AfD Weiden | Kreisverband
5
26
696
0
2026-10-02
AfD Kreisverband
7
8
116
30
2026-09-09
AfD Kreis Würzburg
4
284
53
14
2026-09-30
AfD Kreis Wuppertal
5
0
29
12
2026-09-29
89
afd.koeln
AfD Köln
13
1,402
651
16
2026-10-05
AfD Kreisverband Osnabrück
6
368
193
30
2026-10-04
AfD Saarpfalz
5
39
18
0
2026-09-30
AfD Märkischer Kreis
9
816
184
16
2026-10-03
93
kebst-blue.volker-heinecke.de
Katrin Ebner-Steiner
13
366
199
58
2026-09-29
Berlin district
94
friedrichshain-kreuzberg.afd.berlin
AfD Bezirk Friedrichshain-Kreuzberg
17
18
24
0
2026-08-31
AfD-Bezirksverband Lichtenberg
9
18
153
0
2026-10-02
96
marzahn-hellersdorf.afd.berlin
AfD Bezirksverband Marzahn-Hellersdorf
10
18
208
70
2026-09-14
AfD Bezirksverband Berlin Mitte
9
18
12
0
2026-08-31
AfD Bezirksverband Neukölln
6
18
49
0
2026-08-25
AfD Berlin-Pankow
10
1,782
80
86
2026-10-02
AfD Bezirksverband Reinickendorf
11
18
145
110
2026-08-31
AfD Bezirk Spandau
8
18
16
48
2026-09-06
102
steglitz-zehlendorf.afd.berlin
AfD Steglitz-Zehlendorf
12
18
13
0
2026-09-18
103
tempelhof-schoeneberg.afd.berlin
AfD Bezirksverband Tempelhof-Schöneberg
11
18
33
0
2026-09-10
104
treptow-koepenick.afd.berlin
AfD Treptow-Köpenick
8
18
87
18
2026-09-30
Parliamentary group
Aktuelles
6
27
887
12
2026-09-30
AfD-Fraktion im Rat der Stadt Duisburg
9
82
360
12
2026-10-04
Alternative für Deutschland, Kreistagsfraktion Ennepe-Ruhr
6
29
97
17
2026-09-30
AfD-Fraktion Hessen
9
939
1,354
14
2025-09-08
AfD Fraktion im Stadtrat Lünen
9
75
115
118
2026-09-30
AfD-Fraktion Rhein-Kreis Neuss
6
39
26
2
2025-09-25
AfD-Ratsfraktion Siegen
4
158
52
3
2026-09-30
AfD Fraktion Treptow-Köpenick
8
375
607
45
2026-09-30
AfD-Fraktion Vorpommern-Greifswald
9
22
85
0
2026-09-30
Alternative für Deutschland Ratsfraktion Witten
5
147
118
22
2026-10-02
AfD-Fraktion im Rat der Stadt Wuppertal
8
32
48
9
2026-09-30
AfD-Fraktion im Rat der Stadt Köln
7
370
814
27
2026-10-01
AfD Fraktion Saarlandes
5
105
48
7
2026-10-03
118
afd-im-roemer.de
AfD-Fraktion im Römer
7
224
918
20
2026-09-30
AfD im Kreistag Anhalt-Bitterfeld
7
114
49
8
2026-09-30
AfD Fraktion - Bündnis Deutschland
7
53
165
29
2026-09-30
AfD im Kreistag Siegen-Wittgenstein
6
22
67
10
2026-09-30
122
afd-kreistagsfraktion-hsk.de
afd-kreistagsfraktion-hsk
0
0
29
0
2026-10-03
123
afd-ratsfraktion-bottrop.de
AfD-Ratsfraktion Bottrop
9
7
219
10
2026-09-30
Offizielle Seite der AfD im Münchner Stadtrat.
8
0
459
2
2026-09-30
Die Demokraten im Stadtrat Trier
8
24
145
13
2026-03-16
Politician's own site
Kay Gottschalk | Mitglied des Deutschen Bundestages
7
175
891
40
2026-09-30
127
alice-weidel.de
Alice Weidel - AfD Kanzlerkandidatin 2025
2
0
658
0
2026-06-29
Bernd Schattner
10
0
99
60
2026-09-22
129
daniel-roi.de
Daniel Roi
8
209
133
35
2026-10-01
Horst Förster, MdL
6
45
136
14
2026-09-28
Kay-Uwe Ziegler, Mitglied des Deutschen Bundestages
4
264
283
21
2026-09-30
Richard Graupner, MdL
7
30
812
17
2026-10-01
133
ruben-rupp.de
Ruben Rupp - Ihr Landtagsabgeordneter im Wahlkreis Schwäbisc
26
206
656
0
2024-12-01
Abgeordneter Thomas Röckemann
7
780
382
2
2026-10-04
Wolfgang Wiehle
11
19
241
0
2026-10-03
Not a party site
136
alternita.de
Alternita
5
0
21
65
2026-09-30
bestellung.alternita.de
5
0
4
0
2025-06-24
Die Demokraten im Stadtrat Trier
8
29
191
23
2026-09-30
139
ngofakten.de
NGO Fakten
5
0
38
0
2026-06-03
B2・ウェブサイトデータには何が含まれているか?
WordPressサイトはすべてをデータベーステーブルに保存します。重要なもの(個別のレコードとしてカウント、多くのサイトは2回エクスポートされたため、行数をカウントすると重複カウントになります):
| what | records (138 sites) | on how many sites | www.afd.de (later copy) |
|---|---|---|---|
| site accounts (admins, editors: name, email, password hash) | 5,375 | 137 | 7 |
| form submissions (contact, membership, donation, volunteer forms: names, emails, phones, addresses) | 62,318 + 3,031 Elementor | 119 | 138,049 |
| reader comments (name, email, IP) | 2,697 | 95 | 0 |
| published articles & pages | 64,352 | 140 | 5,214 |
all posts entries (incl. drafts, revisions, uploads, plugin records) | 319,148 | 140 | 47,972 |
copies of emails the site sent (postman_sent_mail) | 20,297 | 110 | 250 |
| admin activity log (who did what, with IP) | 2,007,088 | 124 | 0 |
個人データはフォームに含まれています。 200,367件のフォーム送信(その3分の2はwww.afd.de)には、訪問者が入力した内容が含まれています:名前、メールアドレス、電話番号、住所、場合によっては生年月日。(すべての送信が個別の人物であるとは限りません。以下のバーストを参照してください。)これらは党のサイトであるため、送信はGDPR第9条の下で特別なカテゴリである政治的共感のヒントも示唆します。数値について:それらはsrc/analysis/wordpress.pyから来ており、個別の(サイト、テーブルプレフィックス、ID)をカウントします。同じテーブルに対するDATA.mdの数値は、ほとんどが2〜13%低いです(例:282,734件の投稿エントリ、59,446件のフォーム送信;コメントは例外で2,708件)。リポジトリにはそれらのためのスクリプトが存在しないため、差を追跡できません。送信メールのカウントは、9つの小さな4〜11ファイルのサイトキャプチャを除外すると、ほとんどのサイトで正確に一致します(20,047件、109サイト)。したがって、DATA.mdはそれらのいくつかを排除した可能性があります。
[画像]州支部(バイエルン、ザクセン=アンハルト、テューリンゲン)と党新聞AfD Kompaktが最も多くの送信を保持しています。in.afdbayern.de(その名前から、バイエルン党の内部サイト)は圧倒的に多くの口座(477)を持っています。管理者ログ列は、多くのサイトがIPアドレスとともにすべての管理者ログインと編集を記録したことを示しています。送信メールログはほとんどのサイトで正確に250件で停止します。ロギングプラグインは最新のもののみを保持します。
[画像]曲線は平坦です(月に数百から数千件)が、バーストを除きます。これは、1つのフォームが1日に500件以上の送信を受け取った日です。このような日は11日あり、42,166件の送信(全期間の21%)を保持しています。2つの大きなバーストはwww.afd.deで発生しており、通常の日は20〜150件の送信があります。それらが何であるかは、これらのテーブルからはわかりません:ボットの洪水、大量インポート、または調整されたキャンペーンはすべて同じように見えます。IPアドレスはwww.afd.deでは決定的なものではありません。これは、毎日わずかな数の個別のIPアドレス(おそらくプロキシ)のみを記録します。実際の訪問者のIPアドレスを記録するサイトでは、1〜3のIPアドレスからのバースト(例:afd-lsa.de、afdbayern.de)は自動化されている可能性が最も高いです。いずれにせよ、フォーム送信は個人と同じではありません。
最大のバースト
| site | form id | date | submissions | distinct IPs that day |
|---|---|---|---|---|
| afd.de | 84 | 2022-11-02 | 14,927 | 4 |
| afd.de | 33 | 2023-12-11 | 13,496 | 1 |
| afd.de | 33 | 2023-12-10 | 5,239 | 1 |
| afd-lsa.de | 3 | 2023-05-03 | 1,855 | 3 |
| afdbayern.de | 6 | 2024-01-09 | 1,833 | 3 |
| afd.de | 84 | 2022-11-04 | 1,200 | 2 |
| afdkompakt.de | 2 | 2020-06-27 | 1,077 | 2 |
| afdkompakt.de | 2 | 2020-06-26 | 700 | 2 |
| afd.de | 115 | 2023-11-05 | 637 | 1 |
| afd.de | 53 | 2018-11-23 | 631 | 2 |
| afd.de | 53 | 2018-11-22 | 571 | 2 |
11 rows
[画像]ほとんどのデータベースは2026年9月/10月にコピーされました。 各データベースの最新のエントリがこれを示しています:コピーは、それが取得された後に作成されたエントリを含むことはできません。138サイトのうち106サイトでは、最新のエントリは2026年9月または10月のものであり、これらのデータベースはこれらの週にコピーされました。最後のコピーは2026年10月5日です。他のサイトはより古い最新のエントリを持っています。それは必ずしもそれらがより早くコピーされたことを意味するわけではありません。サイトでしばらく何も起こらなかったか、またはコピーが古いバックアップから来たかのどちらかです。比較のために、アーカイブの最新のメールは2026年9月14日付けです。
B3・ソースはどのようにデータを処理したか?
ソースはデータベースをコピーしただけではありません。アーカイブの大部分は彼ら自身の作業です:作業キュー、AIスコア、ツールの出力、および個人データを使いやすい形式に再ソートするリスト。以下のフローはサイズ別のアーカイブを示しています:各フォルダ、次にどのような種類の資料が含まれているか。「ソースによって作成された」は、システムから取得されたものではなく、データについて生成されたすべてのものを意味します。青 = システムから取得された元のデータ(290 GB、98,917ファイル)。オレンジ = ソースによって作成されたもの、コピーされたサーバーファイルも保持する一部の混合作業フォルダを含む(11.0 GB、2,050ファイル)。灰色 = 公開APIスナップショットと公開パスワードリスト。サイズ別では、ソースの資料はメールに比べて小さいですが、ファイル数ではそうではなく、プライバシーにとって最も重要なリストが含まれています。
[画像]ソースがウェブサイトデータベースの上に構築したもの(ファイル名によるグループ化;ファイル内のカウントはソースのもの、DATA.mdから):
- すぐに使える個人データリスト。 119個の
*.gf_named.tsvファイルは、各フォーム回答をそのフィールドラベルとクラス(メール、名/姓、電話、都市、会員番号、生年月日)に一致させます。さらに226個のTSVは、すべてのサイトのすべてのテーブルを検索して、個人データのように見えるものをすべて見つけます(362,398行、ほとんどがノイズ)。000072_inf6_identities.tsvは665万件の識別子(IP、メール、電話)をリストしています。www.afd.deについては、02_DATABASES/の別のバンドルに抽出されたメール(86,237件)、電話番号、名前、住所が含まれています。 - トリアージ。 キーワード検索、
cat_illegal_activityのようなカテゴリラベル、読み取りキュー(MAIL_QUEUE_V2.tsv、2.7 GB)、および言語モデルスコア。ブリーフィングの「主要な発見」はここから来ています:約263,000件のキーワードランク付けされたレコード→490件がモデルによってスコアリング→136件が高/クリティカルと評価→手動チェックサンプル。 - アクセス記録。 プローブ結果、ダウンロードリスト、資格情報再利用テスト、およびサーバーアクセスの台帳。
これらは元のテーブルに含まれていない情報を追加するものではありません。労力を削減します。これらのリストがあれば、大規模な連絡先情報の収集はデータベース作業を全く必要としません。
注記
- 私の知識と信念の限りでデータを分析しました。
- 私の知識と信念の限りで、ここに示された結果から個人に関するデータを削除しました。
- 分析にはAIを使用しました。ローカルで実行されたモデルのみがソースデータを見ました。他のプロバイダーのモデルはコード生成に使用されました。
- このページのすべてのステップを再現するためのコードは、リポジトリgithub.com/erikgoldenstein/afd-emailsにあります(
REPRODUCE.mdに指示があります)。リポジトリは現在オフラインであり、これが許可されることが法的に明確になったら公開されます。 - メール内容の分析はすでに存在します。これも、法的な明確性が高まったら公開されます。
- 連絡先:afd-emails@erik.gdn
チャートのダウンロード
すべての21のチャートを、ドイツ語または英語のベクトルPDFで、選択可能なテキスト付きで提供します。
ドイツ語のチャート(PDF、zip)英語のチャート(PDF、zip)
[2] タイトル: Trials and Tribulations of Native Lua Compilation
URL: https://samyeyo.github.io/clx/blog.html
本文:
clx
ネイティブLuaコンパイルの試行錯誤
2026年10月・12分読書
私は長年Luaを扱ってきましたが、Luaの好きな点の一つは、その必要とするものが非常に少ないことです。小さく、エレガントで、ポータブルで、そして組み込みが驚くほど簡単です。最後の特性はおそらくLuaが成功した理由の一つでしょう:ゲーム、アプリケーション、ツール、あるいはほぼ何にでもLuaインタープリタを組み込むことができ、すぐに強力なスクリプト言語を得ることができます。
しかし、長年Luaを使用してきた後、私はその設計の別の側面に行き当たりました。
Luaアプリケーションをビルドして配布したいときは、常にLua VMが関わっていました。LuaRTとそのrtcコンパイラを使えば、少なくともWindows上では、デプロイメント問題の大部分をすでに解決していました。Luaアプリケーションをスタンドアロン実行可能ファイルとしてパッケージ化でき、ユーザーにLuaを別途インストールするように依頼する必要がなくなりました。
それはうまくいきましたが、別の疑問が残りました。インタープリタが実行可能ファイルに組み込まれていたとしても、アプリケーションは最終的にLua VMを介してLuaコードを実行していました。実行可能ファイルは外部からはネイティブアプリケーションのように見えましたが、その下では依然として解釈されているLuaプログラムでした。
私は一歩先へ進んだらどうなるか見てみたかったのです。
Lua VMに依存することなく、真にネイティブなLua体験を求めていました。lua55.dll、liblua55.so、または組み込みLua VMなしでアプリケーションを実行したかったのです。ランタイムを完全に排除しようとしていたわけではありません。コンパイルされたLuaプログラムは、テーブル、文字列、ガベージコレクション、コルーチン、その他のLuaセマンティクスのようなものにはネイティブサポートが必要です。私が求めていたのは、汎用Lua VMを、コンパイルされたネイティブLuaコードをサポートするために特別に設計されたランタイムに置き換えることでした。
もしプロセスから追加のパフォーマンスを得ることができれば、それは素晴らしいボーナスになるでしょう。
そのアイデアはやがてclxになりました。
VMのパッケージング vs プログラムのコンパイル
rtcとclxの重要な違いは、問題へのアプローチ方法です。
Lua VMを中心としたシステムは、アプリケーションを非常に便利にパッケージ化できます。Luaソースまたはバイトコードはインタープリタと一緒にバンドルされ、インタープリタがそれを実行します。デプロイメントの観点からは、それは完全に合理的です。
clxは異なるアプローチを取ります。Lua 5.5ソースコードを解析し、分析し、プログラムを表すC++コードを生成します。生成されたC++は、Clang、GCC、またはMSVCのような通常のネイティブコンパイラによってコンパイルされます。
結果として得られる実行可能ファイルは、Luaプログラムから生成されたネイティブコードと、プログラムが必要とするclxランタイムを含みます。その下にLuaバイトコードを実行するLuaインタープリタはありません。
その区別は重要です。clxにはまだランタイムがあります。それは単にLua VMではないだけです。
clxランタイムは、コンパイルされたプログラムがまだ必要とするLuaの部分のネイティブ実装を提供します:テーブル、文字列、メモリ管理、ガベージコレクション、コルーチン、標準ライブラリ、その他のランタイム機能。違いは、アプリケーション自体がネイティブコードにコンパイルされ、そのランタイムに直接呼び出すことです。
これは数段落で説明されるとかなり単純に聞こえます。それを構築することは全く別の問題です。
Luaは欺瞞的に小さな言語です。構文はコンパクトですが、セマンティクスはそうではありません。テーブル、複数の戻り値、クロージャ、コルーチン、メタテーブル、環境、数値変換、アップバリュー、イテレーション、エラー処理、そしてこれらの機能間のすべての相互作用は、Luaを正しくコンパイルすることを単に構文をC++に翻訳するよりもはるかに複雑にします。
さらに進むにつれて、ネイティブLuaコンパイラの興味深い部分は、if、while、または算術式のコードを生成することではないことに気づきました。難しい部分は、ターゲットがネイティブコードであるという事実を利用しながら、Luaのセマンティクスを維持することでした。
Luaソースからネイティブ実行可能ファイルへ
clxの基本的なワークフローは意図的にシンプルです。
次のようなLuaプログラムを与えると:
print("Hello clx!")
次のようにコンパイルできます:
clx hello.lua
ネイティブ実行可能ファイルを取得します。
特別なLuaコードの調整は必要ありません。Luaを記述すれば、clxがコンパイルプロセスを処理します。
コンパイラは、ネイティブコンパイラをすぐに呼び出す代わりに、C++ソースコードを生成することもできます:
clx hello.lua --cpp
これは、コンパイラ自体のデバッグに役立つだけでなく、生成されたコードを独自のビルドシステムに統合したい人々にも便利です。
clxはオブジェクトファイルや静的ライブラリも生成できます:
clx hello.lua --object
clx hello.lua --static
これは設計において重要な部分でした。clxを「Luaスクリプトが実行可能ファイルになる」というユースケースに限定したくありませんでした。ネイティブコンパイルは、コンパイルされたLuaコードを、より大きなネイティブアプリケーションのコンポーネントとして使用する可能性を開きます。
Luaモジュールは期待通りに動作し続けます
このプロセスで犠牲にしたくないことの一つは、Luaのモジュールシステムでした。
プロジェクトには複数のLuaファイルを含めることができます:
main.lua
greet.lua
utils.lua
そしてそれらを一緒にコンパイルできます:
clx main.lua greet.lua utils.lua --output app
次のような通常のLua呼び出し:
local greet = require("greet")
引き続き機能します。
違いは、モジュールが実行時に個別のLuaソースファイルから解釈されるのではなく、結果のネイティブプログラムにコンパイルできることです。
これはプログラム全体をコンパイルする nice な結果の一つです。require()呼び出しは、プログラム実行中に別のLuaファイルを見つけて解釈する必要があることを必ずしも意味しません。モジュールはすでにネイティブ実行可能ファイルの一部になっている可能性があります。
ネイティブモジュール
私がC++を出力言語として選択した理由の一つは、clxにネイティブライブラリへの自然なブリッジを提供することです。
ネイティブモジュールは、clx C++ APIを使用して記述できます。たとえば、Lua引数を受け取りLua値を返す単純な関数は次のようになります:
static clx::MultiValue add(clx::LState* L, const clx::LValue* args, size_t n) {
double sum = 0;
for (size_t i = 0; i < n; i++) {
sum += clx::check_number(L, args[i]);
}
return {clx::number(sum)};
}
モジュールは、Luaアプリケーションと一緒にコンパイルおよびリンクできます:
clx main.lua --modules fastmath
そしてLuaから通常通りロードします:
local fastmath = require("fastmath")
これは、ネイティブアプローチが特に有用になる領域の1つです。Luaを分離されたスクリプト環境として扱う代わりに、コンパイルされたLuaコードはC++コードと一緒に存在し、clx APIを介してネイティブライブラリに直接呼び出すことができます。
また、CまたはC++で書かれたライブラリを特別なLua固有の実装に翻訳する必要がないことも意味します。それらはネイティブライブラリのままで、Luaに機能を提供する薄いclxバインディングレイヤーを持っています。
コンパイルされたLuaライブラリ
同じアイデアは逆方向にも機能します。
Luaモジュールは静的ライブラリとしてコンパイルできます:
clx mylib.lua --static --output mylib
そしてclx APIを介してC++アプリケーションに公開されます。
その結果、Luaコードは、単にそのアプリケーションによってロードされるスクリプトであるのではなく、より大きなアプリケーションのネイティブコンポーネントになることができます。
これは、最初から求めていたことの一つでした:Luaは、プログラムの他のネイティブコンポーネントと同じレベルに置くことができるべきです。
しかし、時にはLua VMが必要になることもあります
clxを開発中に明らかになったもう一つの重要な区別があります。
通常の実行パスからVMを削除しても、Lua VMが決して有用ではないという意味ではありません。
一部のアプリケーションは、アプリケーションがコンパイルされたときには知られていなかったLuaコードを実行する必要が本当にあります。プラグイン、ユーザー スクリプト、設定コード、または意図的にスクリプト機能を提供するアプリケーションが良い例です。
そのため、clxには--dynamicモードもあります。
このモードが有効な場合、clxはLua 5.5 VMを組み込み、コンパイルされたプログラムとインタープリタの間の必要なブリッジを提供します。これにより、アプリケーションの残りの部分に対して通常のAOTコンパイルモデルを維持しながら、load()のようなランタイム機能が可能になります。
したがって、実際には2つの異なる実行モデルがあります。
通常のAOTコンパイルでは、Luaコードはネイティブコードになり、clxランタイムを使用します。--dynamicを使用すると、実際にLuaコードを動的にロードして実行する必要がある場合に、Lua VMをさらに利用できます。
私はこれが、一方のアプローチが「ランタイムを持っている」ともう一方が持たない」と言うよりも、はるかに有用な区別だと考えています。どちらにしてもランタイムは必要です。興味深い質問は、そのランタイムが何をしているかです。
パフォーマンスも動機の一部でした
実行パスからLua VMを排除することがclxの開発を開始した主な理由でしたが、パフォーマンスも別の動機でした。
ネイティブコンパイルは、インタープリタのLuaバイトコードよりもコンパイラにかなりの自由を与えます。clxはコンパイル中にプログラムを分析し、その後、基盤となるネイティブコンパイラによって最適化できるC++を生成できます。
これによって大幅な違いが生じるワークロードがありますが、clxがLuaJITや他のすべてのLua実装よりも普遍的に高速であるとは考えていません。パフォーマンス特性はプログラムに大きく依存し、コンパイラがどれだけ効果的にプログラムを最適化できるかにも依存します。
私にとって、より興味深い部分は、パフォーマンスの向上は、単に高速なLuaインタープリタを構築しようとするのではなく、プログラム自体をコンパイルすることから来るということです。
それは最適化問題を完全に変えます。
コンパイラは実行前にプログラムについて推論し、特定の操作を特化し、不要な作業を排除し、ネイティブコンパイラに通常のC++コードを最適化のために残すことができます。
改善の余地はまだたくさんありますが、この方向はすでにいくつかのワークロードで意味のある結果を生み出しています。
サイズも重要です
clxを開発中に私を驚かせたもう一つのことは、結果のプログラムがどれほど小さくなるかということでした。
些細なプログラムでも、ネイティブ最適化とデッドコード削除の後では驚くほど小さな実行可能ファイルを生成できます。特に不要なclxランタイムの部分が除外される場合です。
同じ原則がより大きなアプリケーションにも適用されます。ネイティブSokolモジュールを使用した完全なPongゲームは、必要なclxランタイムとネイティブ機能を含めて、わずか数百キロバイトのスタンドアロン実行可能ファイルにコンパイルできます。
デプロイメントサイズが重要なアプリケーションでは、実際に必要な機能のみをコンパイルできることは非常に役立ちます。
ここでも、重要な区別は、ランタイムが消えたわけではないということです。それはネイティブプログラムの一部になり、コンパイラは必要とされない機能を含まないようにすることができます。
難しいのはその間のすべてです
コンパイラ自体も、そこに至るまでに多くのイテレーションを経てきました。
テーブルはおそらく最大の課題の一つでした。Luaテーブルは同時に配列、ハッシュマップ、オブジェクト、モジュールコンテナ、環境、そして言語の基盤の多くです。ネイティブ表現は、すべてのテーブル操作を不必要に高価にすることなく、それらすべての役割を処理する必要があります。
複数の戻り値も別の例です。Luaの呼び出し規約は、従来のC++関数呼び出しとは根本的に異なり、return f()、異なる数の値を持つ代入、可変長引数、式の中にネストされた呼び出しなどを処理するには、専用の表現が必要です。
コルーチンは、Luaの実行モデルが通常のC++制御フローに自然にマッピングされないため、別のクラスの問題をもたらしました。clxは、Luaコルーチンのセマンティクスを維持しながら、必要なコンテキストスイッチを実装するために、最終的にプラットフォーム固有のメカニズムを使用する必要がありました。
ガベージコレクションは、C++に単純に委任できないもう一つの部分です。コンパイルされたLuaプログラムは依然としてLuaのメモリ管理セマンティクスを必要とするため、clxは独自のインクリメンタルマークアンドスイープガベージコレクタを持っています。
さらに、環境、メタテーブル、整数セマンティクス、文字列処理、クロージャ、エラー伝播、イテレーション、モジュールロード、そしてこれらすべての機能間の相互作用など、あまり明白でないケースがたくさんあります。
特定のサブシステムが完了したと思うたびに、別のLuaプログラムが私が考慮していなかったエッジケースを見つけました。
おそらく、ネイティブLuaコンパイラ開発の最も正確な説明はこれでしょう:個々の部分は管理可能ですが、それらすべてを正しく動作させることが実際の仕事です。
なぜC++なのか?
他のネイティブコード形式をターゲットにする可能性を検討しましたが、C++は非常に実用的な選択肢であることがわかりました。
Clang、GCC、MSVCは、私が関心のあるプラットフォームに対して成熟した最適化バックエンドを提供しています。完全なマシンコードバックエンドを実装する代わりに最新のC++20を生成することで、clxはネイティブコンパイラにすでに費やされた数十年の作業から恩恵を受けることができます。
また、既存のネイティブソフトウェアとの統合も大幅に容易になります。
誰かがすでにC++ライブラリを持っている場合、それを薄いclxモジュールでラップすることは、完全に別の外部関数インターフェースとコード生成バックエンドを作成するよりもはるかに簡単です。
もちろん、トレードオフがあります。生成されたC++は大きくなる可能性があり、非常に大きな生成された翻訳単位はコンパイルにかなりの時間がかかることがあります。これは、コンパイラが成長するにつれて私がまだ取り組んでいる問題の1つです。
ネイティブコンパイルは複雑さをなくすものではありません。それはツールチェーンの別の部分にその一部を移動させます。
clxの現状
clxはまだ進化していますが、もはや単に少数のLua例をコンパイルする実験とは見なしていません。
Lua 5.5構文をサポートし、実際のマルチファイルプロジェクトをコンパイルでき、ネイティブモジュールを統合でき、スタンドアロン実行可能ファイルとライブラリを生成でき、必要に応じてオプションでLua VMを組み込むことができます。
まだ粗いエッジがあり、私がまだ実装または最適化していないものを明らかにするLuaプログラムも確かにあります。このようなコンパイラは、「完了」と宣言するのが難しいです。なぜなら、新しいプログラムは、注意に値する言語やランタイムのコーナーを発見する機会だからです。
しかし、基本的なアイデアは機能しています。
Luaプログラムを書き、clxでコンパイルし、スタンドアロンのLuaインストール、lua55.dll、またはliblua55.soを必要としないネイティブ実行可能ファイルで終わることができます。実行可能ファイルにはclxランタイムが含まれていますが、そのランタイムはアプリケーションを解釈するためではなく、Luaのランタイムセマンティクスをネイティブ実装するために存在します。
これが、プロジェクトを開始したときに私が求めていたことです。
clxを構築した理由
振り返ってみると、clxはLuaにもう1つのコンパイラが必要だと思ったから始まったわけではありません。
Luaを長年使用し、その周りでツールを構築してきた経験から、Luaを主に組み込みスクリプト言語としてではなく、ネイティブプログラミング言語として扱ったらどうなるかという好奇心が次第に高まったからです。
Luaは30年以上、他のプログラムの中に組み込むのに最適な言語の一つでした。私は、Luaをプログラムの中心に置くことがどのようなものかを見たかったのです。
それは予想以上に困難であることが判明しました。
インタープリタモデルに戻る、別のVM依存を受け入れる、あるいは「Luaはとにかく動的だから」と特定のコーナーケースを気にしないことを選択する方が簡単な瞬間がたくさんありました。
代わりに、コンパイラをもう少し先に進め続けました。
そして、それがまさに今日のclxです。そのプロセスの結果です。
これはすべてのLua実装を置き換える試みではなく、ネイティブコンパイルが常に正しい答えであるという主張でもありません。それは単に、言語がネイティブプログラムに直接コンパイルされ、専用のネイティブランタイムによってサポートされるときにLuaが何になるかを探求する試みです。
長年Lua VMをアプリケーションにパッケージ化してきた後、Luaプログラムをコンパイルして、結果の実行可能ファイルを誰かに手渡すときに、Luaインタープリタに依存するアプリケーションではなく、ネイティブプログラムを渡していることを知ることは、本当に満足のいくことです。
[3] タイトル: New plastic pollution discovered: 'Plasticorals' coral rubble fused with plastic
URL: https://www.oist.jp/news-center/news/2026/9/18/new-form-plastic-pollution-discovered-shores-vulnerable-coral-reefs
本文:
新たなプラスチック汚染が発見される:脆弱なサンゴ礁の海岸で見つかった「プラスチックコーラル」
2026年9月18日
プラスチックと融合したサンゴの破片である「プラスチックコーラル」は、人間の活動の永続的な証拠であり、重要な海洋環境への潜在的な脅威を浮き彫りにしています。
日本の亜熱帯の島、沖縄での定期的な海岸ゴミ調査中、研究者たちは、淡いサンゴの破片の中に、小さく鮮やかな色の斑点を発見しました。
研究室に戻り、分光分析と顕微鏡分析を行った結果、これらの斑点が、死んだサンゴの破片の骨格の細孔に不可分に染み込んだ、一般的な家庭用プラスチックからの溶融ポリマーであることが明らかになりました。
Marine Pollution Bulletinに掲載された新しい論文で、沖縄科学技術大学院大学(OIST)と琉球大学の研究者たちは、第一著者であるIfenna Ilechukwu博士とシニア著者であるJames D. Reimer教授が「プラスチックコーラル」と名付けたものを記述しています。プラスチックと天然素材から形成されたハイブリッド廃棄物であるプラスチック凝集体の一種であり、気候変動やその他の人間の活動によってすでに脅かされているサンゴ礁生態系へのプラスチック汚染の長期的な影響を表しています。
沖縄島のビーチから収集されたプラスチックコーラル
画像をクリックすると、高解像度バージョンが表示され、プラスチックコーラルの標本について詳しく読むことができます。各標本は幅20〜30ミリメートルです。
伊武ビーチのプラスチックコーラル
蘇州ビーチのプラスチックコーラル
蘇州ビーチのプラスチックコーラル
蘇州ビーチのプラスチックコーラル、別アングル
蘇州ビーチのプラスチックコーラル
ビーチで見つかるサンゴの破片は海に戻される可能性があり、そこでサンゴ礁にいくつかの重要な役割を果たします。新しいサンゴは破片を安定した基質として利用し、破片の不規則な形状は、若い魚や他の小さな海洋生物を強い潮流や捕食者から保護する隠れ家を作り出します。
プラスチックコーラルの正確な起源(最も可能性の高い発生源はビーチでの焚き火ですが)と、サンゴ生物への具体的な、潜在的に毒性のある影響を判断するにはさらなる研究が必要ですが、一般的なポリマーから溶出する化学物質がサンゴの繁殖を妨げ、プラスチック片がサンゴ病原体を宿し、海洋食物連鎖を通じて伝播することが以前の研究からわかっています。
プラスチックは、セメントと鋼鉄に次いで世界で3番目に広く製造されている材料です。しかし、後者の2つが千年単位で劣化するのに対し、プラスチックはそれよりもはるかに長くそのまま残ります。将来の地質学者は、一般にプラスチック時代と呼ばれる1950年代以降の時代を、地球の地殻の明確なプラスチック層として特定できるでしょう。
Creator
Article Information
Title:
Journal:
Marine Pollution Bulletin
Author(s):
Ifenna Ilechukwu, Mackenzie Stoeltje, Edith Conn, Guillermo Mironenko Castelló, Jeffrey Jolly, Kazuhiko Fujita, Timothy Ravasi, James Davis Reimer
Date:
04 September 2026
DOI:
Specialties
Research Unit
Submit a press inquiry