セキュリティモデルと制約

Cognoxiumは、明示されたパッキング境界で決定論的なデータフロー規則を適用します。モデル入力を構築する前に、出所、機密区分、保持要件、有効期限、ポリシー判断をアプリケーションが構造化して表現できる場所を提供します。

コアが強制すること

  • 有効期限切れまたは隔離済みの項目は、パックへ入りません。

  • 外部向けパックには出所情報が必要です。

  • restricted(制限付き)および秘密情報らしいコンテンツは、外部向けパックへ入りません。

  • 必須項目でポリシー違反が発生した場合は、呼び出し側の契約を黙って弱めず例外を送出します。

  • 予算へ収めるために、必須コンテンツを自動で除外または降格することはありません。

  • 未対応のBinaryコンテンツを、黙ってテキストへ変換することはありません。

  • 選択と除外に成功したすべての判断は、マニフェストへ記録されます。

  • コアライブラリには、ネットワーククライアント、モデル呼び出し、APIキー処理、アカウント要件、テレメトリがありません。

任意項目と必須項目の正確な動作の違いは、信頼境界とポリシーを参照してください。

Cognoxiumが保証しないこと

Cognoxiumは、次のことを行いません。

  • コンテンツが真実であることを証明する。

  • sources URIがあるという理由だけで、その出所を認証する。

  • untrusted(未信頼)を自動的に拒否する。

  • ユーザー、ツール呼び出し、購入、ファイル変更、その他の副作用を伴う操作を認可する。

  • ホストアプリケーションに代わって、テナントや認証情報を分離する。

  • 秘密情報を確実に検出する。

  • プロファイルが概算の場合に、コンテキストパックがプロバイダーの上限内へ確実に収まることを保証する。

  • v0.1系列でプロンプトインジェクションを検出または防止する。

ホストアプリケーションは、ユーザーと出所を認証し、モデル外で結果を伴うすべての操作を認可し、ツール引数を検証し、認証情報を分離し、最小権限を適用したうえで、各境界に適したポリシーを選択する必要があります。

秘密情報パターンの対象範囲

v0.1系列の外部境界チェックは、少数のパターンだけを認識します。長いsk-形式のトークン、AWSアクセスキーID、秘密鍵ヘッダー、api_key=...client_secret=...password=...などの一般的な代入形式です。

これは多層防御のための補助情報であり、DLPシステムではありません。エンコードされた秘密、分割された秘密、新しい形式、短い値、文脈に依存する秘密を見逃す場合があります。通常の文章が誤って一致することもあります。機密データを扱うアプリケーションでは、Cognoxiumでパッキングする前に、専用の秘密情報スキャナーまたはカスタムPolicyを使用してください。

信頼区分の設定

trust="trusted"は、出所を認証し、その信頼表明を行う権限がアプリケーションにあることを確認した後にのみ設定してください。sources=["https://example.com"]は出所を記録しますが、URLの認証や内容の取得は行いません。

安定しておりテナントを識別できる項目IDと出所URIを使用してください。ペイロードをスキャンする機能があるという理由で、出所URIやメタデータへ認証情報を入れてはいけません。

構造化診断

プログラムの分岐には、翻訳済み文字列ではなく、安定したコードとフィールドを使用してください。

with cx.locale("ja"):
    try:
        frame.pack(...)
    except cx.PolicyViolation as error:
        print(error.code)
        print(error.reason_code)
        print(error.render("ja"))
        print(error.render("en"))

未対応のロケールや、破損または欠落したカタログでは英語へフォールバックします。ローカライズ自体が障害経路になってはいけません。

監査情報の保存

マニフェストには、項目識別子、ハッシュ、出所URI、除外理由、メタデータの競合値が含まれる場合があります。組織の保持規則とプライバシー規則で許可される場合に限り保存し、対象リクエストと同じアクセス制御で保護してください。

セキュリティ上の脆弱性は公開issueではなく、リポジトリのSECURITY.mdに記載された非公開の手順で報告してください。