@prefix schema: <https://schema.org/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ks: <https://comcomponent.com/vocab/> .

<https://comcomponent.com/blog/2026/04/09/000-comcomponent-autoupdate-security/#article>
    schema:about <https://comcomponent.com/knowledge/auto-updater/>, <https://comcomponent.com/knowledge/signed-metadata/> ;
    schema:mentions <https://comcomponent.com/knowledge/update-trust-anchor/>, <https://comcomponent.com/knowledge/tuf/>, <https://comcomponent.com/knowledge/rollback-attack/>, <https://comcomponent.com/knowledge/freeze-attack/>, <https://comcomponent.com/knowledge/mix-and-match-attack/>, <https://comcomponent.com/knowledge/minimum-allowed-version/>, <https://comcomponent.com/knowledge/verification-failure-response/>, <https://comcomponent.com/knowledge/fail-closed/>, <https://comcomponent.com/knowledge/fail-open/>, <https://comcomponent.com/knowledge/windows-app-update-distribution/>, <https://comcomponent.com/knowledge/msix-app-installer/>, <https://comcomponent.com/knowledge/clickonce/>, <https://comcomponent.com/knowledge/code-signing-cert/>, <https://comcomponent.com/knowledge/get-authenticodesignature/>, <https://comcomponent.com/knowledge/winverifytrust/>, <https://comcomponent.com/knowledge/issuer-chain-pinning/>, <https://comcomponent.com/knowledge/certificate-chain/>, <https://comcomponent.com/knowledge/thumbprint/>, <https://comcomponent.com/knowledge/code-signing-timestamp/>, <https://comcomponent.com/knowledge/certificate-expiry/>, <https://comcomponent.com/knowledge/signing-key-separation/>, <https://comcomponent.com/knowledge/hsm-key-storage/>, <https://comcomponent.com/knowledge/helper-privilege-separation/>, <https://comcomponent.com/knowledge/kill-switch/>, <https://comcomponent.com/knowledge/update-blocklist/>, <https://comcomponent.com/knowledge/public-key-cryptography/> .

<https://comcomponent.com/knowledge/auto-updater/> a skos:Concept ;
    skos:prefLabel "自動アップデート機能(updater)"@ja ;
    skos:definition "アプリが新しいバージョンを取得し、既存の実行物を置き換える機能。外部からファイルを取得する、それを信頼する、既存の実行物を置き換えるという3つの性質を併せ持つ。"@ja ;
    skos:altLabel "updater" ;
    skos:altLabel "自動更新機能"@ja ;
    ks:requires <https://comcomponent.com/knowledge/signed-metadata/> ;
    ks:requires <https://comcomponent.com/knowledge/minimum-allowed-version/> ;
    ks:requires <https://comcomponent.com/knowledge/kill-switch/> ;
    ks:requires <https://comcomponent.com/knowledge/update-blocklist/> .

<https://comcomponent.com/knowledge/signed-metadata/> a skos:Concept ;
    skos:prefLabel "署名付き更新metadata"@ja ;
    skos:definition "release version・成果物のURL・hash・size・channel・有効期限などの更新判断材料をまとめて署名し、クライアント側で検証できるようにしたデータ。"@ja ;
    skos:altLabel "signed metadata" ;
    skos:altLabel "署名付きmanifest"@ja ;
    ks:uses <https://comcomponent.com/knowledge/public-key-cryptography/> ;
    ks:prevents <https://comcomponent.com/knowledge/mix-and-match-attack/> ;
    ks:prevents <https://comcomponent.com/knowledge/freeze-attack/> .

<https://comcomponent.com/knowledge/update-trust-anchor/> a skos:Concept ;
    skos:prefLabel "updateのtrust anchor(信頼の起点)"@ja ;
    skos:definition "クライアントが最初から信頼している起点。root公開鍵や固定した証明書チェーンなど、更新metadataの検証の出発点になるもの。"@ja ;
    skos:altLabel "trust anchor" ;
    skos:altLabel "信頼の起点"@ja .

<https://comcomponent.com/knowledge/public-key-cryptography/> a skos:Concept ;
    skos:prefLabel "公開鍵暗号"@ja ;
    skos:definition "対になる秘密鍵と公開鍵を使い、公開鍵から秘密鍵を計算量的に導出できない暗号方式。パスキーの安全性の土台。"@ja ;
    skos:altLabel "非対称暗号"@ja .

