PocketRoles · 安全のしくみ

コード署名のポリシー

配るファイルにどんな署名を付けているか、まだ付けていないものは何か、自分で確かめるにはどうするか。いまの本当の状態を、そのまま書いています。

最終更新 2026-09-23 · v0.5.5 の時点 · 変わったら、このページも直します

いまの状態

  • 配るファイルの一覧(SHA256SUMS.txt)に、作者の署名を付けています(v0.5.5 から)。
  • Aegis の定義ファイルに、作者の署名を付けています。署名の合わないファイルは使いません。
  • exe などのプログラムに、Windows のコード署名(発行元の証明書)は、まだ付いていません。はじめて開くときに、Windows の青い警告が出ます。

コード署名ってなに?

ファイルに付ける「しるし」です。「だれが作ったか」と「あとから書き換えられていないか」を確かめられます。

PocketRoles に関係する署名は 2 種類あります。

  • 作者の鍵での署名付いています
    PocketRoles が自分で作った鍵で付けます。配るファイルの一覧と、Aegis の定義ファイルに付けています。
  • Windows のコード署名(Authenticode)まだです
    証明書を出す会社が発行元を確かめたうえで、プログラムに付けるものです。これがあると Windows が「発行元」を表示でき、青い警告が出にくくなります。

いま署名しているもの

配るファイルの一覧(SHA256SUMS.txt)

v0.5.5 から、GitHub Releases の 1 つのリリースに、次の 4 つのファイルを付けます。

ファイル中身
PocketRoles-<版>.zipMOD 本体
PocketRoles-Setup-<版>.zipランチャー
SHA256SUMS.txt上の 2 つの指紋(SHA-256)の一覧
SHA256SUMS.txt.sigその一覧への、作者の署名

「指紋」は SHA-256 というハッシュです。ファイルが 1 バイトでも変わると、指紋も変わります。

一覧には # release=<版> の行があります。だから、古いリリースの一覧を新しいリリースに使い回すことはできません。同じ版を、別の中身で署名し直すこともしません。署名した版と中身の記録を作者の PC に残していて、道具がそれを断ります。

SHA256SUMS.txt はこんな形です。

# format=PocketRoles.Release.Sums.v1
# release=0.5.5
<64 文字の指紋>  PocketRoles-0.5.5.zip
<64 文字の指紋>  PocketRoles-Setup-0.5.5.zip

Aegis の定義ファイル(aegis/definitions.txt)

チートの検知ルール、NG ワード、共有 BAN の一覧などが入ったファイルです。MOD と Aegis のトレイアプリが、GitHub から自動で受け取ります。

このファイルにも、同じ鍵で署名(definitions.txt.sig)を付けています。

MOD とトレイアプリは、署名の合うファイルだけを使います。署名がない・合わない・無効にした鍵で署名されている・いま使っているものより古い、のどれかなら、そのファイルは使いません。そのときは、プログラムに入っている値(と、前に確かめて保存したファイル)を使います。

結果は、トレイアプリのスキャン画面(「署名 OK」)と、MOD の /ac rules で見られます。

署名の鍵

方式
RSA 3072 ビット / SHA-256
keyid
91400fdf0f5af4ca — 公開鍵の指紋(SHA-256)の先頭 16 桁です。.sig ファイルの 2 行目に keyid=91400fdf0f5af4ca と書いてあります。
秘密の鍵
作者の PC にだけあります(パスワード付き)。控えを 1 つ、ネットにつながない場所に置いています。GitHub にも、自動でビルドする仕組みにも置いていません。
公開鍵
MOD とトレイアプリのプログラムの中に入っています(ソースでは src/Net/AegisRules.csaegis/Aegis.ps1)。
鍵が漏れたら
新しい鍵に替えて、古い鍵を「無効にした鍵」の一覧に入れた版を出します。無効にした鍵で署名したファイルは、それ以降使われません。

まだ署名していないもの

いま配っているファイル(ランチャーの .cmd.ps1、MOD の DLL)と、いま作っている exe のランチャーには、Windows のコード署名が付いていません

