タラバガニー設計局stalins.clubNOTE/notes/proof-carrying-authorization

Proof-Carrying Authorization は認可結果ではなく証明を持ち運ぶ

Proof-Carrying Authorization (PCA) は、認可サーバが複雑な探索をすべて引き受ける代わりに、requester 側が「この要求は policy から導ける」という proof を構築し、resource 側は proof を検証するという設計である。

Appel と Felten の Proof-Carrying Authentication (1999) では higher-order logic を認証・認可の共通基盤に使い、logic に一般的な decision procedure がない代わりに requester が request と一緒に proof を提出する。2001年の A Proof-Carrying Authorization System ではこの考えを authorization infrastructure として拡張し、goal、session、分散した policy module を扱っている。Web server/browser を拡張した実装も作られた。

概念的には、通常の

request
  -> server searches policy
  -> allow / deny

ではなく、

request + proof
  -> server checks proof
  -> allow / deny

になる。

ここで proof は単なる authorized = true より情報量が多い。どの policy facts / credentials から authorization が導かれたかという根拠を、検証可能な artifact として扱うからである。

これは 認可済みリソースをハンドラ入力にすると前提を構造化できる のような「認可済み resource を値として下流へ渡す」設計とは別物である。PCA の proof は認可根拠そのものであり、domain object の wrapper ではない。ただし「認可の成立を boolean の一瞬の判定で捨てず、その後の計算が利用できる値として残す」という抽象的な方向は共通している。この対応は 「認可済みリソース型」は既存研究の直訳ではなく設計上の合成 で類推として整理する。

Code-Carrying Authorization (2008) はさらに、requester 側へ proof 構築負担を移す方向を極端化し、runtime に受け取った untrusted code に access-control decision の一部を委ねつつ、その code を動的検証して安全性を確保する構成を研究している。

出典

▸ ノート一覧に戻る