<https://comcomponent.com/knowledge/mix-and-match-attack/> a skos:Concept ;
    skos:prefLabel "mix-and-match攻撃(更新)"@ja ;
    skos:definition "互いに整合しないmetadataと成果物を組み合わせて渡す攻撃。"@ja ;
    skos:altLabel "mix-and-match" ;
    skos:broader <https://comcomponent.com/knowledge/tuf/> .

<https://comcomponent.com/knowledge/freeze-attack/> a skos:Concept ;
    skos:prefLabel "freeze攻撃(更新)"@ja ;
    skos:definition "新しいバージョンが出ているのに、古いmetadataを返し続けて更新させない攻撃。"@ja ;
    skos:altLabel "freeze" ;
    skos:broader <https://comcomponent.com/knowledge/tuf/> .

<https://comcomponent.com/knowledge/minimum-allowed-version/> a skos:Concept ;
    skos:prefLabel "minimum allowed version"@ja ;
    skos:definition "クライアントが今まで見た最高のrelease versionを保持し、それより古いバージョンの適用を拒否する仕組み。rollback攻撃への対策になる。"@ja ;
    skos:altLabel "許可する最低バージョン"@ja ;
    ks:prevents <https://comcomponent.com/knowledge/rollback-attack/> .

<https://comcomponent.com/knowledge/rollback-attack/> a skos:Concept ;
    skos:prefLabel "rollback攻撃(更新)"@ja ;
    skos:definition "署名された正規版であっても、既知の脆弱性がある古いバージョンを攻撃者が再配信し、脆弱版へ戻させる攻撃。"@ja ;
    skos:altLabel "ロールバック攻撃"@ja ;
    skos:altLabel "rollback" ;
    skos:broader <https://comcomponent.com/knowledge/tuf/> .

<https://comcomponent.com/knowledge/tuf/> a skos:Concept ;
    skos:prefLabel "TUF(The Update Framework)"@ja ;
    skos:definition "ソフトウェア更新の信頼モデルを定義した仕様。任意の不正ソフトの配布、rollback、freeze、mix-and-matchといった更新系の脅威を整理する。"@ja ;
    skos:altLabel "The Update Framework" .

<https://comcomponent.com/knowledge/fail-closed/> a skos:Concept ;
    skos:prefLabel "fail-closed設計"@ja ;
    skos:definition "異常時は止まる側へ倒す設計。署名検証に失敗したら更新を進めない。"@ja ;
    skos:altLabel "fail-closed" ;
    ks:recommendedFor <https://comcomponent.com/knowledge/verification-failure-response/> .

<https://comcomponent.com/knowledge/verification-failure-response/> a skos:Concept ;
    skos:prefLabel "検証失敗時の挙動"@ja ;
    skos:definition "署名・有効期限・versionなどの検証に失敗したときに、更新処理を止めるか進めるかという設計判断。"@ja ;
    skos:altLabel "検証エラー時の対応"@ja .

<https://comcomponent.com/knowledge/fail-open/> a skos:Concept ;
    skos:prefLabel "fail-open設計"@ja ;
    skos:definition "異常時でも進む側へ倒す設計。警告だけ出して更新を続けてしまう形。"@ja ;
    skos:altLabel "fail-open" ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/verification-failure-response/> .

<https://comcomponent.com/knowledge/msix-app-installer/> a skos:Concept ;
    skos:prefLabel "MSIX + App Installer"@ja ;
    skos:definition "MSIXパッケージの自動更新・修復を担うWindowsの配布基盤。"@ja ;
    skos:altLabel "MSIX App Installer" ;
    skos:broader <https://comcomponent.com/knowledge/windows-app-update-distribution/> ;
    ks:recommendedFor <https://comcomponent.com/knowledge/windows-app-update-distribution/> .

<https://comcomponent.com/knowledge/windows-app-update-distribution/> a skos:Concept ;
    skos:prefLabel "Windowsアプリの更新配布"@ja ;
    skos:definition "Windowsアプリの新しいバージョンを利用者の端末へ届ける仕組み全般。MSIX App InstallerやClickOnceなど既存基盤と、自前updaterが選択肢になる。"@ja ;
    skos:altLabel "Windowsアプリの配布方式"@ja .

<https://comcomponent.com/knowledge/clickonce/> a skos:Concept ;
    skos:prefLabel "ClickOnce"@ja ;
    skos:definition ".NETのWindowsデスクトップアプリを、利用者単位で簡単に配り、自動更新まで含めて回すための配布技術。マニフェストを中心に配布・更新・キャッシュ管理をまとめて扱う配布モデル。"@ja ;
    skos:altLabel "ClickOnce配布"@ja ;
    ks:recommendedFor <https://comcomponent.com/knowledge/windows-app-update-distribution/> .

