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 を動的検証して安全性を確保する構成を研究している。