ペイロード署名
FortressFlag があなたのアプリに送るすべてのペイロードには署名が付いていて、すべての SDK は flag の値が 1 つでも変わる前にそれを検証します。これを得るためにあなたがすることは何もありません。SDK は本番の公開鍵を組み込んだ状態で出荷され、デフォルトで検証します。このページでは、それが何をもたらすのか、2 つのポリシー設定が何を意味するのか、そしてあなたのアプリが今日どの鍵を信頼しているのかを説明します。
何が署名され、なぜか
Section titled “何が署名され、なぜか”アプリがポーリングすると、FortressFlag は 2 つのものを返します。ペイロード(クライアントプレーンではあなたのデバイスの flag の値、サーバープレーンでは完全な ruleset)と、そのペイロードの正確なバイト列に対する署名です。署名は FortressFlag だけが持つ秘密鍵で作られ、SDK は一緒に出荷された対応する公開鍵でそれを検証します。
私たちのサーバーとあなたのアプリの間のどこか(プロキシ、CDN、デバイス上で誰かが編集したキャッシュファイル)でバイト列が変えられていれば、検証は失敗し、SDK はそのレスポンスを無視します。保証できないバイト列を信頼するのではなく、最後に検証した値を配信し続けます(フォールバックの約束を参照)。
誰も署名に頼りすぎないように、署名がしないことを 2 つ。
- 何も隠しません。ペイロードは暗号化されていません。クライアントキーは設計上公開であり、それに対して配信されるものもすべて同様です。ルールに秘密やユーザーの個人データを入れないでください。
- TLS の代わりにはなりません。SDK は FortressFlag と HTTPS でも通信します。署名は 2 つ目の錠で、TLS がカバーしない経路の部分(キャッシュ、デバイス上のストレージ)のためのものです。
2 つのポリシー
Section titled “2 つのポリシー”すべての SDK には、2 つの設定を持つ署名ポリシーがあります。
required:デフォルトです。SDK はすべてのペイロードを信頼する鍵に対して検証し、署名されていないもの、知らない鍵で署名されたもの、異なるバイト列に対して署名されたものをすべて拒否します。FortressFlag と通信するすべてのビルドで、あなたが望むのはこれです。disabled:署名されていないペイロードを受け入れます。これが存在する状況は 1 つだけです。署名鍵が設定されていないローカルの FortressFlag バックエンドに対して実行するときです。暗黙のフォールバックではなく、名前の付いた grep できる設定なので、「なぜ検証されないのか」には常にあなた自身のソースの中に答えがあります。本番ビルドをこの設定で出荷することは決してしないでください。
その間に「警告」モードはありません。ペイロードは検証されるか、無視されるかのどちらかです。
アプリが信頼する鍵
Section titled “アプリが信頼する鍵”FortressFlag は環境ごとに 1 つの鍵で署名し、SDK は本番の鍵だけを信頼して出荷されます。ステージング(fortressflag.net)に対してテストする場合は、ステージングの鍵を SDK の信頼する鍵に明示的に追加してください。
| 環境 | 鍵 ID | 公開鍵(base64url) |
|---|---|---|
本番(fortressflag.com) |
prod-2026-09-k1 |
EaEF8MHNu3onHxemTg3-OcrKrq7ODsZIVEp-IVV2ojg |
ステージング(fortressflag.net) |
staging-2026-09-k1 |
RHFhzt8i3hQ4NKv_IrB92YuXmyNfDXx8eWN8cOrEBc8 |
あなたの設定が受け取るのがそちらの形式なら、同じ鍵を生のバイト列の 16 進数表記で。
prod-2026-09-k1 11a105f0c1cdbb7a271f17a64e0dfe39cacaaeaece0ec648544a7e215576a238staging-2026-09-k1 447161cedf22de143834abff22b07dd98b979b235f0d7c7c79637c70eac405cf各鍵は 32 バイトの Ed25519 公開鍵です。鍵 ID はすべての署名の真ん中の部分(ed25519:prod-2026-09-k1:…)で、SDK はこれでどの鍵で検証するかを知ります。これらの値は公開です。設定ファイルやリポジトリに、ためらいなく貼り付けて構いません。
ローテーション
Section titled “ローテーション”FortressFlag が鍵をローテーションするときは、まず新しい公開鍵が SDK のリリースで出荷され、私たちは世に出ている SDK がそれを信頼するようになってから初めて、その鍵で署名を始めます。ローテーションが、期限付きでアプリをリリースすることをあなたに要求することは決してありません。古い鍵と新しい鍵の両方を信頼する SDK は、その間ずっと検証し続けます。
Web の場合
Section titled “Web の場合”Web SDK はブラウザ組み込みの Web Crypto で検証します。これには Ed25519 のサポート(Safari 17+、Chrome 137+、Firefox 130+)と、セキュアコンテキスト(https:// のページと http://localhost)が必要です。たとえば LAN のアドレスから配信される素の http:// ページでは、ブラウザは Web Crypto をまったく公開しません。
ブラウザが検証できない場合、SDK は検証したふりをせず、良好なキャッシュを捨てることもしません。ペイロードを検証不能として報告し、最後に検証した値かコードのデフォルトを配信し続け、理由を 1 度だけログに記録します。アプリを HTTPS で配信すれば、この問題は一切起こりません。
- flag がアプリに届くまで:2 つのプレーンと、その両方の下にあるフォールバックの約束
- キー:なぜ
ffc_は公開でffs_は秘密なのか