そのため、はじめて開くときに、青い画面「Windows によって PC が保護されました」(SmartScreen)が出ます。これは「発行元を確かめられない」という意味で、「ウイルスが見つかった」という意味ではありません。開くには「詳細情報」→「実行」を押します。

心配なときは、開く前に、下の「確かめ方」でファイルを確かめてください。

もう 1 つ、正直に書いておきます。いまのランチャーは、ダウンロードのときに SHA256SUMS.txt を自分では確かめません。確かめられるのは、あなたが下の手順を行ったときだけです。

確かめ方

1. 指紋の確認(壊れていない・すり替わっていないか)

  1. GitHub Releases の同じリリースから、zip と SHA256SUMS.txt を同じフォルダーにダウンロードします。
  2. そのフォルダーで PowerShell を開きます。フォルダーの何もないところを、Shift を押しながら右クリック →「PowerShell ウィンドウをここで開く」(Windows 11 では「ターミナルで開く」)。
  3. 次を打って Enter を押します。
    Get-FileHash .\PocketRoles-0.5.5.zip
  4. 出てきた Hash の 64 文字が、SHA256SUMS.txt の同じ名前の行と同じなら OK です。大文字と小文字の違いは気にしなくて大丈夫です。

まとめて確かめたいときは、この 1 行です(ファイルごとに OK か NG が出ます)。

Get-Content .\SHA256SUMS.txt | ForEach-Object { if ($_ -match '^([0-9a-f]{64})  (.+)$') { $ok = (Get-FileHash -LiteralPath ".\$($Matches[2])").Hash -ieq $Matches[1]; ('{0}  {1}' -f $(if ($ok) { 'OK' } else { 'NG' }), $Matches[2]) } }

これで分かること:

  • ダウンロードの途中で壊れていない。
  • 一覧に書いてあるファイルそのものである。
  • 一覧そのものがすり替えられていないかは、これでは分かりません。それは次の「署名の確認」で分かります。

2. 署名の確認(一覧が作者の出したものか)

確かめる道具は、PocketRoles のソースに入っています(tools/sign-definitions.ps1)。秘密の鍵もパスワードも要りません。

  1. GitHub のページで「Code」→「Download ZIP」を押してソースを取り、展開します。
  2. リリースの 4 つのファイル(zip 2 つ・SHA256SUMS.txtSHA256SUMS.txt.sig)を、1 つのフォルダーに置きます。
  3. PowerShell で次を打ちます(2 か所の <…> は、自分のフォルダーに変えます)。
    powershell -NoProfile -ExecutionPolicy Bypass -File "<ソースのフォルダー>\tools\sign-definitions.ps1" -VerifyRelease "<4 つを置いたフォルダー>\SHA256SUMS.txt"
  4. 「署名 OK(鍵 91400fdf0f5af4ca)」と、緑の「検証 OK」が出れば、作者の鍵で署名された一覧です。同時に、zip の指紋も一覧と比べます。
  5. 赤い文が出たら、そのファイルは使わないでください。お問い合わせから知らせてもらえると助かります。

3. Aegis の定義ファイル

自動です。MOD とトレイアプリが、受け取るたびに署名を確かめます。自分で見たいときは、トレイアプリのスキャン画面の「署名 OK」か、MOD の /ac rules を見てください。

だれが署名を決めるか

  • PocketRoles は、作者 1 人で作っています(GitHub: @wakayamachannel)。
  • 署名は毎回、作者が自分の PC でパスワードを入れて行います。自動では署名されません。
  • ほかの人からの変更(Pull Request)は、作者が全部読んで確かめてから取り込みます。
  • 作者の GitHub アカウントは、2 段階認証(2FA)を使っています。

これから

  • exe のランチャーに Windows のコード署名を付ける予定で、その申し込みの準備をしています。まだ承認されていません。承認されたら、このページに書き足します。
  • 署名が付いても、はじめのうちは青い画面が出ることがあります。Windows が新しい発行元を信用するまで、少し時間がかかるためです。
  • MOD 本体(PocketRoles.dll)は、ビルドに Among Us のファイルが要るため、この予定には入っていません。

くわしい説明と連絡先