内部告発を PGP 暗号化+Tor で守る OSS プラットフォーム「Hush Line」— ジャーナリスト・弁護士向け匿名投稿窓口を自前で構築

タグ Hush Line内部告発PGP暗号化Tor匿名投稿エンドツーエンド暗号化OSSジャーナリスト向けcolumnコラムlinuxLinuxdockerGitHubオープンソースscidsghushline
🚀 今すぐ試せます! デモスクリプトをダウンロードして、解凍後にターミナルで bash ファイル名.sh を実行してください(中身を一度確認してから実行すると安心です)。 (macOS / Linux 環境が必要)

内部告発を PGP 暗号化+Tor で守る OSS プラットフォーム「Hush Line」— ジャーナリスト・弁護士向け匿名投稿窓口を自前で構築

ひとことでいうと

Hush Line は、内部告発者や情報提供者が匿名かつ安全にメッセージを届けられる OSS(オープンソースソフトウェア=誰でもソースコードを確認・利用できるソフト)の Web プラットフォームです。送信者はアカウントを作らずに投稿でき、受信者が登録した PGP 公開鍵(暗号化の「鍵」のひとつ)でメッセージがエンドツーエンド暗号化されます。サーバーを管理する人でさえ、中身を読めない仕組みになっています。ジャーナリスト・弁護士・NGO など、機密情報を扱う人が匿名の情報受付窓口を自前で運営できるツールで、Privacy Guides・Newsweek・TIME などのメディアでも取り上げられており、実際の報道現場での採用実績があります。コア機能として、匿名投稿・エンドツーエンド暗号化・Tor 対応・TOTP 2FA(ワンタイムパスワード認証)・メール転送・組織向けカスタマイズが揃っています。万が一 PGP 鍵が未設定の場合に備えたサーバー側フォールバック(代替処理)も用意されています。

こんな人におすすめ

1. 調査報道ジャーナリスト 情報源が安全に連絡できる専用フォームを自社ドメインで運用したい方に向いています。SecureDrop(別の匿名投稿ツール)と比べて軽量なインフラで始められ、Tor オニオンサービス(後述)とも統合できます。

2. 法律専門家(弁護士・法律相談機関) 依頼人や内部告発者が匿名で相談できる窓口を設けたい事務所・団体に最適です。アカウント不要の設計なので、相談者の心理的ハードルを大幅に下げられます。

3. NGO・非営利団体の担当者 組織内の不正を外部に伝えたい職員が安全に使える受け皿を用意したい場合に役立ちます。サーバー管理が不要なホスト版(tips.hushline.app)も提供されているため、即日開設も可能です。

インストール・使い方

Hush Line のローカル環境構築は Docker(コンテナ型の仮想環境を作るソフト)と Make(複数のコマンドをまとめて実行できるツール)があれば完結します。コンテナの内部では Python 3.12 系と Poetry(依存管理ツール=必要なライブラリをまとめて管理するソフト)が動作し、データベースの変更管理には Alembic を使っています。

前提条件

  • Git(ソースコードの変更履歴を管理するツール)
  • Docker(Docker Compose v2 以上)
  • GNU Make

Step 1: リポジトリ(ソースコードの置き場)をコピーする

ターミナル(文字で命令を送る画面)を開き、以下のコマンドをコピー&ペーストして実行します。

git clone https://github.com/scidsg/hushline.git
cd hushline

git clone でプロジェクトのファイル一式をダウンロードし、cd hushline でそのフォルダに移動します。


Step 2: スタック(サービス全体)を起動する

make serve

コンテナをいったん削除してからビルド(組み立て)・起動します。初回はライブラリのダウンロードが走るため、数分かかる場合があります。


Step 3: ブラウザで確認する

起動後、ブラウザで http://localhost:8080 を開きます。管理者アカウントを作成し、PGP 公開鍵を登録すると暗号化された投稿の受信が始まります。


よく使うコマンド一覧

