セキュリティ

セキュリティと透明性。

Termal OS はサーバーの鍵を預かります。ですから、信頼そのものが製品です。認証情報とデータに対して何をしているのか、そして何をご自身で確かめられるのかを、ここに正確に書きます。

仕組みの骨格を、ひとことで

すべてローカル、そしてエージェント不要。Termal OS はお使いのパソコンで動くデスクトップアプリで、素の SSH でサーバーにつなぎます。あいだにクラウドはありません。サーバーの認証情報はローカルで暗号化され、こちらに送られることはなく、サーバー側には何も入れません。termalos.com のアカウントは、ライセンスの発行と確認にだけ使われます。

ここに書いたことは、宣伝用の言い回しではありません。以下の一つひとつは、アプリの実際の動きと、ご自身で確かめられること(通信を眺める、サーバーを調べる、パケットを読む)に対応しています。

認証情報がパソコンから出ることはありません

SSH のパスワード、秘密鍵とそのパスフレーズ、そして AI 提供元の API キーは、お使いのパソコンにあるローカルの SQLite データベースの中で、保存時に AES-256-GCM で暗号化されます。どれ一つとして、こちらのサーバーに保存されることも、送られることもありません。

暗号化の鍵には、2 つのやり方があります。

  • 既定(デバイスの鍵)。アプリを最初に起動したときに 256 ビットのランダムな鍵が作られ、所有者だけが読める権限でユーザーデータのフォルダーに書き込まれ、送信されることは決してありません。この鍵が、そのパソコンの認証情報を暗号化します。
  • マスターパスワード(任意)。有効にすると、鍵はパスワードから scrypt で導出され、メモリー上にだけ置かれます。ディスクに触れることはありません。アプリはロックされた状態で起動し、解除するまでそのままです。

既定のやり方では、デバイスの鍵はデータベースと同じマシンにあります(ファイルの権限で守られています)。これはデータベースのファイルだけを読み出そうとする相手には有効ですが、すでに OS のセッションを乗っ取っている相手には効きません。マスターパスワードのやり方は、その穴をふさぎます。ディスク上に鍵がない以上、パスワードなしでは中身を読めません。

実際にパソコンから出ていくもの

こちらの設備に向かって、アプリが出すリクエストはちょうど 3 種類です。それ以外はありません。

  • アカウントへのログイン — メールアドレスとパスワードを、ログインのときに一度だけ送ります。
  • ライセンスの更新 — おおよそ 1 日 1 回。セッションのトークン、インストール ID、OS の名前、アプリのバージョン。サーバーは暗号署名されたライセンストークン(RSA-2048 / SHA-256)を返し、アプリはこれを最大 14 日間オフラインで検証できます。
  • バージョンの確認 — こちらの CDN にある小さなバージョン情報を読むだけです。新しいビルドが出たことをお知らせするためで、個人情報は送りません。

インストール ID はローカルに保存されるランダムな識別子で、マシンのハードウェアの指紋ではありません。アプリが話す相手は、あとはすべてご自身のものです。ご自身のサーバー(SSH 経由)と、コパイロットを有効にした場合はご自身が選んだ AI の提供元。

テレメトリーはありません。Termal OS には、アクセス解析もクラッシュレポートも利用状況の追跡も入っていません。サーバーの指標も、ホスト名も、コマンドも、パソコンから出ることはありません。

AI コパイロット:あなたの鍵、あなたの提供元

コパイロットは既定では無効です。有効にすると、質問とサーバーの短いスナップショットが、選ばれた AI の提供元へ直接送られます(Anthropic、または OpenAI 互換のエンドポイント)。認証にはご自身の API キーが使われます。こちらがあいだに入ることはなく、転売するものもありません。

何が共有されるのかを正確にお伝えします。そのスナップショットに入るのは、OS と検出された実行環境、リアルタイムの指標、ホスティング中のサイトの名前、発生中のアラート、そしてその会話での直近のやり取りです。認証情報は含まれません。

そして、勝手に動くものは何もありません。コパイロットはコマンドを提案するだけで、そのそれぞれに 実行 ボタンが付きます。コマンドが SSH 越しに走るのは、クリックしたときだけです。システム側の指示によって、コパイロットは変更を伴わない診断に向かい、破壊的なコマンドについては必ず先に警告します。

設計としてのエージェント不要

Termal OS はサーバーに何も入れません。エージェントも、デーモンも、常駐プロセスも、cron のジョブもです。監視は、SSH 越しに読み取りだけのふつうのシェルコマンドを走らせることで成り立っています(ご自身で打つのと同じもの。psdffree など)。サーバーに何かが書き込まれるのは、ファイルマネージャーでご自身が始めたファイル転送のときだけです。root は要りません。アプリはご自身の SSH ユーザーの権限で動きます。

ローカルのサーバーは、開いた扉ではありません

内部では、アプリはお使いのパソコンの上で小さなサーバーを動かしています。これは起動のたびに作り直される秘密の値で守られており、その値はデスクトップアプリにしか渡されません。値を持たないリクエストは、別のブラウザーからであれ、パソコン上の別のプロセスからであれ、拒否されます。ローカルのサーバーはアプリのためのもので、ネットワークのためのものではありません。

更新とコード署名

新しいバージョンが出ると、アプリがその場でお知らせします。入れるのはご都合のよいときで結構です。黙って更新することはありません。

率直に申し上げます。Windows と macOS のビルドはまだコード署名されていません。そしてそのために、この 2 つのプラットフォームではバイナリーの自動更新を意図的に無効にしています。SSH の認証情報を預かるアプリに、署名のない自動更新を送り込む。そんな危険は冒しません。署名の有無を承知のうえで、このサイトからご自身でダウンロードし、ご自身の操作で更新していただく形です。Linux では、Snap が Snap Store の審査を通り、サンドボックスの中で動きます。

コード署名の証明書にはお金がかかり、このプロジェクトにはまだそれがありません。支援してくださる方が、それを変えます。どんな金額の寄付でも Lifetime Pro ライセンスが手に入ります。そしてそれが、署名とストアでの公開を支える資金です。お願いが存在する、正直な理由です。

ソースは公開していません。そのことについて

Termal OS は有料の商用ソフトウェアなので、アプリ本体のソースは公開していません。そうでないふりはしません。それが何を意味するのか、はっきり書きます。

  • 公開しているもの:Termal Studio の SDK は MIT ライセンスです。termalos-sdk をご覧ください。
  • それでも確かめられること:アプリをプロキシの後ろに置いて通信を眺めてください。上に挙げた呼び出ししか出てきません。サーバーを調べてください。エージェントは見つかりません。素の SSH であり、root も要りません。

ソースが閉じたアプリへの信頼は、約束ではなく、観察できるふるまいによって得られるものです。このページはそのふるまいを並べたもので、あとは確かめられます。

セキュリティの問題を報告する

何か見つかりましたか。公開の issue ではなく、非公開でお知らせください。セキュリティポリシーをご覧いただくか、[email protected] までどうぞ。報告は歓迎しますし、必ず返事をします。

ここに書いたことについて疑問があれば、[email protected] までどうぞ。セキュリティの質問には、はぐらかさずに本当の答えを返します。