配布と更新の方針

TTP はコード署名をしていません。個人開発で証明書の費用と更新の手間が見合わないため、現時点では見送っています。 その代わり、依存の更新と脆弱性チェックを毎月自動で回し、検査を通ったものだけをリリースする仕組みを GitHub Actions で運用しています。 このページは、その中身を隠さずに書いたものです。

初回起動時に警告が出ます

コード署名がないため、初回起動時に Microsoft Defender SmartScreen が「Windows によって PC が保護されました」と表示することがあります。

「Windows によって PC が保護されました」という SmartScreen の警告画面。「詳細情報」の位置が赤枠で示されている。
赤枠の「詳細情報」をクリックすると、左下に「実行」が表示されます。
  1. 「詳細情報」をクリック

    警告画面の中に、小さく「詳細情報」というリンクがあります。ここを押すと、実行ボタンが現れます。

  2. 「実行」をクリック

    これで起動します。2回目以降は表示されません。

なぜ出るのか。 SmartScreen は「配布元が既知か」「署名があるか」で判断します。TTP はどちらの条件も満たさないため、初回は必ず止められます。動作に問題があるという意味ではありませんが、「警告が出る=安全」でもありません。判断材料はこのページの残りと、公開しているソースです。

なぜコード署名をしていないのか

  • コード署名証明書は継続的な費用がかかり、個人が趣味で配布するツールの規模に対して見合わない
  • 証明書を失効・更新できなくなると、それ以降の更新がすべて警告付きになる
  • 「署名がないこと」を隠すのではなく、別の方法で検証できる状態にするほうが誠実だと考えている

将来的に配布規模が変わった場合は、コード署名の導入を検討します。

代わりに、毎月自動で更新しています

毎月1日 03:00(日本時間)に GitHub Actions のワークフロー Monthly dependency update が自動実行されます。内容は次のとおりです。

毎月の自動更新で行われる処理(順番どおり)
手順内容
1. 依存の最新化uv lock --upgrade で依存パッケージを最新版に更新
2. 変更の判定パッケージの名前・バージョンが変わったときだけ先へ進む。変更が無ければ何もせず終了
3. 動作確認スモークチェック(起動と主要モジュールの読み込み)
4. 脆弱性検査pip-audit で依存の既知脆弱性を検査。1件でも見つかればそこで失敗し、リリースしない
5. バージョン更新パッチ番号を上げる(例: 1.2.3 → 1.2.4)
6. タグとコミット変更内容とバージョンをコミットし、タグを push
7. ビルドWindows 上で exe と zip を生成
8. リリースGitHub Releases に zip を添付して公開。リリースノートは自動生成

ポイントは、手順4で落ちたら手順5以降が実行されないことです。脆弱性が検出された状態のビルドが、そのまま配布されることはありません。また、この一連のログは GitHub Actions 上にすべて残るため、第三者が確認できます。

緊急で更新したい場合は、手動でワークフローを実行できます(Run workflow)。

毎回の push でも同じ検査をしています

月次の自動更新とは別に、main への push と Pull Request のたびに、スモークチェックと pip-audit を実行しています。手元で書いた変更が、そのまま検査を通らずにリリースされることはありません。

同梱しているランタイム

  • Python 3.14 系を同梱しています(バグ修正は 2027年10月まで、セキュリティサポートは 2030年10月まで)
  • 同梱するランタイムは、ビルド時点の最新パッチです。古いパッチ版に固定されません
  • TLS の CA は certifi ではなく、botocore 同梱の CA バンドルで検証しています
  • 同梱する CA バンドルに問題のある認証局が含まれていないことを、リリース時に確認しています(例: 2026年10月に報告された eMudhra / emSign の中間 CA 問題 CVE-2026-115557 について、該当エントリが無いことを確認済み)

自分で確かめる方法

署名の代わりに、次の3つで確認できます。

  1. リリースの履歴を見る

    毎月の更新が、そのままリリースとして残っています。いつ何が変わったかは GitHub Releases で追えます。

  2. ソースから自分でビルドする

    配布している exe は、公開しているソースからビルドしたものです。手元で同じものを作れます。

    git clone https://github.com/okamoto53515606/ttp.git
    cd ttp
    uv sync
    uv run python build.py

    dist/ttp/ に ttp.exe が生成されます。

  3. ソースを読む

    Python で書かれています。暗号化の実装は src/ttp/crypto.py、保存処理は src/ttp/storage.py、マクロの起動は src/ttp/teraterm.py にあります。外部への送信処理は、AWS 接続機能で boto3 を使う箇所だけです。

この仕組みで守れないこと

できることだけを書くと不誠実なので、限界も書きます。

  • ビルド環境そのものの侵害 — GitHub Actions 上でビルドしているため、そこが侵害されれば配布物も影響を受けます
  • 配布後の改ざんの検知 — 署名がないため、入手したファイルが正規のものかを機械的に検証できません
  • 端末側の侵害 — マルウェアやキーロガーに対する防御は、TTP の範囲外です

そのため、配布物は GitHub Releases からのみ提供しています。まとめサイトや転載先から入手したファイルについては、こちらで関与できません。

脆弱性が見つかったときの流れ

  1. 依存に既知の脆弱性があれば、毎月の pip-audit で検出され、その月のリリースは作られません
  2. 修正版が公開されれば、翌月の自動更新で取り込まれます
  3. 急ぎの場合は、ワークフローを手動実行して即時に反映できます

TTP 本体に問題を見つけた場合は、GitHub の Issue で知らせてください。

最終更新: 2026年11月14日