コマンド目的使うタイミング
make serveダウン→リビルド→起動Docker の設定がズレたとき
make run現在のスタックをそのまま起動軽い再起動
make lintフォーマット・型チェックコードを変更したとき
make testテストスイート実行動作確認・変更後
make fix自動フォーマット修正lint で警告が出たとき
make audit-pythonPython 依存パッケージの脆弱性スキャン依存ライブラリ更新後

デモについて

Hush Line は Flask(Python 製の Web フレームワーク)+ PostgreSQL(データベース)+ Redis(高速キャッシュ)を組み合わせたフルスタック Web アプリケーションです。実際の暗号化・匿名投稿フローは Docker Compose でスタック全体を起動しないと再現できない構成になっています。まずブラウザだけで一連の流れを体験したい場合は、ホスト版(https://tips.hushline.app)を使うと手軽に試せます。

動かしてみた

Docker コンテナ内でバージョンとプロジェクト構造を確認しました。

Python 3.12.13

プロジェクトルートには docker-compose.yamlpoetry.lockmigrations/(Alembic によるデータベース変更管理)が揃っており、Flask + SQLAlchemy(Python のデータベース操作ライブラリ)の構成が整っていることを確認しました。package.jsonpackage-lock.json も存在しており、フロントエンド側のビルドチェーン(画面まわりのファイルをまとめる仕組み)も含まれています。docs/ フォルダ以下には、アーキテクチャ説明・脅威モデル・プライバシーポリシー・エージェントコーディングポリシーなど、セキュリティ設計を体系的に文書化したファイル群が揃っています。セキュリティ設計の透明性を重視する姿勢が、ドキュメントの量と質からも伝わってきます。

実践のコツ — はじめの一歩で試せること

ローカル環境での動作確認は、次の流れで進めるとスムーズです。

  1. make serve でスタックを起動する。
  2. ブラウザで http://localhost:8080 を開き、受信者アカウントを登録する。
  3. アカウント設定から PGP 公開鍵をペーストする(keys.openpgp.org などから取得可)。
  4. プロフィールページの URL を情報提供者に伝える(または自分でアクセスして動作確認する)。
  5. 情報提供者がフォームに入力・送信すると、メッセージが PGP 暗号化されてサーバーに保存される。
  6. 受信者はダッシュボードで暗号文を確認し、対応する秘密鍵で復号する。
  • Stripe(決済サービス)連携を含む有料プラン機能をテストしたい場合は make run-full を使います。
  • PGP 鍵の作り方が分からない場合は、keys.openpgp.org の公式ガイドを参照するのが最短ルートです。
  • まずはホスト版(tips.hushline.app)で送受信の流れを体験してから、自前サーバーへの移行を検討するのが現実的な進め方です。
  • 自己ホスト版では、Tor オニオンサービスの設定・TLS 証明書・メール SMTP(送信サーバー)設定が追加で必要になります。

活用アイデア

  • メディア企業の内部告発窓口: 社員が安全に経営陣の不正を報告できる社内チャネルとして設置します。受信者の PGP 鍵運用を徹底すれば、IT 管理者にもメッセージが読めない体制を実現できます。
  • 大学・研究機関のハラスメント相談窓口: 匿名で相談を受け付け、担当者のみが復号できる体制を整えられます。TOTP 2FA により受信者アカウントの乗っ取りリスクも低減できます。
  • 市民ジャーナリスト向けパブリックインボックス: 個人が Tor 経由でも使える匿名投稿ページを自サーバーで公開し、情報源との安全なチャネルを確保します。
  • 弁護士事務所の初期相談受付: アカウント不要なので、相談者が身元を明かすことなく最初の一歩を踏み出せます。相談内容の機密性も E2EE で守られます。
  • 非営利団体・協同組合の内部通報制度: ホスト版を使えばサーバー管理不要で即日開設でき、小規模な団体でも無理なく運用できます。
  • 教育機関のコンプライアンス報告窓口: 学生や教職員が匿名でコンプライアンス違反を報告できる仕組みを、低コストで整備できます。

用語とポイント解説

PGP(Pretty Good Privacy) メッセージの暗号化に広く使われる方式です。かんたんに言うと「公開鍵で鍵をかけ、秘密鍵でしか開けられない錠前」のような仕組みです。受信者の公開鍵でロックしたメッセージは、対応する秘密鍵を持つ人しか読めません。Hush Line では受信者が公開鍵を登録することで、投稿が自動的に暗号化されます。

エンドツーエンド暗号化(E2EE) 送信者から受信者まで、途中のサーバーでも平文(暗号化前の文章)を読めないようにする技術です。かんたんに言うと「封筒に入れて送り、宛先の人だけが開封できる」状態を電子的に実現します。Hush Line はこれをデフォルトの設計に組み込んでいます。

Tor(トール) 複数のサーバーを経由させることで通信経路を隠す匿名ネットワークです。かんたんに言うと「どこから送ったか分からないようにする迷路」です。Hush Line では .onion アドレスを通じたアクセスが可能で、送信者の IP アドレスを秘匿できます。

オニオンアドレス(.onion) Tor ネットワーク内でのみアクセスできる特別なアドレスです。かんたんに言うと「Tor ブラウザを使わないと開けない隠し扉」です。通常のブラウザではアクセスできないため、外部からの追跡がさらに難しくなります。

TOTP 2FA(時間ベースのワンタイムパスワード二要素認証) ログイン時にパスワードに加え、スマートフォンアプリが生成する 6 桁の数字を入力する認証方式です。かんたんに言うと「毎回変わる使い捨てのパスコードを追加する鍵」です。アカウントの乗っ取りを防ぐ効果があります。

OSS(オープンソースソフトウェア) ソースコード(プログラムの設計図)が公開されており、誰でも確認・改変・再配布できるソフトウェアです。かんたんに言うと「中身が見える透明なソフト」です。セキュリティの専門家が独立にコードを検証できるため、信頼性の担保につながります。

Flask Python で Web アプリを作るための軽量なフレームワーク(骨組みライブラリ)です。かんたんに言うと「Web サイトの土台を素早く作るための部品セット」です。Hush Line のサーバーサイドはこの Flask を使って構築されています。

Alembic Python の SQLAlchemy と連携して、データベースの構造変更をバージョン管理するツールです。かんたんに言うと「データベースの変更履歴を記録・適用する台帳」です。migrations/ フォルダにマイグレーションファイルが管理されており、環境間の差異を防ぎます。

脅威モデル システムが想定する攻撃者や危険なシナリオを整理したドキュメントです。かんたんに言うと「どんな相手からどんな攻撃を想定しているかを書いた想定リスト」です。Hush Line は docs/ フォルダに脅威モデルを公開しており、設計の透明性を保っています。

SecureDrop Freedom of the Press Foundation が開発した、もうひとつの有名な匿名投稿プラットフォームです。かんたんに言うと「Hush Line の先輩格にあたる同種のツール」です。より重厚なインフラが必要ですが、Hush Line は軽量な代替として設計されており、小規模組織でも導入しやすい点が異なります。


Hush Line のセキュリティ設計は「送信者の匿名性を最優先」という方針を貫いています。PGP による E2EE・Tor サポート・アカウント不要の投稿フロー、そして GDPR・CCPA コンプライアンスの自動検証やマイグレーション互換性テストなど、厳格な CI チェックがその裏付けです。開発ポリシーも公開されており、docs/AGENTIC-CODE-POLICY.md にはエージェント型 AI によるコード変更のリスク分類と人間レビューの必要条件が明文化されています。DB・認証・決済・CI/CD に影響するコードは必ず人間主導で行う方針が定められており、セキュリティ境界の変更に AI が単独で手を加えることを構造的に防いでいます。ぜひ調査報道の情報受付窓口や組織内の匿名通報チャンネルなどに活用してみてはいかがでしょうか。