<https://comcomponent.com/knowledge/code-signing-cert/> a skos:Concept ;
    skos:prefLabel "コード署名証明書"@ja ;
    skos:definition "ソフトウェアの発行元を証明し、改ざんを検出するための証明書。"@ja ;
    skos:altLabel "Authenticode証明書"@ja ;
    ks:verifiedBy <https://comcomponent.com/knowledge/get-authenticodesignature/> .

<https://comcomponent.com/knowledge/get-authenticodesignature/> a skos:Concept ;
    skos:prefLabel "Get-AuthenticodeSignature"@ja ;
    skos:definition "ファイルのAuthenticode署名の状態(Status)や署名者証明書を取得するPowerShellコマンドレット。"@ja .

<https://comcomponent.com/knowledge/winverifytrust/> a skos:Concept ;
    skos:prefLabel "WinVerifyTrust"@ja ;
    skos:definition "WINTRUST_ACTION_GENERIC_VERIFY_V2を指定するとAuthenticodeの検証ポリシーを適用できる、コードからAuthenticode署名を検証するためのWin32 API。"@ja ;
    skos:altLabel "WinVerifyTrust API" ;
    skos:altLabel "wintrust.dll" .

<https://comcomponent.com/knowledge/issuer-chain-pinning/> a skos:Concept ;
    skos:prefLabel "発行元チェーンの固定"@ja ;
    skos:definition "コード署名の検証で、Subject(識別名)ではなく、期待する中間CA/ルートの拇印が署名者からルートまでの経路に含まれることを確認して発行元を固定する方式。"@ja ;
    skos:altLabel "発行元の固定"@ja ;
    skos:altLabel "issuer pinning" ;
    ks:requires <https://comcomponent.com/knowledge/certificate-chain/> ;
    ks:uses <https://comcomponent.com/knowledge/thumbprint/> .

<https://comcomponent.com/knowledge/certificate-chain/> a skos:Concept ;
    skos:prefLabel "証明書チェーン"@ja ;
    skos:definition "末端の証明書からルートCAまで連なる信頼の連鎖。"@ja ;
    skos:altLabel "証明のパス"@ja ;
    skos:altLabel "信頼チェーン"@ja .

<https://comcomponent.com/knowledge/thumbprint/> a skos:Concept ;
    skos:prefLabel "拇印(サムプリント)"@ja ;
    skos:definition "証明書ごとに一意なハッシュ値。証明書を更新すると必ず変わる。"@ja ;
    skos:altLabel "Thumbprint" .

<https://comcomponent.com/knowledge/code-signing-timestamp/> a skos:Concept ;
    skos:prefLabel "コード署名のタイムスタンプ"@ja ;
    skos:definition "署名時刻をRFC 3161タイムスタンプサーバーで証明する付与情報。証明書の期限が切れても署名の有効性を保つ。"@ja ;
    skos:altLabel "RFC 3161タイムスタンプ"@ja ;
    ks:mitigates <https://comcomponent.com/knowledge/certificate-expiry/> ;
    ks:recommendedFor <https://comcomponent.com/knowledge/code-signing-cert/> .

<https://comcomponent.com/knowledge/certificate-expiry/> a skos:Concept ;
    skos:prefLabel "証明書の期限切れ"@ja ;
    skos:definition "証明書の有効期間(NotAfter)を過ぎて検証に失敗する状態。"@ja ;
    skos:altLabel "有効期限切れ"@ja .

<https://comcomponent.com/knowledge/signing-key-separation/> a skos:Concept ;
    skos:prefLabel "署名鍵の分離運用"@ja ;
    skos:definition "開発用・ステージング用・本番用の署名鍵を分け、本番用はHSMや署名サービス、承認フロー、監査ログを伴って運用すること。"@ja ;
    skos:altLabel "鍵分離"@ja ;
    skos:altLabel "開発/本番鍵の分離"@ja ;
    ks:uses <https://comcomponent.com/knowledge/hsm-key-storage/> .

<https://comcomponent.com/knowledge/hsm-key-storage/> a skos:Concept ;
    skos:prefLabel "HSM/トークンでの秘密鍵保管"@ja ;
    skos:definition "2023年6月1日以降のCA/Browser Forum基準により、コード署名証明書の秘密鍵をFIPS 140-2レベル2相当以上のハードウェア(HSMやUSBトークン)で生成・保管することを義務付けたもの。"@ja ;
    skos:altLabel "FIPS 140-2レベル2"@ja .

