PAssist のサーバが「GitHub で公開しているコードと同じもの」を動かしていることを、数学(暗号学)で確かめられます。むずかしい操作は要りません — ブラウザが自動で検証して結果を表示します。
まず結論:3つの「数学」で守られています
以下では、なぜ「数学的に安全」と言い切れるのかを、順を追ってやさしく説明します。
サーバを信用するかどうかの前に、まず「そもそも中身が見えない」ことから整理します。
WebRTC により、あなたの PC と相手のブラウザは 直接つながります。中央サーバは「最初の引き合わせ(シグナリング)」をするだけで、映像の本体はサーバを通りません。
映像・音声は AES-128-GCM、鍵交換は ECDHE (Curve25519)。鍵はあなたと相手の端末でだけ作られ、サーバには一度も渡りません。たとえるなら「二人だけが持つ鍵で施錠した箱」を郵送するイメージで、配達業者(サーバ)は中身を開けられません。
ネットワークの都合で TURN サーバが中継する場合も、流れるのは暗号化された塊(SRTP)だけ。鍵を持たないので中継業者にも解読できません。
| 経路 | 暗号化 | 鍵を知るのは? |
|---|---|---|
| メディア(画面/音声) | DTLS-SRTP / AES-128-GCM | あなたと相手だけ |
| DataChannel(操作入力) | SCTP over DTLS | 同上 |
| TURN 中継時 | 中継するのは暗号化済み SRTP | TURN サーバは鍵を持たない |
使われている暗号は TLS 1.3 / NIST / IETF の標準。現在の数学の常識では、総当たりで破るのに宇宙の年齢を超える計算時間がかかります。実際の暗号方式は、接続中の「PAssist について」画面に表示されます。
つまりサーバが覗ける情報は、接続時刻や IP などのメタデータに限られ、映像の中身は数学的に守られています。
この先の「サーバが公開コードと同じ」を支えるのは、次の3つの数学の道具です。難しい言葉が出てきたら、ここに戻ってください。
データを一方向の計算で短い「指紋」に変えます。中身を1文字でも変えると指紋は全く別物に。同じ指紋なら中身も同じと数学的に言えます(偶然の一致は事実上起こりません)。
「本人にしか作れず、誰でも本物か確認できる」ハンコです。偽造には秘密鍵が必要。PAssist では署名のたびに使い捨ての鍵を使い、すぐ破棄するので「鍵が漏れて偽造」も起きません。
署名を、世界中から見える「追記しかできない公開ノート」に記録します。後からこっそり消す・書き換えると、数学(ハッシュの木)でバレる仕組みです。
WebRTC で守られるのは「中身(映像)」だけ。理屈の上では、サーバ自体がこっそり改造コードを動かしてメタデータを盗む余地が残ります。これを封じるのが Reproducible Build + Cosign 署名です(道具①②③をフル活用)。
同じソースコードから誰がビルドしても、寸分たがわず同じ Docker イメージ(同じ指紋)になる仕組みです。タイムスタンプを git コミット時刻に固定(SOURCE_DATE_EPOCH)し、依存を package-lock.json 通りに厳格再現(npm ci)。道具①により「同じ指紋=同じ中身」と確定できます。
GitHub Actions がイメージをビルドした直後、GitHub の身分証明(OIDC)を使い、秘密鍵を持たずに署名します(道具②)。署名は公開の改ざん不能な台帳 Rekor に記録されます(道具③)。「この署名は github.com/paps-jp/passist の release ワークフローが作った」という事実が、世界中から検証可能な形で残ります。
運営者は秘密鍵を持たないので、鍵漏洩による偽造のリスクがありません。
ここが PAssist の肝です。専門知識も追加インストールも不要。相手の操作画面(ビューア)の右上 「ℹ︎ → PAssist について」を開くと、ブラウザ自身がその場で数学の計算をして、いま接続しているサーバの正体を検証します。
github.com/paps-jp/passist の公開コードから作られたものです(GitHub Actions が署名・Rekor に記録済み)。ブラウザは内部で、サーバから受け取った署名と Sigstore の公開ログを取り寄せ、次を確かめています:
sha256:…)が一致することを確認(道具①)。github.com/paps-jp/passist で、発行者が GitHub の OIDC(token.actions.githubusercontent.com)であることを確認(道具②)。💡 同じ自動検証は、ホストアプリ(PAssist.exe)の「PAssist について」でも実行できます。
ブラウザ内検証は手軽さのため一部を簡略化しています(Rekor 自身の署名や証明書チェーンの完全な検証までは行いません)。日常利用には十分な確認ですが、「絶対の確証」が欲しいときは下記の cosign verify を使ってください。同じ署名を、省略なしでフル検証します。
ソースコードから、あなたの画面の ✓ まで、すべてが数学でつながっています。
sha256:… が確定。paps-jp/passist の release が作った」を Rekor 公開ログに記録。docker pull:指紋が一致しなければ取得時点でエラー。ブラウザの ✓ だけで十分ですが、技術に詳しい方は同じことを手元のコマンドで「省略なし」に確かめられます。
cosign verify ghcr.io/paps-jp/passist-signaling@<digest> \
--certificate-identity-regexp 'https://github.com/paps-jp/passist' \
--certificate-oidc-issuer 'https://token.actions.githubusercontent.com'
→ Sigstore Rekor の公開ログを参照し、「このイメージは確かに paps-jp/passist の release ワークフローから生まれた」を完全に検証します。
git clone https://github.com/paps-jp/passist
cd passist && git checkout v0.2.0
docker buildx build server \
--build-arg SOURCE_DATE_EPOCH=$(git log -1 --format=%ct) \
--provenance=mode=max --sbom=true -t local-rebuild
docker inspect local-rebuild --format='{{.Id}}'
# → 公開 digest と一致するはず
curl https://passist.paps.jp/api/build
サーバが動かしている commit / イメージ digest / build 時刻を返します。これ自体は嘘がつけるので、必ず A の cosign verify と digest を突き合わせて判断します(ブラウザの自動検証も、この digest と署名の一致を確かめています)。
PAssist は MIT License のもとで公開しています。OSI 認定の最もシンプルな許諾型 OSS ライセンスで、商用利用を含むほぼすべての利用が自由です。
これだけです。サービスとして社内・社外で運用する場合、配布行為が発生しないため、特に何もする必要はありません。
詳細は LICENSE ファイル または MIT License 公式ページ (OSI) を参照してください。