<https://comcomponent.com/knowledge/helper-privilege-separation/> a skos:Concept ;
    skos:prefLabel "updater権限分離(helperへの分離)"@ja ;
    skos:definition "updater全体を管理者権限で動かさず、ダウンロードと検証は低権限で行い、実ファイルの置換だけを検証済みpackageを所定場所へ置く最小権限のhelperへ分離する設計。"@ja ;
    skos:altLabel "権限分離"@ja ;
    skos:altLabel "least privilege updater" ;
    ks:recommendedFor <https://comcomponent.com/knowledge/auto-updater/> .

<https://comcomponent.com/knowledge/kill-switch/> a skos:Concept ;
    skos:prefLabel "kill switch(更新の緊急停止)"@ja ;
    skos:definition "配信中の更新を、サーバー側の操作で即座に止める仕組み。"@ja ;
    skos:altLabel "kill switch" .

<https://comcomponent.com/knowledge/update-blocklist/> a skos:Concept ;
    skos:prefLabel "更新のblocklist"@ja ;
    skos:definition "特定のbuildを拒否する、signed metadataで配布できるブロックリスト。事故時に問題のあるバージョンの適用を封じ込める。"@ja ;
    skos:altLabel "blocklist" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/auto-updater/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/update-trust-anchor/> ;
    schema:description "安全なupdaterは、クライアント側に信頼する公開鍵や証明書チェーンなど、あらかじめ持つ信頼の起点(trust anchor)があることを前提とする"@ja ;
    ks:evidence <https://theupdateframework.io/docs/security/> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/auto-updater/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/signed-metadata/> ;
    schema:description "更新判断に使う情報(version・hash・size・channel・有効期限など)を全て署名付きmetadataに集約し、クライアントが検証してから使う設計を前提とする"@ja ;
    ks:evidence <https://theupdateframework.io/docs/metadata/> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/signed-metadata/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/public-key-cryptography/> ;
    schema:description "signed metadataはroot鍵から委譲されたmetadata署名鍵による公開鍵署名でmetadataの真正性を保護する"@ja ;
    ks:evidence <https://theupdateframework.io/docs/security/> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/signed-metadata/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/mix-and-match-attack/> ;
    schema:description "manifestに対象artifactのhash・size・versionを固定することで、整合しないmetadataと成果物を組み合わせるmix-and-match攻撃を防ぐ"@ja ;
    ks:evidence <https://theupdateframework.io/docs/security/> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/signed-metadata/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/freeze-attack/> ;
    schema:description "metadataにexpires_atを持たせ、古すぎるmetadataを拒否することで、新版を見せないfreeze攻撃を防ぐ"@ja ;
    ks:evidence <https://theupdateframework.io/docs/security/> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/minimum-allowed-version/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/rollback-attack/> ;
    schema:description "クライアントが今まで見た最高のrelease versionを保持し、それより古いものを拒否することでrollback攻撃を防ぐ"@ja ;
    ks:evidence <https://theupdateframework.io/docs/security/> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/auto-updater/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/tuf/> ;
    schema:description "TUFの脅威モデルを参照する場合、自動アップデートの脅威モデルは、TUF(The Update Framework)が整理するrollback・freeze・mix-and-matchなどの分類を土台にできる。TUFをフルに採用しないupdaterも多い"@ja ;
    ks:evidence <https://theupdateframework.github.io/specification/latest/> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/fail-closed/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/verification-failure-response/> ;
    schema:description "署名・有効期限・versionの検証に失敗した場合は、更新処理を進めずに中止するfail-closedが本記事の推奨である"@ja ;
    ks:evidence <https://www.cisa.gov/securebydesign/pledge> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/fail-open/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/verification-failure-response/> ;
    schema:description "検証エラーを無視して更新を続けるfail-openは、検証失敗時の挙動として推奨されない"@ja ;
    ks:evidence <https://www.cisa.gov/securebydesign/pledge> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/msix-app-installer/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/windows-app-update-distribution/> ;
    schema:description "要件が合うなら、Windowsアプリの更新配布はまずMSIX App Installerに乗るのが本記事の推奨である"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/msix/app-installer/auto-update-and-repair--overview> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/clickonce/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/windows-app-update-distribution/> ;
    schema:description ".NETの社内アプリでper-userが合うなら、ClickOnceがWindowsアプリの更新配布の推奨である"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/visualstudio/deployment/clickonce-security-and-deployment?view=visualstudio> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/auto-updater/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/code-signing-cert/> ;
    schema:description "自前updaterで成果物を検証する場合、成果物にはコード署名証明書(Authenticode)による署名検証が必要になる"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows-hardware/drivers/install/authenticode> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/code-signing-cert/> ;
    rdf:predicate ks:verifiedBy ;
    rdf:object <https://comcomponent.com/knowledge/get-authenticodesignature/> ;
    schema:description "コード署名の有効性は、運用手順やCIからPowerShellのGet-AuthenticodeSignatureで確認できる"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.security/get-authenticodesignature> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/auto-updater/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/winverifytrust/> ;
    schema:description "updaterのコードの中でAuthenticode署名を検証する場合、WinVerifyTrust APIをWINTRUST_ACTION_GENERIC_VERIFY_V2で呼び出す"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/api/wintrust/nf-wintrust-winverifytrust> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/issuer-chain-pinning/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/certificate-chain/> ;
    schema:description "発行元の固定は、署名者証明書からルートまでのX509Chainを組み、期待する発行元が経路に含まれることを確認して行う"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/dotnet/api/system.security.cryptography.x509certificates.x509chain> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/issuer-chain-pinning/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/thumbprint/> ;
    schema:description "固定する発行元は拇印(サムプリント)の一致で判定する。Subject(識別名)だけでは、同じCN/O/Cを持つ別の証明書を区別できない"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows-hardware/drivers/install/authenticode> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/code-signing-timestamp/> ;
    rdf:predicate ks:mitigates ;
    rdf:object <https://comcomponent.com/knowledge/certificate-expiry/> ;
    schema:description "タイムスタンプ付きの署名は、署名証明書の有効期限が切れた後もStatus=Validを維持でき、期限切れによる検証失敗の影響を軽減する"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows-hardware/drivers/install/authenticode> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/code-signing-timestamp/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/code-signing-cert/> ;
    schema:description "タイムスタンプが無くても署名も検証もできるが、証明書の有効期限が切れると署名が検証されなくなる。リリース時には必ずタイムスタンプ付き署名を使うことが推奨される"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows-hardware/drivers/install/authenticode> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/auto-updater/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/signing-key-separation/> ;
    schema:description "本番署名鍵は開発用と分離し、承認フローや監査ログを伴って運用することが安全な自動更新の前提になる"@ja ;
    ks:evidence <https://nvlpubs.nist.gov/nistpubs/CSWP/NIST.CSWP.01262018.pdf> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/signing-key-separation/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/hsm-key-storage/> ;
    schema:description "本番署名鍵はHSMやクラウド署名サービスなど、秘密鍵を安全に生成・保管する仕組みで保護する"@ja ;
    ks:evidence <https://cabforum.org/uploads/Baseline-Requirements-for-the-Issuance-and-Management-of-Code-Signing.v3.9.pdf> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/helper-privilege-separation/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/auto-updater/> ;
    schema:description "updater全体を管理者権限で動かさず、ダウンロードと検証は低権限で行い、実ファイル置換だけを最小権限のhelperへ分離することが推奨される"@ja ;
    ks:evidence <https://csrc.nist.gov/projects/ssdf> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/auto-updater/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/minimum-allowed-version/> ;
    schema:description "事故時の封じ込めのため、signed metadataでminimum allowed versionを配れる仕組みを持つ"@ja ;
    ks:evidence <https://theupdateframework.io/docs/security/> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/auto-updater/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/kill-switch/> ;
    schema:description "問題のある版が配られ続ける事故に備え、段階配信を止めるkill switchを持つ"@ja ;
    ks:evidence <https://theupdateframework.io/docs/security/> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/auto-updater/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/update-blocklist/> ;
    schema:description "事故時の封じ込めを速くするため、特定buildを拒否できるblocklistをsigned metadataで配れるようにする"@ja ;
    ks:evidence <https://theupdateframework.io/docs/security/> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/auto-updater/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/issuer-chain-pinning/> ;
    schema:description "署名者の固定は、識別名(Subject)ではなく発行元チェーンか公開鍵で行うことが安全な検証の前提になる"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/dotnet/api/system.security.cryptography.x509certificates.x509chain> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/windows-app-update-distribution/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/auto-updater/> ;
    schema:description "要件が合うなら、自前updaterを作るより先にMSIX App InstallerやClickOnceなど既存のWindowsアプリ更新配布基盤に乗ることが推奨される"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/msix/app-installer/auto-update-and-repair--overview> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/auto-updater/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/fail-closed/> ;
    schema:description "更新フローは検証が終わる前に置き換えない・失敗したら進めないの2点が基本で、自前updaterは検証失敗時にfail-closedで止まることを前提とする"@ja ;
    ks:evidence <https://csrc.nist.gov/projects/ssdf> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .
