{"slug":"a-delegation-chain-that-refuses-to-go-past-three-hops","citations":[{"url":"https://www.ietf.org/archive/id/draft-prakash-aip-00.html","committed_hash":"sha256:fd2de8eb7ca70b9b85189a9a3a88976bd3f2ff9a1ca3767569c39810e5c7c68f","committed_hash_short":"sha256:fd2de8eb…e5c7c68f","mime_type":"text/html","committed_at":"2026-09-10T11:00:25.539429+00:00","content_snapshot":"<!DOCTYPE html>\n<html lang=\"en\" class=\"Internet-Draft\">\n<head>\n<meta charset=\"utf-8\">\n<meta content=\"Common,Latin\" name=\"scripts\">\n<meta content=\"initial-scale=1.0\" name=\"viewport\">\n<title>Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems</title>\n<meta content=\"Sunil Prakash\" name=\"author\">\n<meta content=\"\n       This document specifies the Agent Identity Protocol (AIP), a protocol\n      for verifiable, delegable identity for AI agent systems. AIP introduces\n      Invocation-Bound Capability Tokens (IBCTs) that bind identity,\n      authorization, scope constraints, and provenance into a single\n      cryptographic artifact. Two token modes are defined: a compact mode\n      using JSON Web Tokens (JWT) with Ed25519 signatures for single-hop\n      interactions, and a chained mode using Biscuit tokens with append-only\n      blocks and Datalog policy evaluation for multi-hop delegation chains.\n      Protocol bindings are specified for the Model Context Protocol (MCP),\n      Agent-to-Agent Protocol (A2A), and generic HTTP APIs. The protocol\n      addresses authentication gaps in current AI agent infrastructure where\n      a survey of approximately 2,000 MCP servers found all lacked\n      authentication. \n    \" name=\"description\">\n<meta content=\"xml2rfc 3.32.0\" name=\"generator\">\n<meta content=\"AI agents\" name=\"keyword\">\n<meta content=\"authentication\" name=\"keyword\">\n<meta content=\"delegation\" name=\"keyword\">\n<meta content=\"capability tokens\" name=\"keyword\">\n<meta content=\"MCP\" name=\"keyword\">\n<meta content=\"A2A\" name=\"keyword\">\n<meta content=\"draft-prakash-aip-00\" name=\"ietf.draft\">\n<!-- Generator version information:\n  xml2rfc 3.32.0\n    Python 3.12.13\n    ConfigArgParse 1.7.1\n    google-i18n-address 3.1.1\n    intervaltree 3.2.1\n    Jinja2 3.1.6\n    lxml 6.0.2\n    platformdirs 4.9.2\n    pycountry 26.2.16\n    PyYAML 6.0.3\n    requests 2.32.5\n    wcwidth 0.6.0\n    weasyprint 68.1\n-->\n<link href=\"draft-prakash-aip-00.xml\" rel=\"alternate\" type=\"application/rfc+xml\">\n<link href=\"#copyright\" rel=\"license\">\n<style type=\"text/css\">/*\n\n  NOTE: Changes at the bottom of this file overrides some earlier settings.\n\n  Once the style has stabilized and has been adopted as an official RFC style,\n  this can be consolidated so that style settings occur only in one place, but\n  for now the contents of this file consists first of the initial CSS work as\n  provided to the RFC Formatter (xml2rfc) work, followed by itemized and\n  commented changes found necessary during the development of the v3\n  formatters.\n\n*/\n\n/* fonts */\n@import url('https://static.ietf.org/fonts/noto-sans/import.css'); /* Sans-serif */\n@import url('https://static.ietf.org/fonts/noto-serif/import.css'); /* Serif (print) */\n@import url('https://static.ietf.org/fonts/roboto-mono/import.css'); /* Monospace */\n\n:root {\n  --font-sans: 'Noto Sans', Arial, Helvetica, sans-serif;\n  --font-serif: 'Noto Serif', 'Times', 'Times New Roman', serif;\n  --font-mono: 'Roboto Mono', Courier, 'Courier New', monospace;\n}\n\n@viewport {\n  zoom: 1.0;\n}\n@-ms-viewport {\n  width: extend-to-zoom;\n  zoom: 1.0;\n}\n/* general and mobile first */\nhtml {\n}\nbody {\n  max-width: 90%;\n  margin: 1.5em auto;\n  color: #222;\n  background-color: #fff;\n  font-size: 14px;\n  font-family: var(--font-sans);\n  line-height: 1.6;\n  scroll-behavior: smooth;\n  overflow-wrap: break-word;\n}\n.ears {\n  display: none;\n}\n\n/* headings */\n#title, h1, h2, h3, h4, h5, h6 {\n  margin: 1em 0 0.5em;\n  font-weight: bold;\n  line-height: 1.3;\n}\n#title {\n  clear: both;\n  border-bottom: 1px solid #ddd;\n  margin: 0 0 0.5em 0;\n  padding: 1em 0 0.5em;\n}\n.author {\n  padding-bottom: 4px;\n}\nh1 {\n  font-size: 26px;\n  margin: 1em 0;\n}\nh2 {\n  font-size: 22px;\n  margin-top: -20px;  /* provide offset for in-page anchors */\n  padding-top: 33px;\n}\nh3 {\n  font-size: 18px;\n  margin-top: -36px;  /* provide offset for in-page anchors */\n  padding-top: 42px;\n}\nh4 {\n  font-size: 16px;\n  margin-top: -36px;  /* provide offset for in-page anchors */\n  padding-top: 42px;\n}\nh5, h6 {\n  font-size: 14px;\n}\n#n-copyright-notice {\n  border-bottom: 1px solid #ddd;\n  padding-bottom: 1em;\n  margin-bottom: 1em;\n}\n/* general structure */\np {\n  padding: 0;\n  margin: 0 0 1em 0;\n  text-align: left;\n}\ndiv, span {\n  position: relative;\n}\ndiv {\n  margin: 0;\n}\n.alignRight.art-text {\n  background-color: #f9f9f9;\n  border: 1px solid #eee;\n  border-radius: 3px;\n  padding: 1em 1em 0;\n  margin-bottom: 1.5em;\n}\n.alignRight.art-text pre {\n  padding: 0;\n}\n.alignRight {\n  margin: 1em 0;\n}\n.alignRight > *:first-child {\n  border: none;\n  margin: 0;\n  float: right;\n  clear: both;\n}\n.alignRight > *:nth-child(2) {\n  clear: both;\n  display: block;\n  border: none;\n}\nsvg {\n  display: block;\n}\n@media print {\n  svg {\n    max-height: 850px;\n    max-width: 660px;\n  }\n}\nsvg[font-family~=\"serif\" i], svg [font-family~=\"serif\" i] {\n  font-family: var(--font-serif);\n}\nsvg[font-family~=\"sans-serif\" i], svg [font-family~=\"sans-serif\" i] {\n  font-family: var(--font-sans);\n}\nsvg[font-family~=\"monospace\" i], svg [font-family~=\"monospace\" i] {\n  font-family: var(--font-mono);\n}\n.alignCenter.art-text {\n  background-color: #f9f9f9;\n  border: 1px solid #eee;\n  border-radius: 3px;\n  padding: 1em 1em 0;\n  margin-bottom: 1.5em;\n}\n.alignCenter.art-text pre {\n  padding: 0;\n}\n.alignCenter {\n  margin: 1em 0;\n}\n.alignCenter > *:first-child {\n  display: table;\n  border: none;\n  margin: 0 auto;\n}\n\n/* lists */\nol, ul {\n  padding: 0;\n  margin: 0 0 1em 2em;\n}\nol ol, ul ul, ol ul, ul ol {\n  margin-left: 1em;\n}\nli {\n  margin: 0 0 0.25em 0;\n}\n.ulCompact li {\n  margin: 0;\n}\nul.empty, .ulEmpty {\n  list-style-type: none;\n}\nul.empty li, .ulEmpty li {\n  margin-top: 0.5em;\n}\nul.ulBare, li.ulBare {\n  margin-left: 0em !important;\n}\nul.compact, .ulCompact,\nol.compact, .olCompact {\n  line-height: 100%;\n  margin: 0 0 0 2em;\n}\n\n/* definition lists */\ndl {\n}\ndl > dt {\n  float: left;\n  margin-right: 1em;\n}\n/* \ndl.nohang > dt {\n  float: none;\n}\n*/\ndl > dd {\n  margin-bottom: .8em;\n  min-height: 1.3em;\n}\ndl.compact > dd, .dlCompact > dd {\n  margin-bottom: 0em;\n}\ndl > dd > dl {\n  margin-top: 0.5em;\n  margin-bottom: 0em;\n}\n\n/* links */\na {\n  text-decoration: none;\n}\na[href] {\n  color: #22e; /* Arlen: WCAG 2019 */\n}\na[href]:hover {\n  background-color: #f2f2f2;\n}\nfigcaption a[href],\na[href].selfRef {\n  color: #222;\n}\n/* XXX probably not this:\na.selfRef:hover {\n  background-color: transparent;\n  cursor: default;\n} */\n\n/* Figures */\ntt, code, pre {\n  background-color: #f9f9f9;\n  font-family: var(--font-mono);\n}\npre {\n  border: 1px solid #eee;\n  margin: 0;\n  padding: 1em;\n}\nimg {\n  max-width: 100%;\n}\nfigure {\n  margin: 0;\n}\nfigure blockquote {\n  margin: 0.8em 0.4em 0.4em;\n}\nfigcaption {\n  font-style: italic;\n  margin: 0 0 1em 0;\n}\n@media screen {\n  pre {\n    overflow-x: auto;\n    max-width: 100%;\n    max-width: calc(100% - 22px);\n  }\n}\n\n/* aside, blockquote */\naside, blockquote {\n  margin-left: 0;\n  padding: 1.2em 2em;\n}\nblockquote {\n  background-color: #f9f9f9;\n  color: #111; /* Arlen: WCAG 2019 */\n  border: 1px solid #ddd;\n  border-radius: 3px;\n  margin: 1em 0;\n}\nblockquote > *:last-child {\n  margin-bottom: 0;\n}\ncite {\n  display: block;\n  text-align: right;\n  font-style: italic;\n}\n.xref {\n  overflow-wrap: normal;\n}\n\n/* tables */\ntable {\n  width: 100%;\n  margin: 0 0 1em;\n  border-collapse: collapse;\n  border: 1px solid #eee;\n}\nth, td {\n  text-align: left;\n  vertical-align: top;\n  padding: 0.5em 0.75em;\n}\nth {\n  text-align: left;\n  background-color: #e9e9e9;\n}\ntr:nth-child(2n+1) > td {\n  background-color: #f5f5f5;\n}\ntable caption {\n  font-style: italic;\n  margin: 0;\n  padding: 0;\n  text-align: left;\n}\ntable p {\n  /* XXX to avoid bottom margin on table row signifiers. If paragraphs should\n     be allowed within tables more generally, it would be far better to select on a class. */\n  margin: 0;\n}\n\n/* pilcrow */\na.pilcrow {\n  color: #666; /* Arlen: AHDJ 2019 */\n  text-decoration: none;\n  visibility: hidden;\n  user-select: none;\n  -ms-user-select: none;\n  -o-user-select:none;\n  -moz-user-select: none;\n  -khtml-user-select: none;\n  -webkit-user-select: none;\n  -webkit-touch-callout: none;\n}\n@media screen {\n  aside:hover > a.pilcrow,\n  p:hover > a.pilcrow,\n  blockquote:hover > a.pilcrow,\n  div:hover > a.pilcrow,\n  li:hover > a.pilcrow,\n  pre:hover > a.pilcrow {\n    visibility: visible;\n  }\n  a.pilcrow:hover {\n    background-color: transparent;\n  }\n}\n\n/* misc */\nhr {\n  border: 0;\n  border-top: 1px solid #eee;\n}\n.bcp14 {\n  font-variant: small-caps;\n}\n\n.role {\n  font-variant: all-small-caps;\n}\n\n/* info block */\n#identifiers {\n  margin: 0;\n  font-size: 0.9em;\n}\n#identifiers dt {\n  width: 3em;\n  clear: left;\n}\n#identifiers dd {\n  float: left;\n  margin-bottom: 0;\n}\n/* Fix PDF info block run off issue */\n@media print {\n  #identifiers dd {\n    max-width: 100%;\n  }\n}\n#identifiers .authors .author {\n  display: inline-block;\n  margin-right: 1.5em;\n}\n#identifiers .authors .org {\n  font-style: italic;\n}\n\n/* The prepared/rendered info at the very bottom of the page */\n.docInfo {\n  color: #666; /* Arlen: WCAG 2019 */\n  font-size: 0.9em;\n  font-style: italic;\n  margin-top: 2em;\n}\n.docInfo .prepared {\n  float: left;\n}\n.docInfo .prepared {\n  float: right;\n}\n\n/* table of contents */\n#toc  {\n  padding: 0.75em 0 2em 0;\n  margin-bottom: 1em;\n}\nnav.toc ul {\n  margin: 0 0.5em 0 0;\n  padding: 0;\n  list-style: none;\n}\nnav.toc li {\n  line-height: 1.3em;\n  margin: 0.75em 0;\n  padding-left: 1.2em;\n  text-indent: -1.2em;\n}\n/* references */\n.references dt {\n  text-align: right;\n  font-weight: bold;\n  min-width: 7em;\n}\n.references dd {\n  margin-left: 8em;\n  overflow: auto;\n}\n\n.refInstance {\n  margin-bottom: 1.25em;\n}\n\n.refSubseries {\n  margin-bottom: 1.25em;\n}\n\n.references .ascii {\n  margin-bottom: 0.25em;\n}\n\n/* index */\n.index ul {\n  margin: 0 0 0 1em;\n  padding: 0;\n  list-style: none;\n}\n.index ul ul {\n  margin: 0;\n}\n.index li {\n  margin: 0;\n  text-indent: -2em;\n  padding-left: 2em;\n  padding-bottom: 5px;\n}\n.indexIndex {\n  margin: 0.5em 0 1em;\n}\n.index a {\n  font-weight: 700;\n}\n/* make the index two-column on all but the smallest screens */\n@media (min-width: 600px) {\n  .index ul {\n    -moz-column-count: 2;\n    -moz-column-gap: 20px;\n  }\n  .index ul ul {\n    -moz-column-count: 1;\n    -moz-column-gap: 0;\n  }\n}\n\n/* authors */\naddress.vcard {\n  font-style: normal;\n  margin: 1em 0;\n}\n\naddress.vcard .nameRole {\n  font-weight: 700;\n  margin-left: 0;\n}\naddress.vcard .label {\n  font-family: var(--font-sans);\n  margin: 0.5em 0;\n}\naddress.vcard .type {\n  display: none;\n}\n.alternative-contact {\n  margin: 1.5em 0 1em;\n}\nhr.addr {\n  border-top: 1px dashed;\n  margin: 0;\n  color: #ddd;\n  max-width: calc(100% - 16px);\n}\n\n/* temporary notes */\n.rfcEditorRemove::before {\n  position: absolute;\n  top: 0.2em;\n  right: 0.2em;\n  padding: 0.2em;\n  content: \"The RFC Editor will remove this note\";\n  color: #9e2a00; /* Arlen: WCAG 2019 */\n  background-color: #ffd; /* Arlen: WCAG 2019 */\n}\n.rfcEditorRemove {\n  position: relative;\n  padding-top: 1.8em;\n  background-color: #ffd; /* Arlen: WCAG 2019 */\n  border-radius: 3px;\n}\n.cref {\n  background-color: #ffd; /* Arlen: WCAG 2019 */\n  padding: 2px 4px;\n}\n.crefSource {\n  font-style: italic;\n}\n/* alternative layout for smaller screens */\n@media screen and (max-width: 1023px) {\n  body {\n    padding-top: 2em;\n  }\n  #title {\n    padding: 1em 0;\n  }\n  h1 {\n    font-size: 24px;\n  }\n  h2 {\n    font-size: 20px;\n    margin-top: -18px;  /* provide offset for in-page anchors */\n    padding-top: 38px;\n  }\n  #identifiers dd {\n    max-width: 60%;\n  }\n  #toc {\n    position: fixed;\n    z-index: 2;\n    top: 0;\n    right: 0;\n    padding: 0;\n    margin: 0;\n    background-color: inherit;\n    border-bottom: 1px solid #ccc;\n  }\n  #toc h2 {\n    margin: -1px 0 0 0;\n    padding: 4px 0 4px 6px;\n    padding-right: 1em;\n    min-width: 190px;\n    font-size: 1.1em;\n    text-align: right;\n    background-color: #444;\n    color: white;\n    cursor: pointer;\n  }\n  #toc h2::before { /* css hamburger */\n    float: right;\n    position: relative;\n    width: 1em;\n    height: 1px;\n    left: -164px;\n    margin: 6px 0 0 0;\n    background: white none repeat scroll 0 0;\n    box-shadow: 0 4px 0 0 white, 0 8px 0 0 white;\n    content: \"\";\n  }\n  #toc nav {\n    display: none;\n    padding: 0.5em 1em 1em;\n    overflow: auto;\n    height: calc(100vh - 48px);\n    border-left: 1px solid #ddd;\n  }\n}\n\n/* alternative layout for wide screens */\n@media screen and (min-width: 1024px) {\n  body {\n    max-width: 724px;\n    margin: 42px auto;\n    padding-left: 1.5em;\n    padding-right: 29em;\n  }\n  #toc {\n    position: fixed;\n    top: 42px;\n    right: 42px;\n    width: 25%;\n    margin: 0;\n    padding: 0 1em;\n    z-index: 1;\n  }\n  #toc h2 {\n    border-top: none;\n    border-bottom: 1px solid #ddd;\n    font-size: 1em;\n    font-weight: normal;\n    margin: 0;\n    padding: 0.25em 1em 1em 0;\n  }\n  #toc nav {\n    display: block;\n    height: calc(90vh - 84px);\n    bottom: 0;\n    padding: 0.5em 0 0;\n    overflow: auto;\n  }\n  img { /* future proofing */\n    max-width: 100%;\n    height: auto;\n  }\n}\n\n/* pagination */\n@media print {\n  body {\n    width: 100%;\n  }\n  p {\n    orphans: 3;\n    widows: 3;\n  }\n  #n-copyright-notice {\n    border-bottom: none;\n  }\n  #toc, #n-introduction {\n    page-break-before: always;\n  }\n  #toc {\n    border-top: none;\n    padding-top: 0;\n  }\n  figure, pre {\n    page-break-inside: avoid;\n  }\n  figure {\n    overflow: scroll;\n  }\n  .breakable pre {\n    break-inside: auto;\n  }\n  h1, h2, h3, h4, h5, h6 {\n    page-break-after: avoid;\n  }\n  h2+*, h3+*, h4+*, h5+*, h6+* {\n    page-break-before: avoid;\n  }\n  pre {\n    white-space: pre-wrap;\n    word-wrap: break-word;\n    font-size: 10pt;\n  }\n  table {\n    border: 1px solid #ddd;\n  }\n  td {\n    border-top: 1px solid #ddd;\n  }\n}\n\n/* This is commented out here, as the string-set: doesn't\n   pass W3C validation currently */\n/*\n.ears thead .left {\n  string-set: ears-top-left content();\n}\n\n.ears thead .center {\n  string-set: ears-top-center content();\n}\n\n.ears thead .right {\n  string-set: ears-top-right content();\n}\n\n.ears tfoot .left {\n  string-set: ears-bottom-left content();\n}\n\n.ears tfoot .center {\n  string-set: ears-bottom-center content();\n}\n\n.ears tfoot .right {\n  string-set: ears-bottom-right content();\n}\n*/\n\n@page :first {\n  padding-top: 0;\n  @top-left {\n    content: normal;\n    border: none;\n  }\n  @top-center {\n    content: normal;\n    border: none;\n  }\n  @top-right {\n    content: normal;\n    border: none;\n  }\n}\n\n@page {\n  size: A4;\n  margin-bottom: 45mm;\n  padding-top: 20px;\n  /* The following is commented out here, but set appropriately by in code, as\n     the content depends on the document */\n  /*\n  @top-left {\n    content: 'Internet-Draft';\n    vertical-align: bottom;\n    border-bottom: solid 1px #ccc;\n  }\n  @top-left {\n    content: string(ears-top-left);\n    vertical-align: bottom;\n    border-bottom: solid 1px #ccc;\n  }\n  @top-center {\n    content: string(ears-top-center);\n    vertical-align: bottom;\n    border-bottom: solid 1px #ccc;\n  }\n  @top-right {\n    content: string(ears-top-right);\n    vertical-align: bottom;\n    border-bottom: solid 1px #ccc;\n  }\n  @bottom-left {\n    content: string(ears-bottom-left);\n    vertical-align: top;\n    border-top: solid 1px #ccc;\n  }\n  @bottom-center {\n    content: string(ears-bottom-center);\n    vertical-align: top;\n    border-top: solid 1px #ccc;\n  }\n  @bottom-right {\n      content: '[Page ' counter(page) ']';\n      vertical-align: top;\n      border-top: solid 1px #ccc;\n  }\n  */\n\n}\n\n/* Changes introduced to fix issues found during implementation */\n/* Make sure links are clickable even if overlapped by following H* */\na {\n  z-index: 2;\n}\n/* Separate body from document info even without intervening H1 */\nsection {\n  clear: both;\n}\n\n\n/* Top align author divs, to avoid names without organization dropping level with org names */\n.author {\n  vertical-align: top;\n}\n\n/* Leave room in document info to show Internet-Draft on one line */\n#identifiers dt {\n  width: 8em;\n}\n\n/* Don't waste quite as much whitespace between label and value in doc info */\n#identifiers dd {\n  margin-left: 1em;\n}\n\n/* Give floating toc a background color (needed when it's a div inside section */\n#toc {\n  background-color: white;\n}\n\n/* Make the collapsed ToC header render white on gray also when it's a link */\n@media screen and (max-width: 1023px) {\n  #toc h2 a,\n  #toc h2 a:link,\n  #toc h2 a:focus,\n  #toc h2 a:hover,\n  #toc a.toplink,\n  #toc a.toplink:hover {\n    color: white;\n    background-color: #444;\n    text-decoration: none;\n  }\n}\n\n/* Give the bottom of the ToC some whitespace */\n@media screen and (min-width: 1024px) {\n  #toc {\n    padding: 0 0 1em 1em;\n  }\n}\n\n/* Style section numbers with more space between number and title */\n.section-number {\n  padding-right: 0.5em;\n}\n\n/* prevent monospace from becoming overly large */\ntt, code, pre {\n  font-size: 95%;\n}\n\n/* Fix the height/width aspect for ascii art*/\n.sourcecode pre,\n.art-text pre {\n  line-height: 1.12;\n}\n\n\n/* Add styling for a link in the ToC that points to the top of the document */\na.toplink {\n  float: right;\n  margin-right: 0.5em;\n}\n\n/* Fix the dl styling to match the RFC 7992 attributes */\ndl > dt,\ndl.dlParallel > dt {\n  float: left;\n  margin-right: 1em;\n}\ndl.dlNewline > dt {\n  float: none;\n}\n\n/* Provide styling for table cell text alignment */\ntable td.text-left,\ntable th.text-left {\n  text-align: left;\n}\ntable td.text-center,\ntable th.text-center {\n  text-align: center;\n}\ntable td.text-right,\ntable th.text-right {\n  text-align: right;\n}\n\n/* Make the alternative author contact information look less like just another\n   author, and group it closer with the primary author contact information */\n.alternative-contact {\n  margin: 0.5em 0 0.25em 0;\n}\naddress .non-ascii {\n  margin: 0 0 0 2em;\n}\n\n/* With it being possible to set tables with alignment\n  left, center, and right, { width: 100%; } does not make sense */\ntable {\n  width: auto;\n}\n\n/* Avoid reference text that sits in a block with very wide left margin,\n   because of a long floating dt label.*/\n.references dd {\n  overflow: visible;\n}\n\n/* Control caption placement */\ncaption {\n  caption-side: bottom;\n}\n\n/* Limit the width of the author address vcard, so names in right-to-left\n   script don't end up on the other side of the page. */\n\naddress.vcard {\n  max-width: 30em;\n  margin-right: auto;\n}\n\n/* For address alignment dependent on LTR or RTL scripts */\naddress div.left {\n  text-align: left;\n}\naddress div.right {\n  text-align: right;\n}\n\n/* Provide table alignment support.  We can't use the alignX classes above\n   since they do unwanted things with caption and other styling. */\ntable.right {\n margin-left: auto;\n margin-right: 0;\n}\ntable.center {\n margin-left: auto;\n margin-right: auto;\n}\ntable.left {\n margin-left: 0;\n margin-right: auto;\n}\n\n/* Give the table caption label the same styling as the figcaption */\ncaption a[href] {\n  color: #222;\n}\n\n@media print {\n  .toplink {\n    display: none;\n  }\n\n  /* avoid overwriting the top border line with the ToC header */\n  #toc {\n    padding-top: 1px;\n  }\n\n  /* Avoid page breaks inside dl and author address entries */\n  .vcard {\n    page-break-inside: avoid;\n  }\n\n}\n/* Tweak the bcp14 keyword presentation */\n.bcp14 {\n  font-variant: small-caps;\n  font-weight: bold;\n  font-size: 0.9em;\n}\n/* Tweak the invisible space above H* in order not to overlay links in text above */\n h2 {\n  margin-top: -18px;  /* provide offset for in-page anchors */\n  padding-top: 31px;\n }\n h3 {\n  margin-top: -18px;  /* provide offset for in-page anchors */\n  padding-top: 24px;\n }\n h4 {\n  margin-top: -18px;  /* provide offset for in-page anchors */\n  padding-top: 24px;\n }\n/* Float artwork pilcrow to the right */\n@media screen {\n  .artwork a.pilcrow {\n    display: block;\n    line-height: 0.7;\n    margin-top: 0.15em;\n  }\n}\n/* Make pilcrows on dd visible */\n@media screen {\n  dd:hover > a.pilcrow {\n    visibility: visible;\n  }\n}\n/* Make the placement of figcaption match that of a table's caption\n   by removing the figure's added bottom margin */\n.alignLeft.art-text,\n.alignCenter.art-text,\n.alignRight.art-text {\n   margin-bottom: 0;\n}\n.alignLeft,\n.alignCenter,\n.alignRight {\n  margin: 1em 0 0 0;\n}\n/* In print, the pilcrow won't show on hover, so prevent it from taking up space,\n   possibly even requiring a new line */\n@media print {\n  a.pilcrow {\n    display: none;\n  }\n}\n/* Styling for the external metadata */\ndiv#external-metadata {\n  background-color: #eee;\n  padding: 0.5em;\n  margin-bottom: 0.5em;\n  display: none;\n}\ndiv#internal-metadata {\n  padding: 0.5em;                       /* to match the external-metadata padding */\n}\n/* Styling for title RFC Number */\nh1#rfcnum {\n  clear: both;\n  margin: 0 0 -1em;\n  padding: 1em 0 0 0;\n}\n/* Make .olPercent look the same as <ol><li> */\ndl.olPercent > dd {\n  margin-bottom: 0.25em;\n  min-height: initial;\n}\n/* Give aside some styling to set it apart */\naside {\n  border-left: 1px solid #ddd;\n  margin: 1em 0 1em 2em;\n  padding: 0.2em 2em;\n}\naside > dl,\naside > ol,\naside > ul,\naside > table,\naside > p {\n  margin-bottom: 0.5em;\n}\n/* Additional page break settings */\n@media print {\n  figcaption, table caption {\n    page-break-before: avoid;\n  }\n}\n/* Font size adjustments for print */\n@media print {\n  body  { font-size: 10pt;      line-height: normal; max-width: 96%; }\n  h1    { font-size: 1.72em;    padding-top: 1.5em; } /* 1*1.2*1.2*1.2 */\n  h2    { font-size: 1.44em;    padding-top: 1.5em; } /* 1*1.2*1.2 */\n  h3    { font-size: 1.2em;     padding-top: 1.5em; } /* 1*1.2 */\n  h4    { font-size: 1em;       padding-top: 1.5em; }\n  h5, h6 { font-size: 1em;      margin: initial; padding: 0.5em 0 0.3em; }\n}\n/* Sourcecode margin in print, when there's no pilcrow */\n@media print {\n  .artwork,\n  .artwork > pre,\n  .sourcecode {\n    margin-bottom: 1em;\n  }\n}\n/* Avoid narrow tables forcing too narrow table captions, which may render badly */\ntable {\n  min-width: 20em;\n}\n/* ol type a */\nol.type-a { list-style-type: lower-alpha; }\nol.type-A { list-style-type: upper-alpha; }\nol.type-i { list-style-type: lower-roman; }\nol.type-I { list-style-type: upper-roman; }\n/* Apply the print table and row borders in general, on request from the RPC,\nand increase the contrast between border and odd row background slightly */\ntable {\n  border: 1px solid #ddd;\n}\ntd {\n  border-top: 1px solid #ddd;\n}\ntr {\n  break-inside: avoid;\n}\ntr:nth-child(2n+1) > td {\n  background-color: #f8f8f8;\n}\n/* Use style rules to govern display of the TOC. */\n@media screen and (max-width: 1023px) {\n  #toc nav { display: none; }\n  #toc.active nav { display: block; }\n}\n/* Add support for keepWithNext */\n.keepWithNext {\n  break-after: avoid-page;\n  break-after: avoid-page;\n}\n/* Add support for keepWithPrevious */\n.keepWithPrevious {\n  break-before: avoid-page;\n}\n/* Change the approach to avoiding breaks inside artwork etc. */\nfigure, pre, table, .artwork, .sourcecode  {\n  break-before: auto;\n  break-after: auto;\n}\n/* Avoid breaks between <dt> and <dd> */\ndl {\n  break-before: auto;\n  break-inside: auto;\n}\ndt {\n  break-before: auto;\n  break-after: avoid-page;\n}\ndd {\n  break-before: avoid-page;\n  break-after: auto;\n  orphans: 3;\n  widows: 3\n}\nspan.break, dd.break {\n  margin-bottom: 0;\n  min-height: 0;\n  break-before: auto;\n  break-inside: auto;\n  break-after: auto;\n}\n/* Undo break-before ToC */\n@media print {\n  #toc {\n    break-before: auto;\n  }\n}\n/* Text in compact lists should not get extra bottom margin space,\n   since that would makes the list not compact */\nul.compact p, .ulCompact p,\nol.compact p, .olCompact p {\n margin: 0;\n}\n/* But the list as a whole needs the extra space at the end */\nsection ul.compact,\nsection .ulCompact,\nsection ol.compact,\nsection .olCompact {\n  margin-bottom: 1em;                    /* same as p not within ul.compact etc. */\n}\n/* The tt and code background above interferes with for instance table cell\n   backgrounds.  Changed to something a bit more selective. */\ntt, code {\n  background-color: transparent;\n}\np tt, p code, li tt, li code, dt tt, dt code {\n  background-color: #f8f8f8;\n}\n/* Tweak the pre margin -- 0px doesn't come out well */\npre {\n   margin-top: 0.5px;\n}\n/* Tweak the compact list text */\nul.compact, .ulCompact,\nol.compact, .olCompact,\ndl.compact, .dlCompact {\n  line-height: normal;\n}\n/* Don't add top margin for nested lists */\nli > ul, li > ol, li > dl,\ndd > ul, dd > ol, dd > dl,\ndl > dd > dl {\n  margin-top: initial;\n}\n/* Elements that should not be rendered on the same line as a <dt> */\n/* This should match the element list in writer.text.TextWriter.render_dl() */\ndd > div.artwork:first-child,\ndd > aside:first-child,\ndd > blockquote:first-child,\ndd > figure:first-child,\ndd > ol:first-child,\ndd > div.sourcecode:first-child,\ndd > table:first-child,\ndd > ul:first-child {\n  clear: left;\n}\n/* fix for weird browser behaviour when <dd/> is empty */\ndt+dd:empty::before{\n  content: \"\\00a0\";\n}\n/* Make paragraph spacing inside <li> smaller than in body text, to fit better within the list */\nli > p {\n  margin-bottom: 0.5em\n}\n/* Don't let p margin spill out from inside list items */\nli > p:last-of-type:only-child {\n  margin-bottom: 0;\n}\n</style>\n<link href=\"rfc-local.css\" rel=\"stylesheet\" type=\"text/css\">\n<script type=\"application/javascript\">async function addMetadata(){try{const e=document.styleSheets[0].cssRules;for(let t=0;t<e.length;t++)if(/#identifiers/.exec(e[t].selectorText)){const a=e[t].cssText.replace(\"#identifiers\",\"#external-updates\");document.styleSheets[0].insertRule(a,document.styleSheets[0].cssRules.length)}}catch(e){console.log(e)}const e=document.getElementById(\"external-metadata\");if(e)try{var t,a=\"\",o=function(e){const t=document.getElementsByTagName(\"meta\");for(let a=0;a<t.length;a++)if(t[a].getAttribute(\"name\")===e)return t[a].getAttribute(\"content\");return\"\"}(\"rfc.number\");if(o){t=\"https://www.rfc-editor.org/rfc/rfc\"+o+\".json\";try{const e=await fetch(t);a=await e.json()}catch(e){t=document.URL.indexOf(\"html\")>=0?document.URL.replace(/html$/,\"json\"):document.URL+\".json\";const o=await fetch(t);a=await o.json()}}if(!a)return;e.style.display=\"block\";const s=\"\",d=\"https://datatracker.ietf.org/doc\",n=\"https://datatracker.ietf.org/ipr/search\",c=\"https://www.rfc-editor.org/info\",l=a.doc_id.toLowerCase(),i=a.doc_id.slice(0,3).toLowerCase(),f=a.doc_id.slice(3).replace(/^0+/,\"\"),u={status:\"Status\",obsoletes:\"Obsoletes\",obsoleted_by:\"Obsoleted By\",updates:\"Updates\",updated_by:\"Updated By\",see_also:\"See Also\",errata_url:\"Errata\"};let h=\"<dl style='overflow:hidden' id='external-updates'>\";[\"status\",\"obsoletes\",\"obsoleted_by\",\"updates\",\"updated_by\",\"see_also\",\"errata_url\"].forEach(e=>{if(\"status\"==e){a[e]=a[e].toLowerCase();var t=a[e].split(\" \"),o=t.length,w=\"\",p=1;for(let e=0;e<o;e++)p<o?w=w+r(t[e])+\" \":w+=r(t[e]),p++;a[e]=w}else if(\"obsoletes\"==e||\"obsoleted_by\"==e||\"updates\"==e||\"updated_by\"==e){var g,m=\"\",b=1;g=a[e].length;for(let t=0;t<g;t++)a[e][t]&&(a[e][t]=String(a[e][t]).toLowerCase(),m=b<g?m+\"<a href='\"+s+\"/rfc/\".concat(a[e][t])+\"'>\"+a[e][t].slice(3)+\"</a>, \":m+\"<a href='\"+s+\"/rfc/\".concat(a[e][t])+\"'>\"+a[e][t].slice(3)+\"</a>\",b++);a[e]=m}else if(\"see_also\"==e){var y,L=\"\",C=1;y=a[e].length;for(let t=0;t<y;t++)if(a[e][t]){a[e][t]=String(a[e][t]);var _=a[e][t].slice(0,3),v=a[e][t].slice(3).replace(/^0+/,\"\");L=C<y?\"RFC\"!=_?L+\"<a href='\"+s+\"/info/\"+_.toLowerCase().concat(v.toLowerCase())+\"'>\"+_+\" \"+v+\"</a>, \":L+\"<a href='\"+s+\"/info/\"+_.toLowerCase().concat(v.toLowerCase())+\"'>\"+v+\"</a>, \":\"RFC\"!=_?L+\"<a href='\"+s+\"/info/\"+_.toLowerCase().concat(v.toLowerCase())+\"'>\"+_+\" \"+v+\"</a>\":L+\"<a href='\"+s+\"/info/\"+_.toLowerCase().concat(v.toLowerCase())+\"'>\"+v+\"</a>\",C++}a[e]=L}else if(\"errata_url\"==e){var R=\"\";R=a[e]?R+\"<a href='\"+a[e]+\"'>Errata exist</a> | <a href='\"+d+\"/\"+l+\"'>Datatracker</a>| <a href='\"+n+\"/?\"+i+\"=\"+f+\"&submit=\"+i+\"'>IPR</a> | <a href='\"+c+\"/\"+l+\"'>Info page</a>\":\"<a href='\"+d+\"/\"+l+\"'>Datatracker</a> | <a href='\"+n+\"/?\"+i+\"=\"+f+\"&submit=\"+i+\"'>IPR</a> | <a href='\"+c+\"/\"+l+\"'>Info page</a>\",a[e]=R}\"\"!=a[e]?\"Errata\"==u[e]?h+=`<dt>More info:</dt><dd>${a[e]}</dd>`:h+=`<dt>${u[e]}:</dt><dd>${a[e]}</dd>`:\"Errata\"==u[e]&&(h+=`<dt>More info:</dt><dd>${a[e]}</dd>`)}),h+=\"</dl>\",e.innerHTML=h}catch(e){console.log(e)}else console.log(\"Could not locate metadata <div> element\");function r(e){return e.charAt(0).toUpperCase()+e.slice(1)}}window.removeEventListener(\"load\",addMetadata),window.addEventListener(\"load\",addMetadata);</script>\n</head>\n<body class=\"xml2rfc\">\n<table class=\"ears\">\n<thead><tr>\n<td class=\"left\">Internet-Draft</td>\n<td class=\"center\">AIP</td>\n<td class=\"right\">March 2026</td>\n</tr></thead>\n<tfoot><tr>\n<td class=\"left\">Prakash</td>\n<td class=\"center\">Expires 28 September 2026</td>\n<td class=\"right\">[Page]</td>\n</tr></tfoot>\n</table>\n<div id=\"external-metadata\" class=\"document-information\"></div>\n<div id=\"internal-metadata\" class=\"document-information\">\n<dl id=\"identifiers\">\n<dt class=\"label-workgroup\">Workgroup:</dt>\n<dd class=\"workgroup\">Individual Submission</dd>\n<dt class=\"label-internet-draft\">Internet-Draft:</dt>\n<dd class=\"internet-draft\">draft-prakash-aip-00</dd>\n<dt class=\"label-published\">Published:</dt>\n<dd class=\"published\">\n<time datetime=\"2026-03-27\" class=\"published\">27 March 2026</time>\n    </dd>\n<dt class=\"label-intended-status\">Intended Status:</dt>\n<dd class=\"intended-status\">Informational</dd>\n<dt class=\"label-expires\">Expires:</dt>\n<dd class=\"expires\"><time datetime=\"2026-09-28\">28 September 2026</time></dd>\n<dt class=\"label-authors\">Author:</dt>\n<dd class=\"authors\">\n<div class=\"author\">\n      <div class=\"author-name\">S. Prakash</div>\n<div class=\"org\">Independent</div>\n</div>\n</dd>\n</dl>\n</div>\n<h1 id=\"title\">Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems</h1>\n<section id=\"section-abstract\">\n      <h2 id=\"abstract\"><a href=\"#abstract\" class=\"selfRef\">Abstract</a></h2>\n<p id=\"section-abstract-1\">This document specifies the Agent Identity Protocol (AIP), a protocol\n      for verifiable, delegable identity for AI agent systems. AIP introduces\n      Invocation-Bound Capability Tokens (IBCTs) that bind identity,\n      authorization, scope constraints, and provenance into a single\n      cryptographic artifact. Two token modes are defined: a compact mode\n      using JSON Web Tokens (JWT) with Ed25519 signatures for single-hop\n      interactions, and a chained mode using Biscuit tokens with append-only\n      blocks and Datalog policy evaluation for multi-hop delegation chains.\n      Protocol bindings are specified for the Model Context Protocol (MCP),\n      Agent-to-Agent Protocol (A2A), and generic HTTP APIs. The protocol\n      addresses authentication gaps in current AI agent infrastructure where\n      a survey of approximately 2,000 MCP servers found all lacked\n      authentication.<a href=\"#section-abstract-1\" class=\"pilcrow\">¶</a></p>\n</section>\n<div id=\"status-of-memo\">\n<section id=\"section-boilerplate.1\">\n        <h2 id=\"name-status-of-this-memo\">\n<a href=\"#name-status-of-this-memo\" class=\"section-name selfRef\">Status of This Memo</a>\n        </h2>\n<p id=\"section-boilerplate.1-1\">\n        This Internet-Draft is submitted in full conformance with the\n        provisions of BCP 78 and BCP 79.<a href=\"#section-boilerplate.1-1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-boilerplate.1-2\">\n        Internet-Drafts are working documents of the Internet Engineering Task\n        Force (IETF). Note that other groups may also distribute working\n        documents as Internet-Drafts. The list of current Internet-Drafts is\n        at <span><a href=\"https://datatracker.ietf.org/drafts/current/\">https://datatracker.ietf.org/drafts/current/</a></span>.<a href=\"#section-boilerplate.1-2\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-boilerplate.1-3\">\n        Internet-Drafts are draft documents valid for a maximum of six months\n        and may be updated, replaced, or obsoleted by other documents at any\n        time. It is inappropriate to use Internet-Drafts as reference\n        material or to cite them other than as \"work in progress.\"<a href=\"#section-boilerplate.1-3\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-boilerplate.1-4\">\n        This Internet-Draft will expire on 28 September 2026.<a href=\"#section-boilerplate.1-4\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"copyright\">\n<section id=\"section-boilerplate.2\">\n        <h2 id=\"name-copyright-notice\">\n<a href=\"#name-copyright-notice\" class=\"section-name selfRef\">Copyright Notice</a>\n        </h2>\n<p id=\"section-boilerplate.2-1\">\n            Copyright (c) 2026 IETF Trust and the persons identified as the\n            document authors. All rights reserved.<a href=\"#section-boilerplate.2-1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-boilerplate.2-2\">\n            This document is subject to BCP 78 and the IETF Trust's Legal\n            Provisions Relating to IETF Documents\n            (<span><a href=\"https://trustee.ietf.org/license-info\">https://trustee.ietf.org/license-info</a></span>) in effect on the date of\n            publication of this document. Please review these documents\n            carefully, as they describe your rights and restrictions with\n            respect to this document.<a href=\"#section-boilerplate.2-2\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"toc\">\n<section id=\"section-toc.1\">\n        <a href=\"#\" onclick=\"scroll(0,0)\" class=\"toplink\">▲</a><h2 id=\"name-table-of-contents\">\n<a href=\"#name-table-of-contents\" class=\"section-name selfRef\">Table of Contents</a>\n        </h2>\n<nav class=\"toc\"><ul class=\"compact toc ulBare ulEmpty\">\n<li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.1\">\n            <p id=\"section-toc.1-1.1.1\" class=\"keepWithNext\"><a href=\"#section-1\" class=\"auto internal xref\">1</a>.  <a href=\"#name-introduction\" class=\"internal xref\">Introduction</a></p>\n<ul class=\"compact toc ulBare ulEmpty\">\n<li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.1.2.1\">\n                <p id=\"section-toc.1-1.1.2.1.1\" class=\"keepWithNext\"><a href=\"#section-1.1\" class=\"auto internal xref\">1.1</a>.  <a href=\"#name-requirements-language\" class=\"internal xref\">Requirements Language</a></p>\n</li>\n            </ul>\n</li>\n          <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.2\">\n            <p id=\"section-toc.1-1.2.1\"><a href=\"#section-2\" class=\"auto internal xref\">2</a>.  <a href=\"#name-identity-scheme\" class=\"internal xref\">Identity Scheme</a></p>\n<ul class=\"compact toc ulBare ulEmpty\">\n<li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.2.2.1\">\n                <p id=\"section-toc.1-1.2.2.1.1\" class=\"keepWithNext\"><a href=\"#section-2.1\" class=\"auto internal xref\">2.1</a>.  <a href=\"#name-dns-based-identifiers\" class=\"internal xref\">DNS-Based Identifiers</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.2.2.2\">\n                <p id=\"section-toc.1-1.2.2.2.1\"><a href=\"#section-2.2\" class=\"auto internal xref\">2.2</a>.  <a href=\"#name-self-certifying-identifiers\" class=\"internal xref\">Self-Certifying Identifiers</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.2.2.3\">\n                <p id=\"section-toc.1-1.2.2.3.1\"><a href=\"#section-2.3\" class=\"auto internal xref\">2.3</a>.  <a href=\"#name-identity-document\" class=\"internal xref\">Identity Document</a></p>\n</li>\n            </ul>\n</li>\n          <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.3\">\n            <p id=\"section-toc.1-1.3.1\"><a href=\"#section-3\" class=\"auto internal xref\">3</a>.  <a href=\"#name-token-formats\" class=\"internal xref\">Token Formats</a></p>\n<ul class=\"compact toc ulBare ulEmpty\">\n<li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.3.2.1\">\n                <p id=\"section-toc.1-1.3.2.1.1\"><a href=\"#section-3.1\" class=\"auto internal xref\">3.1</a>.  <a href=\"#name-compact-mode-jwt\" class=\"internal xref\">Compact Mode (JWT)</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.3.2.2\">\n                <p id=\"section-toc.1-1.3.2.2.1\"><a href=\"#section-3.2\" class=\"auto internal xref\">3.2</a>.  <a href=\"#name-chained-mode-biscuit\" class=\"internal xref\">Chained Mode (Biscuit)</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.3.2.3\">\n                <p id=\"section-toc.1-1.3.2.3.1\"><a href=\"#section-3.3\" class=\"auto internal xref\">3.3</a>.  <a href=\"#name-scope-attenuation\" class=\"internal xref\">Scope Attenuation</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.3.2.4\">\n                <p id=\"section-toc.1-1.3.2.4.1\"><a href=\"#section-3.4\" class=\"auto internal xref\">3.4</a>.  <a href=\"#name-policy-profiles\" class=\"internal xref\">Policy Profiles</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.3.2.5\">\n                <p id=\"section-toc.1-1.3.2.5.1\"><a href=\"#section-3.5\" class=\"auto internal xref\">3.5</a>.  <a href=\"#name-budget-semantics\" class=\"internal xref\">Budget Semantics</a></p>\n</li>\n            </ul>\n</li>\n          <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.4\">\n            <p id=\"section-toc.1-1.4.1\"><a href=\"#section-4\" class=\"auto internal xref\">4</a>.  <a href=\"#name-protocol-bindings\" class=\"internal xref\">Protocol Bindings</a></p>\n<ul class=\"compact toc ulBare ulEmpty\">\n<li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.4.2.1\">\n                <p id=\"section-toc.1-1.4.2.1.1\"><a href=\"#section-4.1\" class=\"auto internal xref\">4.1</a>.  <a href=\"#name-mcp-binding\" class=\"internal xref\">MCP Binding</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.4.2.2\">\n                <p id=\"section-toc.1-1.4.2.2.1\"><a href=\"#section-4.2\" class=\"auto internal xref\">4.2</a>.  <a href=\"#name-a2a-binding\" class=\"internal xref\">A2A Binding</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.4.2.3\">\n                <p id=\"section-toc.1-1.4.2.3.1\"><a href=\"#section-4.3\" class=\"auto internal xref\">4.3</a>.  <a href=\"#name-http-binding\" class=\"internal xref\">HTTP Binding</a></p>\n</li>\n            </ul>\n</li>\n          <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.5\">\n            <p id=\"section-toc.1-1.5.1\"><a href=\"#section-5\" class=\"auto internal xref\">5</a>.  <a href=\"#name-delegation-lifecycle\" class=\"internal xref\">Delegation Lifecycle</a></p>\n<ul class=\"compact toc ulBare ulEmpty\">\n<li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.5.2.1\">\n                <p id=\"section-toc.1-1.5.2.1.1\"><a href=\"#section-5.1\" class=\"auto internal xref\">5.1</a>.  <a href=\"#name-bounded-depth\" class=\"internal xref\">Bounded Depth</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.5.2.2\">\n                <p id=\"section-toc.1-1.5.2.2.1\"><a href=\"#section-5.2\" class=\"auto internal xref\">5.2</a>.  <a href=\"#name-delegation-context\" class=\"internal xref\">Delegation Context</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.5.2.3\">\n                <p id=\"section-toc.1-1.5.2.3.1\"><a href=\"#section-5.3\" class=\"auto internal xref\">5.3</a>.  <a href=\"#name-ephemeral-agent-grants\" class=\"internal xref\">Ephemeral Agent Grants</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.5.2.4\">\n                <p id=\"section-toc.1-1.5.2.4.1\"><a href=\"#section-5.4\" class=\"auto internal xref\">5.4</a>.  <a href=\"#name-key-rotation\" class=\"internal xref\">Key Rotation</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.5.2.5\">\n                <p id=\"section-toc.1-1.5.2.5.1\"><a href=\"#section-5.5\" class=\"auto internal xref\">5.5</a>.  <a href=\"#name-revocation\" class=\"internal xref\">Revocation</a></p>\n</li>\n            </ul>\n</li>\n          <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.6\">\n            <p id=\"section-toc.1-1.6.1\"><a href=\"#section-6\" class=\"auto internal xref\">6</a>.  <a href=\"#name-provenance-and-audit\" class=\"internal xref\">Provenance and Audit</a></p>\n<ul class=\"compact toc ulBare ulEmpty\">\n<li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.6.2.1\">\n                <p id=\"section-toc.1-1.6.2.1.1\"><a href=\"#section-6.1\" class=\"auto internal xref\">6.1</a>.  <a href=\"#name-completion-blocks\" class=\"internal xref\">Completion Blocks</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.6.2.2\">\n                <p id=\"section-toc.1-1.6.2.2.1\"><a href=\"#section-6.2\" class=\"auto internal xref\">6.2</a>.  <a href=\"#name-verification-trust-levels\" class=\"internal xref\">Verification Trust Levels</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.6.2.3\">\n                <p id=\"section-toc.1-1.6.2.3.1\"><a href=\"#section-6.3\" class=\"auto internal xref\">6.3</a>.  <a href=\"#name-audit-tokens\" class=\"internal xref\">Audit Tokens</a></p>\n</li>\n            </ul>\n</li>\n          <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.7\">\n            <p id=\"section-toc.1-1.7.1\"><a href=\"#section-7\" class=\"auto internal xref\">7</a>.  <a href=\"#name-security-considerations\" class=\"internal xref\">Security Considerations</a></p>\n<ul class=\"compact toc ulBare ulEmpty\">\n<li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.7.2.1\">\n                <p id=\"section-toc.1-1.7.2.1.1\"><a href=\"#section-7.1\" class=\"auto internal xref\">7.1</a>.  <a href=\"#name-threat-model\" class=\"internal xref\">Threat Model</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.7.2.2\">\n                <p id=\"section-toc.1-1.7.2.2.1\"><a href=\"#section-7.2\" class=\"auto internal xref\">7.2</a>.  <a href=\"#name-adversarial-evaluation\" class=\"internal xref\">Adversarial Evaluation</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.7.2.3\">\n                <p id=\"section-toc.1-1.7.2.3.1\"><a href=\"#section-7.3\" class=\"auto internal xref\">7.3</a>.  <a href=\"#name-cryptographic-agility\" class=\"internal xref\">Cryptographic Agility</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.7.2.4\">\n                <p id=\"section-toc.1-1.7.2.4.1\"><a href=\"#section-7.4\" class=\"auto internal xref\">7.4</a>.  <a href=\"#name-transport-security\" class=\"internal xref\">Transport Security</a></p>\n</li>\n            </ul>\n</li>\n          <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.8\">\n            <p id=\"section-toc.1-1.8.1\"><a href=\"#section-8\" class=\"auto internal xref\">8</a>.  <a href=\"#name-iana-considerations\" class=\"internal xref\">IANA Considerations</a></p>\n<ul class=\"compact toc ulBare ulEmpty\">\n<li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.8.2.1\">\n                <p id=\"section-toc.1-1.8.2.1.1\"><a href=\"#section-8.1\" class=\"auto internal xref\">8.1</a>.  <a href=\"#name-http-authentication-scheme\" class=\"internal xref\">HTTP Authentication Scheme</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.8.2.2\">\n                <p id=\"section-toc.1-1.8.2.2.1\"><a href=\"#section-8.2\" class=\"auto internal xref\">8.2</a>.  <a href=\"#name-well-known-uri\" class=\"internal xref\">Well-Known URI</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.8.2.3\">\n                <p id=\"section-toc.1-1.8.2.3.1\"><a href=\"#section-8.3\" class=\"auto internal xref\">8.3</a>.  <a href=\"#name-media-type\" class=\"internal xref\">Media Type</a></p>\n</li>\n            </ul>\n</li>\n          <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.9\">\n            <p id=\"section-toc.1-1.9.1\"><a href=\"#section-9\" class=\"auto internal xref\">9</a>.  <a href=\"#name-references\" class=\"internal xref\">References</a></p>\n<ul class=\"compact toc ulBare ulEmpty\">\n<li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.9.2.1\">\n                <p id=\"section-toc.1-1.9.2.1.1\"><a href=\"#section-9.1\" class=\"auto internal xref\">9.1</a>.  <a href=\"#name-normative-references\" class=\"internal xref\">Normative References</a></p>\n</li>\n              <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.9.2.2\">\n                <p id=\"section-toc.1-1.9.2.2.1\"><a href=\"#section-9.2\" class=\"auto internal xref\">9.2</a>.  <a href=\"#name-informative-references\" class=\"internal xref\">Informative References</a></p>\n</li>\n            </ul>\n</li>\n          <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.10\">\n            <p id=\"section-toc.1-1.10.1\"><a href=\"#appendix-A\" class=\"auto internal xref\"></a><a href=\"#name-acknowledgements\" class=\"internal xref\">Acknowledgements</a></p>\n</li>\n          <li class=\"compact toc ulBare ulEmpty\" id=\"section-toc.1-1.11\">\n            <p id=\"section-toc.1-1.11.1\"><a href=\"#appendix-B\" class=\"auto internal xref\"></a><a href=\"#name-authors-address\" class=\"internal xref\">Author's Address</a></p>\n</li>\n        </ul>\n</nav>\n</section>\n</div>\n<div id=\"introduction\">\n<section id=\"section-1\">\n      <h2 id=\"name-introduction\">\n<a href=\"#section-1\" class=\"section-number selfRef\">1. </a><a href=\"#name-introduction\" class=\"section-name selfRef\">Introduction</a>\n      </h2>\n<p id=\"section-1-1\">AI agent systems are increasingly deployed in multi-agent\n      architectures where an orchestrator decomposes tasks and delegates\n      subtasks to specialist agents. The protocols enabling this\n      communication, notably the Model Context Protocol (MCP) and the\n      Agent-to-Agent Protocol (A2A), solve the connectivity problem but\n      do not solve the identity problem.<a href=\"#section-1-1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-1-2\">MCP provides no built-in authentication layer. A2A uses\n      self-declared identities with no attestation mechanism. OAuth 2.1,\n      recently added to MCP, covers single-hop client-to-server\n      authentication but does not address multi-hop delegation chains.\n      When an orchestrator delegates to a specialist that calls a tool,\n      the delegation chain that led to the tool invocation is lost.<a href=\"#section-1-2\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-1-3\">AIP fills this gap by introducing Invocation-Bound Capability\n      Tokens (IBCTs) that answer four questions for every agent action:\n      who authorized this action, through which delegation chain, with\n      what constraints at each hop, and what was the outcome.<a href=\"#section-1-3\" class=\"pilcrow\">¶</a></p>\n<div id=\"requirements-language\">\n<section id=\"section-1.1\">\n        <h3 id=\"name-requirements-language\">\n<a href=\"#section-1.1\" class=\"section-number selfRef\">1.1. </a><a href=\"#name-requirements-language\" class=\"section-name selfRef\">Requirements Language</a>\n        </h3>\n<p id=\"section-1.1-1\">The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\",\n        \"SHALL NOT\", \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"NOT\n        RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this document are to be\n        interpreted as described in BCP 14 <span>[<a href=\"#RFC2119\" class=\"cite xref\">RFC2119</a>]</span>\n          <span>[<a href=\"#RFC8174\" class=\"cite xref\">RFC8174</a>]</span> when, and only when, they appear in\n        all capitals, as shown here.<a href=\"#section-1.1-1\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n</section>\n</div>\n<div id=\"identity-scheme\">\n<section id=\"section-2\">\n      <h2 id=\"name-identity-scheme\">\n<a href=\"#section-2\" class=\"section-number selfRef\">2. </a><a href=\"#name-identity-scheme\" class=\"section-name selfRef\">Identity Scheme</a>\n      </h2>\n<p id=\"section-2-1\">AIP defines two identifier schemes for agent identity:<a href=\"#section-2-1\" class=\"pilcrow\">¶</a></p>\n<div id=\"dns-based\">\n<section id=\"section-2.1\">\n        <h3 id=\"name-dns-based-identifiers\">\n<a href=\"#section-2.1\" class=\"section-number selfRef\">2.1. </a><a href=\"#name-dns-based-identifiers\" class=\"section-name selfRef\">DNS-Based Identifiers</a>\n        </h3>\n<p id=\"section-2.1-1\">DNS-based identifiers follow the format:<a href=\"#section-2.1-1\" class=\"pilcrow\">¶</a></p>\n<div class=\"alignLeft art-text artwork\" id=\"section-2.1-2\">\n<pre>\naip:web:&lt;domain&gt;/&lt;path&gt;\n</pre><a href=\"#section-2.1-2\" class=\"pilcrow\">¶</a>\n</div>\n<p id=\"section-2.1-3\">Example: aip:web:example.com/agents/research-analyst<a href=\"#section-2.1-3\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-2.1-4\">DNS-based identifiers are suitable for long-lived agents with\n        stable domain ownership. Identity documents are resolved via HTTPS\n        at a well-known path.<a href=\"#section-2.1-4\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"self-certifying\">\n<section id=\"section-2.2\">\n        <h3 id=\"name-self-certifying-identifiers\">\n<a href=\"#section-2.2\" class=\"section-number selfRef\">2.2. </a><a href=\"#name-self-certifying-identifiers\" class=\"section-name selfRef\">Self-Certifying Identifiers</a>\n        </h3>\n<div class=\"alignLeft art-text artwork\" id=\"section-2.2-1\">\n<pre>\naip:key:ed25519:&lt;multibase-encoded-public-key&gt;\n</pre><a href=\"#section-2.2-1\" class=\"pilcrow\">¶</a>\n</div>\n<p id=\"section-2.2-2\">Self-certifying identifiers derive identity from the public key\n        itself. They are suitable for ephemeral agents that do not require\n        DNS infrastructure. The identifier is deterministically computed\n        from the Ed25519 public key using multibase encoding.<a href=\"#section-2.2-2\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"identity-document\">\n<section id=\"section-2.3\">\n        <h3 id=\"name-identity-document\">\n<a href=\"#section-2.3\" class=\"section-number selfRef\">2.3. </a><a href=\"#name-identity-document\" class=\"section-name selfRef\">Identity Document</a>\n        </h3>\n<p id=\"section-2.3-1\">Each agent with a DNS-based identifier MUST publish an identity\n        document at:<a href=\"#section-2.3-1\" class=\"pilcrow\">¶</a></p>\n<div class=\"alignLeft art-text artwork\" id=\"section-2.3-2\">\n<pre>\nhttps://&lt;domain&gt;/.well-known/aip/&lt;path&gt;.json\n</pre><a href=\"#section-2.3-2\" class=\"pilcrow\">¶</a>\n</div>\n<p id=\"section-2.3-3\">The identity document is a JSON object containing:<a href=\"#section-2.3-3\" class=\"pilcrow\">¶</a></p>\n<ul class=\"normal\">\n<li class=\"normal\" id=\"section-2.3-4.1\">\n            <code>aip</code>: Protocol version (MUST be \"1.0\")<a href=\"#section-2.3-4.1\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-2.3-4.2\">\n            <code>id</code>: The agent's AIP identifier<a href=\"#section-2.3-4.2\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-2.3-4.3\">\n            <code>public_keys</code>: Array of public key objects with validity windows<a href=\"#section-2.3-4.3\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-2.3-4.4\">\n            <code>name</code>: Human-readable agent name<a href=\"#section-2.3-4.4\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-2.3-4.5\">\n            <code>delegation</code>: Delegation preferences<a href=\"#section-2.3-4.5\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-2.3-4.6\">\n            <code>protocols</code>: Supported protocol bindings<a href=\"#section-2.3-4.6\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-2.3-4.7\">\n            <code>document_signature</code>: Ed25519 signature over the canonicalized document<a href=\"#section-2.3-4.7\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-2.3-4.8\">\n            <code>expires</code>: Document expiration timestamp<a href=\"#section-2.3-4.8\" class=\"pilcrow\">¶</a>\n</li>\n        </ul>\n<p id=\"section-2.3-5\">The document MUST be self-signed. Verification uses\n        JSON Canonicalization Scheme (JCS) <span>[<a href=\"#RFC8785\" class=\"cite xref\">RFC8785</a>]</span>:\n        remove the document_signature\n        field, canonicalize the remaining JSON, and verify the Ed25519\n        signature against a currently-valid public key.<a href=\"#section-2.3-5\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n</section>\n</div>\n<div id=\"token-formats\">\n<section id=\"section-3\">\n      <h2 id=\"name-token-formats\">\n<a href=\"#section-3\" class=\"section-number selfRef\">3. </a><a href=\"#name-token-formats\" class=\"section-name selfRef\">Token Formats</a>\n      </h2>\n<p id=\"section-3-1\">AIP defines two token modes that share a common identity scheme\n      but differ in delegation capability.<a href=\"#section-3-1\" class=\"pilcrow\">¶</a></p>\n<div id=\"compact-mode\">\n<section id=\"section-3.1\">\n        <h3 id=\"name-compact-mode-jwt\">\n<a href=\"#section-3.1\" class=\"section-number selfRef\">3.1. </a><a href=\"#name-compact-mode-jwt\" class=\"section-name selfRef\">Compact Mode (JWT)</a>\n        </h3>\n<p id=\"section-3.1-1\">Compact mode tokens are JSON Web Tokens <span>[<a href=\"#RFC7519\" class=\"cite xref\">RFC7519</a>]</span>\n        signed with Ed25519 (EdDSA). They support single-hop interactions\n        only.<a href=\"#section-3.1-1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-3.1-2\">Header:<a href=\"#section-3.1-2\" class=\"pilcrow\">¶</a></p>\n<div class=\"alignLeft art-text artwork\" id=\"section-3.1-3\">\n<pre>\n{\"alg\": \"EdDSA\", \"typ\": \"aip+jwt\"}\n</pre><a href=\"#section-3.1-3\" class=\"pilcrow\">¶</a>\n</div>\n<p id=\"section-3.1-4\">Claims:<a href=\"#section-3.1-4\" class=\"pilcrow\">¶</a></p>\n<ul class=\"normal\">\n<li class=\"normal\" id=\"section-3.1-5.1\">\n            <code>iss</code>: Issuer AIP identifier (REQUIRED)<a href=\"#section-3.1-5.1\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-3.1-5.2\">\n            <code>sub</code>: Subject/holder AIP identifier (REQUIRED)<a href=\"#section-3.1-5.2\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-3.1-5.3\">\n            <code>scope</code>: Array of authorized capabilities (REQUIRED)<a href=\"#section-3.1-5.3\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-3.1-5.4\">\n            <code>budget_usd</code>: Authorization budget ceiling in USD (REQUIRED)<a href=\"#section-3.1-5.4\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-3.1-5.5\">\n            <code>max_depth</code>: Maximum delegation depth, 0 for no further delegation (REQUIRED)<a href=\"#section-3.1-5.5\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-3.1-5.6\">\n            <code>iat</code>: Issued-at timestamp (REQUIRED)<a href=\"#section-3.1-5.6\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-3.1-5.7\">\n            <code>exp</code>: Expiration timestamp (REQUIRED)<a href=\"#section-3.1-5.7\" class=\"pilcrow\">¶</a>\n</li>\n        </ul>\n<p id=\"section-3.1-6\">Token lifetime SHOULD be less than one hour. Both iss and sub\n        MUST be valid AIP identifiers.<a href=\"#section-3.1-6\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"chained-mode\">\n<section id=\"section-3.2\">\n        <h3 id=\"name-chained-mode-biscuit\">\n<a href=\"#section-3.2\" class=\"section-number selfRef\">3.2. </a><a href=\"#name-chained-mode-biscuit\" class=\"section-name selfRef\">Chained Mode (Biscuit)</a>\n        </h3>\n<p id=\"section-3.2-1\">Chained mode tokens use Biscuit <span>[<a href=\"#BISCUIT\" class=\"cite xref\">BISCUIT</a>]</span>\n        tokens with append-only blocks and Datalog policy evaluation. They support multi-hop delegation\n        with cryptographic scope attenuation.<a href=\"#section-3.2-1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-3.2-2\">A chained token consists of ordered blocks:<a href=\"#section-3.2-2\" class=\"pilcrow\">¶</a></p>\n<ul class=\"normal\">\n<li class=\"normal\" id=\"section-3.2-3.1\">Block 0 (Authority): Root identity, initial capabilities,\n          budget, max_depth, expiration. Signed by the root authority.<a href=\"#section-3.2-3.1\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-3.2-3.2\">Blocks 1..N-1 (Delegation): Each block narrows scope. Contains\n          delegator, delegate, attenuated capabilities (as Biscuit right facts),\n          attenuated budget, and a non-empty context field. Signed by the\n          delegator.<a href=\"#section-3.2-3.2\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-3.2-3.3\">Block N (Completion, optional): Execution outcome. Contains\n          status, result_hash (SHA-256), verification_status, and optional\n          resource usage metrics. Signed by the executing agent.<a href=\"#section-3.2-3.3\" class=\"pilcrow\">¶</a>\n</li>\n        </ul>\n</section>\n</div>\n<div id=\"scope-attenuation\">\n<section id=\"section-3.3\">\n        <h3 id=\"name-scope-attenuation\">\n<a href=\"#section-3.3\" class=\"section-number selfRef\">3.3. </a><a href=\"#name-scope-attenuation\" class=\"section-name selfRef\">Scope Attenuation</a>\n        </h3>\n<p id=\"section-3.3-1\">Scope attenuation is a fundamental security property of AIP. At\n        each delegation step, scope can only narrow or remain equal, never\n        widen. This applies across four dimensions:<a href=\"#section-3.3-1\" class=\"pilcrow\">¶</a></p>\n<ul class=\"normal\">\n<li class=\"normal\" id=\"section-3.3-2.1\">Tools: Child scope MUST be a subset of parent scope<a href=\"#section-3.3-2.1\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-3.3-2.2\">Budget: Child budget MUST be less than or equal to parent budget<a href=\"#section-3.3-2.2\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-3.3-2.3\">Domains: Child domains MUST be a subset of parent domains<a href=\"#section-3.3-2.3\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-3.3-2.4\">Time: Child expiration MUST be less than or equal to parent expiration<a href=\"#section-3.3-2.4\" class=\"pilcrow\">¶</a>\n</li>\n        </ul>\n<p id=\"section-3.3-3\">Verifiers MUST check attenuation at every hop in the delegation\n        chain. A wildcard (*) in the parent permits any specific value in\n        the child, but a specific value in the parent MUST NOT widen to a\n        wildcard in the child.<a href=\"#section-3.3-3\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"policy-profiles\">\n<section id=\"section-3.4\">\n        <h3 id=\"name-policy-profiles\">\n<a href=\"#section-3.4\" class=\"section-number selfRef\">3.4. </a><a href=\"#name-policy-profiles\" class=\"section-name selfRef\">Policy Profiles</a>\n        </h3>\n<p id=\"section-3.4-1\">Chained mode tokens support three policy profiles of increasing\n        expressiveness:<a href=\"#section-3.4-1\" class=\"pilcrow\">¶</a></p>\n<ul class=\"normal\">\n<li class=\"normal\" id=\"section-3.4-2.1\">Simple: Templated rules requiring no Datalog knowledge. The\n          library generates canonical Datalog for tool allowlists, budget\n          ceilings, delegation depth, and time expiry.<a href=\"#section-3.4-2.1\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-3.4-2.2\">Standard: Curated Datalog subset without recursion and with\n          bounded evaluation.<a href=\"#section-3.4-2.2\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-3.4-2.3\">Advanced: Full Datalog with a maximum 1000 iteration limit.\n          Opt-in only.<a href=\"#section-3.4-2.3\" class=\"pilcrow\">¶</a>\n</li>\n        </ul>\n</section>\n</div>\n<div id=\"budget-semantics\">\n<section id=\"section-3.5\">\n        <h3 id=\"name-budget-semantics\">\n<a href=\"#section-3.5\" class=\"section-number selfRef\">3.5. </a><a href=\"#name-budget-semantics\" class=\"section-name selfRef\">Budget Semantics</a>\n        </h3>\n<p id=\"section-3.5-1\">Budget values in AIP tokens represent per-token authorization\n        ceilings, NOT running balances. A delegator asserts \"I authorize up\n        to $X for this task\" at delegation time. The verifier checks that\n        the budget is non-negative but does NOT track cumulative spending.\n        Aggregate budget enforcement is the responsibility of the\n        orchestration platform at runtime. Completion blocks record actual\n        cost_usd for audit purposes.<a href=\"#section-3.5-1\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n</section>\n</div>\n<div id=\"protocol-bindings\">\n<section id=\"section-4\">\n      <h2 id=\"name-protocol-bindings\">\n<a href=\"#section-4\" class=\"section-number selfRef\">4. </a><a href=\"#name-protocol-bindings\" class=\"section-name selfRef\">Protocol Bindings</a>\n      </h2>\n<div id=\"mcp-binding\">\n<section id=\"section-4.1\">\n        <h3 id=\"name-mcp-binding\">\n<a href=\"#section-4.1\" class=\"section-number selfRef\">4.1. </a><a href=\"#name-mcp-binding\" class=\"section-name selfRef\">MCP Binding</a>\n        </h3>\n<p id=\"section-4.1-1\">AIP tokens are transported in MCP via the X-AIP-Token HTTP header:<a href=\"#section-4.1-1\" class=\"pilcrow\">¶</a></p>\n<div class=\"alignLeft art-text artwork\" id=\"section-4.1-2\">\n<pre>\nX-AIP-Token: &lt;compact-or-chained-token&gt;\n</pre><a href=\"#section-4.1-2\" class=\"pilcrow\">¶</a>\n</div>\n<p id=\"section-4.1-3\">For tokens exceeding 4KB, token-by-reference is supported:<a href=\"#section-4.1-3\" class=\"pilcrow\">¶</a></p>\n<div class=\"alignLeft art-text artwork\" id=\"section-4.1-4\">\n<pre>\nX-AIP-Token-Ref: https://issuer/.well-known/aip/tokens/&lt;id&gt;\n</pre><a href=\"#section-4.1-4\" class=\"pilcrow\">¶</a>\n</div>\n<p id=\"section-4.1-5\">MCP servers verify tokens in five steps: (1) extract token,\n        (2) verify signatures against issuer identity document, (3) check\n        requested tool against token scope, (4) validate chain constraints\n        for chained tokens, (5) inject verified identity into request\n        context.<a href=\"#section-4.1-5\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-4.1-6\">Nine error codes are defined with appropriate HTTP status\n        mappings: 401 for authentication failures (token_missing,\n        token_malformed, signature_invalid, identity_unresolvable,\n        token_expired, key_revoked) and 403 for authorization failures\n        (scope_insufficient, budget_exceeded, depth_exceeded).<a href=\"#section-4.1-6\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-4.1-7\">Servers declare AIP requirements via the require_aip field\n        in their identity document's protocols.mcp configuration.<a href=\"#section-4.1-7\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"a2a-binding\">\n<section id=\"section-4.2\">\n        <h3 id=\"name-a2a-binding\">\n<a href=\"#section-4.2\" class=\"section-number selfRef\">4.2. </a><a href=\"#name-a2a-binding\" class=\"section-name selfRef\">A2A Binding</a>\n        </h3>\n<p id=\"section-4.2-1\">In A2A interactions, AIP tokens are transported in the\n        metadata.aip_token field of task submissions. Agent cards are\n        extended with an aip_identity object containing the agent's AIP\n        identifier and document URL.<a href=\"#section-4.2-1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-4.2-2\">The A2A verification flow adds a sixth step: the calling agent\n        appends a delegation block with attenuated scope before sending\n        the task, and the receiving agent verifies that the final\n        delegation block delegates to its own AIP identifier.<a href=\"#section-4.2-2\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"http-binding\">\n<section id=\"section-4.3\">\n        <h3 id=\"name-http-binding\">\n<a href=\"#section-4.3\" class=\"section-number selfRef\">4.3. </a><a href=\"#name-http-binding\" class=\"section-name selfRef\">HTTP Binding</a>\n        </h3>\n<p id=\"section-4.3-1\">For generic HTTP APIs not using MCP or A2A, tokens are\n        transported via the Authorization header with the AIP scheme:<a href=\"#section-4.3-1\" class=\"pilcrow\">¶</a></p>\n<div class=\"alignLeft art-text artwork\" id=\"section-4.3-2\">\n<pre>\nAuthorization: AIP &lt;base64url-encoded-token&gt;\n</pre><a href=\"#section-4.3-2\" class=\"pilcrow\">¶</a>\n</div>\n<p id=\"section-4.3-3\">Token-by-reference uses the X-AIP-Token-Ref header with a\n        5-second fetch timeout and SSRF protection (reject reference URLs\n        outside expected domain patterns).<a href=\"#section-4.3-3\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n</section>\n</div>\n<div id=\"delegation-lifecycle\">\n<section id=\"section-5\">\n      <h2 id=\"name-delegation-lifecycle\">\n<a href=\"#section-5\" class=\"section-number selfRef\">5. </a><a href=\"#name-delegation-lifecycle\" class=\"section-name selfRef\">Delegation Lifecycle</a>\n      </h2>\n<div id=\"bounded-depth\">\n<section id=\"section-5.1\">\n        <h3 id=\"name-bounded-depth\">\n<a href=\"#section-5.1\" class=\"section-number selfRef\">5.1. </a><a href=\"#name-bounded-depth\" class=\"section-name selfRef\">Bounded Depth</a>\n        </h3>\n<p id=\"section-5.1-1\">Block 0 declares max_depth (default: 3). Each delegation block\n        increments effective depth by 1. If current depth equals max_depth,\n        further delegation is forbidden. In compact mode, max_depth of 0\n        means the holder MUST NOT delegate further.<a href=\"#section-5.1-1\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"delegation-context\">\n<section id=\"section-5.2\">\n        <h3 id=\"name-delegation-context\">\n<a href=\"#section-5.2\" class=\"section-number selfRef\">5.2. </a><a href=\"#name-delegation-context\" class=\"section-name selfRef\">Delegation Context</a>\n        </h3>\n<p id=\"section-5.2-1\">Each delegation block MUST include a non-empty context field\n        containing a human-readable description of the delegation purpose.\n        Verifiers MUST reject tokens with missing or empty context. This\n        requirement ensures audit trail integrity.<a href=\"#section-5.2-1\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"ephemeral-agents\">\n<section id=\"section-5.3\">\n        <h3 id=\"name-ephemeral-agent-grants\">\n<a href=\"#section-5.3\" class=\"section-number selfRef\">5.3. </a><a href=\"#name-ephemeral-agent-grants\" class=\"section-name selfRef\">Ephemeral Agent Grants</a>\n        </h3>\n<p id=\"section-5.3-1\">For short-lived sub-agents, a parent agent generates an Ed25519\n        keypair, creates an aip:key: identifier, and appends a delegation\n        block with scoped capabilities and a short TTL (5 minutes\n        RECOMMENDED). The parent's identity document MAY set\n        delegation.allow_ephemeral_grants to false to prevent this.<a href=\"#section-5.3-1\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"key-rotation\">\n<section id=\"section-5.4\">\n        <h3 id=\"name-key-rotation\">\n<a href=\"#section-5.4\" class=\"section-number selfRef\">5.4. </a><a href=\"#name-key-rotation\" class=\"section-name selfRef\">Key Rotation</a>\n        </h3>\n<p id=\"section-5.4-1\">DNS-based identifiers support zero-downtime key rotation through\n        overlapping validity windows on public keys. A new key is published\n        with a future valid_from timestamp. Both keys are valid during the\n        overlap period. Recommended rotation period is 90 days. Cache TTL\n        MUST NOT exceed 5 minutes.<a href=\"#section-5.4-1\" class=\"pilcrow\">¶</a></p>\n<p id=\"section-5.4-2\">Self-certifying identifiers cannot rotate keys; key rotation\n        requires identity replacement, which is acceptable for ephemeral\n        agents.<a href=\"#section-5.4-2\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"revocation\">\n<section id=\"section-5.5\">\n        <h3 id=\"name-revocation\">\n<a href=\"#section-5.5\" class=\"section-number selfRef\">5.5. </a><a href=\"#name-revocation\" class=\"section-name selfRef\">Revocation</a>\n        </h3>\n<p id=\"section-5.5-1\">AIP prefers short-lived tokens over revocation infrastructure.\n        Compact mode tokens SHOULD have a TTL under 1 hour, making\n        revocation generally unnecessary. For chained mode, key revocation\n        (removing a key from the identity document) invalidates all tokens\n        signed by that key. Token-specific revocation via Certificate\n        Revocation Lists is deferred to v2.<a href=\"#section-5.5-1\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n</section>\n</div>\n<div id=\"provenance\">\n<section id=\"section-6\">\n      <h2 id=\"name-provenance-and-audit\">\n<a href=\"#section-6\" class=\"section-number selfRef\">6. </a><a href=\"#name-provenance-and-audit\" class=\"section-name selfRef\">Provenance and Audit</a>\n      </h2>\n<div id=\"completion-blocks\">\n<section id=\"section-6.1\">\n        <h3 id=\"name-completion-blocks\">\n<a href=\"#section-6.1\" class=\"section-number selfRef\">6.1. </a><a href=\"#name-completion-blocks\" class=\"section-name selfRef\">Completion Blocks</a>\n        </h3>\n<p id=\"section-6.1-1\">A completion block is the final block in a chained token,\n        signed by the executing agent. It contains:<a href=\"#section-6.1-1\" class=\"pilcrow\">¶</a></p>\n<ul class=\"normal\">\n<li class=\"normal\" id=\"section-6.1-2.1\">\n            <code>status</code>: REQUIRED. One of \"completed\", \"failed\", or \"partial\".<a href=\"#section-6.1-2.1\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-6.1-2.2\">\n            <code>result_hash</code>: REQUIRED. SHA-256 hash of the output in format \"sha256:&lt;hex&gt;\".<a href=\"#section-6.1-2.2\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-6.1-2.3\">\n            <code>verification_status</code>: REQUIRED. One of \"self_reported\", \"tool_verified\", \"peer_verified\", or \"human_verified\".<a href=\"#section-6.1-2.3\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-6.1-2.4\">\n            <code>tokens_used</code>: OPTIONAL. LLM tokens consumed.<a href=\"#section-6.1-2.4\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-6.1-2.5\">\n            <code>cost_usd</code>: OPTIONAL. Actual cost incurred.<a href=\"#section-6.1-2.5\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-6.1-2.6\">\n            <code>duration_ms</code>: OPTIONAL. Wall-clock execution time.<a href=\"#section-6.1-2.6\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-6.1-2.7\">\n            <code>ldp_provenance_id</code>: OPTIONAL. Back-link to LDP provenance record.<a href=\"#section-6.1-2.7\" class=\"pilcrow\">¶</a>\n</li>\n        </ul>\n</section>\n</div>\n<div id=\"trust-levels\">\n<section id=\"section-6.2\">\n        <h3 id=\"name-verification-trust-levels\">\n<a href=\"#section-6.2\" class=\"section-number selfRef\">6.2. </a><a href=\"#name-verification-trust-levels\" class=\"section-name selfRef\">Verification Trust Levels</a>\n        </h3>\n<p id=\"section-6.2-1\">AIP defines three escalating trust levels for completion data:<a href=\"#section-6.2-1\" class=\"pilcrow\">¶</a></p>\n<ul class=\"normal\">\n<li class=\"normal\" id=\"section-6.2-2.1\">Level 1 (Self-Reported): Agent reports its own results with\n          no independent verification. Default for trusted environments.<a href=\"#section-6.2-2.1\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-6.2-2.2\">Level 2 (Counter-Signed): Delegator independently verifies\n          the result and appends a verification block.<a href=\"#section-6.2-2.2\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-6.2-2.3\">Level 3 (Third-Party Attested): External verifier (LDP peer,\n          human reviewer, or audit service) signs an attestation block.<a href=\"#section-6.2-2.3\" class=\"pilcrow\">¶</a>\n</li>\n        </ul>\n</section>\n</div>\n<div id=\"audit-tokens\">\n<section id=\"section-6.3\">\n        <h3 id=\"name-audit-tokens\">\n<a href=\"#section-6.3\" class=\"section-number selfRef\">6.3. </a><a href=\"#name-audit-tokens\" class=\"section-name selfRef\">Audit Tokens</a>\n        </h3>\n<p id=\"section-6.3-1\">A completed chained token with a completion block appended is\n        a self-contained audit artifact. It answers five questions without\n        requiring an external database: who authorized (Block 0), through\n        whom (delegation blocks), what constraints (Datalog policies),\n        what happened (completion block), and whether it was verified\n        (verification_status). Audit tokens are tamper-evident,\n        non-repudiable, and verifiable offline using public keys from\n        identity documents.<a href=\"#section-6.3-1\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n</section>\n</div>\n<div id=\"security-considerations\">\n<section id=\"section-7\">\n      <h2 id=\"name-security-considerations\">\n<a href=\"#section-7\" class=\"section-number selfRef\">7. </a><a href=\"#name-security-considerations\" class=\"section-name selfRef\">Security Considerations</a>\n      </h2>\n<p id=\"section-7-1\">This section addresses the security properties and threat model\n      for AIP.<a href=\"#section-7-1\" class=\"pilcrow\">¶</a></p>\n<div id=\"threat-model\">\n<section id=\"section-7.1\">\n        <h3 id=\"name-threat-model\">\n<a href=\"#section-7.1\" class=\"section-number selfRef\">7.1. </a><a href=\"#name-threat-model\" class=\"section-name selfRef\">Threat Model</a>\n        </h3>\n<p id=\"section-7.1-1\">AIP is designed to resist the following attack categories:<a href=\"#section-7.1-1\" class=\"pilcrow\">¶</a></p>\n<ul class=\"normal\">\n<li class=\"normal\" id=\"section-7.1-2.1\">Scope widening: An agent attempts to exceed its delegated\n          capabilities. Prevented by cryptographic scope attenuation\n          verification at each hop.<a href=\"#section-7.1-2.1\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-7.1-2.2\">Delegation depth violation: An agent attempts to delegate\n          beyond the maximum permitted depth. Prevented by depth tracking\n          in each delegation block.<a href=\"#section-7.1-2.2\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-7.1-2.3\">Token replay: A captured token is reused. Mitigated by\n          short TTLs (under 1 hour recommended for compact mode).<a href=\"#section-7.1-2.3\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-7.1-2.4\">Token forgery: An attacker constructs a token without\n          holding the private key. Prevented by Ed25519 signature\n          verification.<a href=\"#section-7.1-2.4\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-7.1-2.5\">Identity spoofing: An agent claims a false identity.\n          Prevented by identity document resolution and signature\n          verification.<a href=\"#section-7.1-2.5\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-7.1-2.6\">Audit evasion: An agent delegates with empty context to\n          avoid audit trails. Prevented by mandatory non-empty context\n          on all delegation blocks.<a href=\"#section-7.1-2.6\" class=\"pilcrow\">¶</a>\n</li>\n        </ul>\n</section>\n</div>\n<div id=\"adversarial-evaluation\">\n<section id=\"section-7.2\">\n        <h3 id=\"name-adversarial-evaluation\">\n<a href=\"#section-7.2\" class=\"section-number selfRef\">7.2. </a><a href=\"#name-adversarial-evaluation\" class=\"section-name selfRef\">Adversarial Evaluation</a>\n        </h3>\n<p id=\"section-7.2-1\">Experimental evaluation across 600 adversarial attempts in six\n        attack categories showed a 100% rejection rate. Two attack\n        categories (delegation depth violation and audit evasion through\n        empty context) are uniquely addressed by AIP's chained token\n        structure and cannot be detected by standard JWT deployments.\n        Details are reported in the companion paper\n        <span>[<a href=\"#AIP-PAPER\" class=\"cite xref\">AIP-PAPER</a>]</span>.<a href=\"#section-7.2-1\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"crypto-agility\">\n<section id=\"section-7.3\">\n        <h3 id=\"name-cryptographic-agility\">\n<a href=\"#section-7.3\" class=\"section-number selfRef\">7.3. </a><a href=\"#name-cryptographic-agility\" class=\"section-name selfRef\">Cryptographic Agility</a>\n        </h3>\n<p id=\"section-7.3-1\">AIP v1 mandates Ed25519 exclusively. No algorithm negotiation\n        is supported. This is a deliberate design choice to eliminate\n        downgrade attacks and reduce implementation complexity. Future\n        versions MAY introduce additional algorithms through the protocol\n        version field.<a href=\"#section-7.3-1\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"transport-security\">\n<section id=\"section-7.4\">\n        <h3 id=\"name-transport-security\">\n<a href=\"#section-7.4\" class=\"section-number selfRef\">7.4. </a><a href=\"#name-transport-security\" class=\"section-name selfRef\">Transport Security</a>\n        </h3>\n<p id=\"section-7.4-1\">Identity document resolution and token-by-reference fetching\n        MUST use HTTPS. Implementations SHOULD enforce TLS 1.3 or later.\n        Token-by-reference URLs MUST be validated against expected domain\n        patterns to prevent SSRF attacks. Fetch timeout SHOULD be 5\n        seconds.<a href=\"#section-7.4-1\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n</section>\n</div>\n<div id=\"iana-considerations\">\n<section id=\"section-8\">\n      <h2 id=\"name-iana-considerations\">\n<a href=\"#section-8\" class=\"section-number selfRef\">8. </a><a href=\"#name-iana-considerations\" class=\"section-name selfRef\">IANA Considerations</a>\n      </h2>\n<p id=\"section-8-1\">This document requests the following IANA registrations:<a href=\"#section-8-1\" class=\"pilcrow\">¶</a></p>\n<div id=\"iana-auth-scheme\">\n<section id=\"section-8.1\">\n        <h3 id=\"name-http-authentication-scheme\">\n<a href=\"#section-8.1\" class=\"section-number selfRef\">8.1. </a><a href=\"#name-http-authentication-scheme\" class=\"section-name selfRef\">HTTP Authentication Scheme</a>\n        </h3>\n<p id=\"section-8.1-1\">Registration of the \"AIP\" HTTP authentication scheme in the\n        \"HTTP Authentication Scheme Registry\":<a href=\"#section-8.1-1\" class=\"pilcrow\">¶</a></p>\n<ul class=\"normal\">\n<li class=\"normal\" id=\"section-8.1-2.1\">Authentication Scheme Name: AIP<a href=\"#section-8.1-2.1\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-8.1-2.2\">Reference: This document, <a href=\"#http-binding\" class=\"auto internal xref\">Section 4.3</a><a href=\"#section-8.1-2.2\" class=\"pilcrow\">¶</a>\n</li>\n        </ul>\n</section>\n</div>\n<div id=\"iana-well-known\">\n<section id=\"section-8.2\">\n        <h3 id=\"name-well-known-uri\">\n<a href=\"#section-8.2\" class=\"section-number selfRef\">8.2. </a><a href=\"#name-well-known-uri\" class=\"section-name selfRef\">Well-Known URI</a>\n        </h3>\n<p id=\"section-8.2-1\">Registration of the \"aip\" well-known URI suffix in the\n        \"Well-Known URIs\" registry:<a href=\"#section-8.2-1\" class=\"pilcrow\">¶</a></p>\n<ul class=\"normal\">\n<li class=\"normal\" id=\"section-8.2-2.1\">URI Suffix: aip<a href=\"#section-8.2-2.1\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-8.2-2.2\">Change Controller: IETF<a href=\"#section-8.2-2.2\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-8.2-2.3\">Reference: This document, <a href=\"#identity-document\" class=\"auto internal xref\">Section 2.3</a><a href=\"#section-8.2-2.3\" class=\"pilcrow\">¶</a>\n</li>\n        </ul>\n</section>\n</div>\n<div id=\"iana-media-type\">\n<section id=\"section-8.3\">\n        <h3 id=\"name-media-type\">\n<a href=\"#section-8.3\" class=\"section-number selfRef\">8.3. </a><a href=\"#name-media-type\" class=\"section-name selfRef\">Media Type</a>\n        </h3>\n<p id=\"section-8.3-1\">Registration of the \"aip+jwt\" structured syntax suffix:<a href=\"#section-8.3-1\" class=\"pilcrow\">¶</a></p>\n<ul class=\"normal\">\n<li class=\"normal\" id=\"section-8.3-2.1\">Type name: application<a href=\"#section-8.3-2.1\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-8.3-2.2\">Subtype name: aip+jwt<a href=\"#section-8.3-2.2\" class=\"pilcrow\">¶</a>\n</li>\n          <li class=\"normal\" id=\"section-8.3-2.3\">Reference: This document, <a href=\"#compact-mode\" class=\"auto internal xref\">Section 3.1</a><a href=\"#section-8.3-2.3\" class=\"pilcrow\">¶</a>\n</li>\n        </ul>\n</section>\n</div>\n</section>\n</div>\n<section id=\"section-9\">\n      <h2 id=\"name-references\">\n<a href=\"#section-9\" class=\"section-number selfRef\">9. </a><a href=\"#name-references\" class=\"section-name selfRef\">References</a>\n      </h2>\n<section id=\"section-9.1\">\n        <h3 id=\"name-normative-references\">\n<a href=\"#section-9.1\" class=\"section-number selfRef\">9.1. </a><a href=\"#name-normative-references\" class=\"section-name selfRef\">Normative References</a>\n        </h3>\n<dl class=\"references\">\n<dt id=\"RFC2119\">[RFC2119]</dt>\n        <dd>\n<span class=\"refAuthor\">Bradner, S.</span>, <span class=\"refTitle\">\"Key words for use in RFCs to Indicate Requirement Levels\"</span>, <span class=\"seriesInfo\">BCP 14</span>, <span class=\"seriesInfo\">RFC 2119</span>, <time datetime=\"1997-03\" class=\"refDate\">March 1997</time>, <span>&lt;<a href=\"https://www.rfc-editor.org/info/rfc2119\">https://www.rfc-editor.org/info/rfc2119</a>&gt;</span>. </dd>\n<dd class=\"break\"></dd>\n<dt id=\"RFC7519\">[RFC7519]</dt>\n        <dd>\n<span class=\"refAuthor\">Jones, M.</span>, <span class=\"refAuthor\">Bradley, J.</span>, and <span class=\"refAuthor\">N. Sakimura</span>, <span class=\"refTitle\">\"JSON Web Token (JWT)\"</span>, <span class=\"seriesInfo\">RFC 7519</span>, <time datetime=\"2015-05\" class=\"refDate\">May 2015</time>, <span>&lt;<a href=\"https://www.rfc-editor.org/info/rfc7519\">https://www.rfc-editor.org/info/rfc7519</a>&gt;</span>. </dd>\n<dd class=\"break\"></dd>\n<dt id=\"RFC8174\">[RFC8174]</dt>\n        <dd>\n<span class=\"refAuthor\">Leiba, B.</span>, <span class=\"refTitle\">\"Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words\"</span>, <span class=\"seriesInfo\">BCP 14</span>, <span class=\"seriesInfo\">RFC 8174</span>, <time datetime=\"2017-05\" class=\"refDate\">May 2017</time>, <span>&lt;<a href=\"https://www.rfc-editor.org/info/rfc8174\">https://www.rfc-editor.org/info/rfc8174</a>&gt;</span>. </dd>\n<dd class=\"break\"></dd>\n<dt id=\"RFC8785\">[RFC8785]</dt>\n      <dd>\n<span class=\"refAuthor\">Rundgren, A.</span>, <span class=\"refAuthor\">Jordan, B.</span>, and <span class=\"refAuthor\">S. Erdtman</span>, <span class=\"refTitle\">\"JSON Canonicalization Scheme (JCS)\"</span>, <span class=\"seriesInfo\">RFC 8785</span>, <time datetime=\"2020-06\" class=\"refDate\">June 2020</time>, <span>&lt;<a href=\"https://www.rfc-editor.org/info/rfc8785\">https://www.rfc-editor.org/info/rfc8785</a>&gt;</span>. </dd>\n<dd class=\"break\"></dd>\n</dl>\n</section>\n<section id=\"section-9.2\">\n        <h3 id=\"name-informative-references\">\n<a href=\"#section-9.2\" class=\"section-number selfRef\">9.2. </a><a href=\"#name-informative-references\" class=\"section-name selfRef\">Informative References</a>\n        </h3>\n<dl class=\"references\">\n<dt id=\"BISCUIT\">[BISCUIT]</dt>\n        <dd>\n<span class=\"refAuthor\">Music, G.</span>, <span class=\"refTitle\">\"Biscuit Authorization Token\"</span>, <time datetime=\"2024\" class=\"refDate\">2024</time>, <span>&lt;<a href=\"https://www.biscuitsec.org/\">https://www.biscuitsec.org/</a>&gt;</span>. </dd>\n<dd class=\"break\"></dd>\n<dt id=\"AIP-PAPER\">[AIP-PAPER]</dt>\n      <dd>\n<span class=\"refAuthor\">Prakash, S.</span>, <span class=\"refTitle\">\"AIP: Agent Identity Protocol for Verifiable Delegation Across MCP and A2A\"</span>, <time datetime=\"2026-03-27\" class=\"refDate\">27 March 2026</time>, <span>&lt;<a href=\"https://arxiv.org/abs/2603.24775\">https://arxiv.org/abs/2603.24775</a>&gt;</span>. </dd>\n<dd class=\"break\"></dd>\n</dl>\n</section>\n</section>\n<div id=\"acknowledgements\">\n<section id=\"appendix-A\">\n      <h2 id=\"name-acknowledgements\">\n<a href=\"#name-acknowledgements\" class=\"section-name selfRef\">Acknowledgements</a>\n      </h2>\n<p id=\"appendix-A-1\">The Biscuit authorization token specification influenced the\n      chained mode design. The MCP and A2A protocol teams provided the\n      agent communication infrastructure that AIP extends.<a href=\"#appendix-A-1\" class=\"pilcrow\">¶</a></p>\n</section>\n</div>\n<div id=\"authors-addresses\">\n<section id=\"appendix-B\">\n      <h2 id=\"name-authors-address\">\n<a href=\"#name-authors-address\" class=\"section-name selfRef\">Author's Address</a>\n      </h2>\n<address class=\"vcard\">\n        <div dir=\"auto\" class=\"left\"><span class=\"fn nameRole\">Sunil Prakash</span></div>\n<div dir=\"auto\" class=\"left\"><span class=\"org\">Independent</span></div>\n<div class=\"email\">\n<span>Email:</span>\n<a href=\"mailto:sunil@sunilprakash.com\" class=\"email\">sunil@sunilprakash.com</a>\n</div>\n<div class=\"url\">\n<span>URI:</span>\n<a href=\"https://sunilprakash.com\" class=\"url\">https://sunilprakash.com</a>\n</div>\n</address>\n</section>\n</div>\n<script>const toc = document.getElementById(\"toc\");\ntoc.querySelector(\"h2\").addEventListener(\"click\", e => {\n  toc.classList.toggle(\"active\");\n});\ntoc.querySelector(\"nav\").addEventListener(\"click\", e => {\n  toc.classList.remove(\"active\");\n});\n</script>\n<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML=\"window.__CF$cv$params={r:'a38dedcb7e2febed',t:'MTc4OTAzODAyNQ=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);\";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script></body>\n</html>\n","snapshot_chars":84677,"live_check":"matches"},{"url":"https://datatracker.ietf.org/doc/draft-prakash-aip/","committed_hash":"sha256:c08aef5111735d400385bda735e41156de92b5ec21189235942eca2c6f318408","committed_hash_short":"sha256:c08aef51…6f318408","mime_type":"text/html","committed_at":"2026-09-10T11:00:25.873955+00:00","content_snapshot":"\n<!DOCTYPE html>\n\n\n\n\n\n\n<html data-bs-theme=\"auto\" lang=\"en\" prefix=\"og: http://ogp.me/ns# article: http://ogp.me/ns/article#\">\n    <head>\n        \n        <meta charset=\"utf-8\">\n        <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n        <title>\n            \n    \n        draft-prakash-aip-01 - Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems\n    \n\n        </title>\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n        <meta name=\"traceparent\" content=\"\">\n        <link href=\"https://static.ietf.org/fonts/inter/import.css\" rel=\"stylesheet\">\n        <link href=\"https://static.ietf.org/fonts/noto-sans-mono/import.css\" rel=\"stylesheet\">\n        <link rel=\"stylesheet\" href=\"https://static.ietf.org/dt/12.74.0/ietf/css/ietf.css\">\n        <link rel=\"stylesheet\" href=\"https://static.ietf.org/dt/12.74.0/ietf/css/select2.css\">\n        \n        <script src=\"https://static.ietf.org/dt/12.74.0/ietf/js/theme.js\"></script>\n        <style>\n            .inline { display: inline; }\n        </style>\n        \n        \n    \n\n\n\n\n<meta property=\"og:title\" content=\"Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems\">\n<meta property=\"og:url\" content=\"https://datatracker.ietf.org/doc/draft-prakash-aip/\">\n\n\n<link rel=\"canonical\" href=\"https://datatracker.ietf.org/doc/draft-prakash-aip/\">\n\n<meta property=\"og:site_name\" content=\"IETF Datatracker\">\n<meta property=\"og:description\" content=\"This document specifies the Agent Identity Protocol (AIP), a protocol for verifiable, delegable identity for AI agent systems. AIP introduces Invocation-Bound Capability Tokens (IBCTs) that bind identity, authorization, scope constraints, and provenance into a single cryptographic artifact. Two token modes are defined: a compact mode using JSON Web Tokens (JWT) with Ed25519 signatures for single-hop interactions, and a chained mode using Biscuit tokens with append-only blocks and Datalog policy evaluation for multi-hop delegation chains. Protocol bindings are specified for the Model Context Protocol (MCP), Agent-to-Agent Protocol (A2A), and generic HTTP APIs. The protocol addresses authentication gaps in current AI agent infrastructure where a survey of approximately 2,000 MCP servers found all lacked authentication. This revision specifies a normative verification algorithm, defines the canonical policy encoding for chained mode, describes how AIP composes with workload identity systems such as SPIFFE, and maps AIP against the cross- organization delegation requirements enumerated in [I-D.reece-wimse-cross-org-delegation].\">\n<meta property=\"og:type\" content=\"article\">\n\n<meta property=\"article:section\" content=\"Individual Internet-Draft\">\n\n<meta property=\"article:author\" content=\"Sunil Prakash\">\n\n\n\n    <link rel=\"alternate\"\n          type=\"application/atom+xml\"\n          title=\"Document changes\"\n          href=\"/feed/document-changes/draft-prakash-aip/\">\n    <meta name=\"description\"\n          content=\"Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems \">\n\n        <script type=\"module\" crossorigin=\"\" src=\"https://static.ietf.org/dt/12.74.0/assets/embedded-fe6c83cf.js\"></script>\n<link href=\"https://static.ietf.org/dt/12.74.0/assets/create-pinia-singleton-608c2f69.js\" type=\"text/javascript\" crossorigin=\"anonymous\" rel=\"modulepreload\" as=\"script\" />\n<link href=\"https://static.ietf.org/dt/12.74.0/assets/Scrollbar-8f078505.js\" type=\"text/javascript\" crossorigin=\"anonymous\" rel=\"modulepreload\" as=\"script\" />\n        \n\n<link rel=\"apple-touch-icon\"\n      sizes=\"180x180\"\n      href=\"https://static.ietf.org/dt/12.74.0/ietf/images/ietf-logo-nor-180.png\">\n<link rel=\"icon\"\n      sizes=\"32x32\"\n      href=\"https://static.ietf.org/dt/12.74.0/ietf/images/ietf-logo-nor-32.png\">\n<link rel=\"icon\"\n      sizes=\"16x16\"\n      href=\"https://static.ietf.org/dt/12.74.0/ietf/images/ietf-logo-nor-16.png\">\n<link rel=\"manifest\" href=\"/site.webmanifest\">\n<link rel=\"mask-icon\"\n      href=\"https://static.ietf.org/dt/12.74.0/ietf/images/ietf-logo-nor-mask.svg\"\n      color=\"#ffffff\">\n<meta name=\"msapplication-TileColor\"\n      content=\"#ffffff\">\n<meta name=\"theme-color\"\n      content=\"#ffffff\">\n        <script src=\"https://static.ietf.org/dt/12.74.0/ietf/js/ietf.js\"></script>\n        \n    </head>\n    <body  class=\"navbar-offset position-relative\"\n          data-group-menu-data-url=\"/group/groupmenu.json\">\n        \n        <noscript><iframe class=\"status\" title=\"Site status\" src=\"/status/latest\"></iframe></noscript>\n<div class=\"vue-embed\" data-component=\"Status\"></div>\n        <a class=\"visually-hidden visually-hidden-focusable\" href=\"#content\">Skip to main content</a>\n        <nav class=\"navbar navbar-expand-lg fixed-top bg-secondary-subtle\">\n            <div class=\"container-fluid\">\n                <a class=\"navbar-brand\" href=\"/\">\n                    \n\n\n\n<img alt=\"IETF Logo\"\n     class=\"d-lm-none me-2\"\n     \n     \n        \n             src=\"https://static.ietf.org/dt/12.74.0/ietf/images/ietf-logo-nor-white.svg\"\n        \n     \n     >\n\n<img alt=\"IETF Logo\"\n     class=\"d-dm-none me-2\"\n     \n     \n        \n             src=\"https://static.ietf.org/dt/12.74.0/ietf/images/ietf-logo-nor.svg\"\n        \n     \n     >\n                    Datatracker\n                    \n                </a>\n                <div class=\"collapse navbar-collapse\" id=\"navbar-collapse\">\n                    <ul class=\"nav navbar-nav flex-nowrap\">\n                        \n\n\n\n\n<li class=\"nav-item dropdown\">\n    \n        <a href=\"#\"\n           class=\"nav-link dropdown-toggle\"\n           role=\"button\"\n           data-bs-toggle=\"dropdown\"\n           aria-expanded=\"false\">\n            Groups\n        </a>\n        <ul class=\"dropdown-menu mt-n1\">\n        \n    <li class=\"dropdown-header\">By area/parent</li>\n    \n\n\n\n    \n    <li class=\"dropend group-menu group-parent-2010\">\n        <a class=\"dropdown-item dropdown-toggle \"\n           href=\"/wg/#ART\">\n            Apps &amp; Realtime\n        </a>\n    </li>\n\n    \n    <li class=\"dropend group-menu group-parent-1008\">\n        <a class=\"dropdown-item dropdown-toggle \"\n           href=\"/wg/#GEN\">\n            General\n        </a>\n    </li>\n\n    \n    <li class=\"dropend group-menu group-parent-1052\">\n        <a class=\"dropdown-item dropdown-toggle \"\n           href=\"/wg/#INT\">\n            Internet\n        </a>\n    </li>\n\n    \n    <li class=\"dropend group-menu group-parent-1193\">\n        <a class=\"dropdown-item dropdown-toggle \"\n           href=\"/wg/#OPS\">\n            Ops &amp; Management\n        </a>\n    </li>\n\n    \n    <li class=\"dropend group-menu group-parent-1249\">\n        <a class=\"dropdown-item dropdown-toggle \"\n           href=\"/wg/#RTG\">\n            Routing\n        </a>\n    </li>\n\n    \n    <li class=\"dropend group-menu group-parent-1260\">\n        <a class=\"dropdown-item dropdown-toggle \"\n           href=\"/wg/#SEC\">\n            Security\n        </a>\n    </li>\n\n    \n    <li class=\"dropend group-menu group-parent-2412\">\n        <a class=\"dropdown-item dropdown-toggle \"\n           href=\"/wg/#WIT\">\n            Web and Internet Transport\n        </a>\n    </li>\n\n    \n        <li><a class=\"dropdown-item\" href=\"/group/iesg/about/\">IESG</a></li>\n    \n    <li class=\"dropend group-menu group-parent-7\">\n        <a class=\"dropdown-item dropdown-toggle \"\n           href=\"/program/\">\n            IAB\n        </a>\n    </li>\n\n    \n    <li class=\"dropend group-menu group-parent-3\">\n        <a class=\"dropdown-item dropdown-toggle \"\n           href=\"/rg/\">\n            IRTF\n        </a>\n    </li>\n\n    \n    <li class=\"dropend group-menu group-parent-2309\">\n        <a class=\"dropdown-item dropdown-toggle \"\n           href=\"/adm/\">\n            IETF LLC\n        </a>\n    </li>\n\n    \n    <li class=\"dropend group-menu group-parent-1876\">\n        <a class=\"dropdown-item dropdown-toggle \"\n           href=\"/rfcedtyp/\">\n            RFC Editor\n        </a>\n    </li>\n\n\n    <li class=\"dropend\">\n        <a class=\"dropdown-item dropdown-toggle \"\n           href=\"/group/\">\n            Other\n        </a>\n        \n\n\n<ul class=\"dropdown-menu ms-n1\">\n    \n        <li>\n            <a class=\"dropdown-item \"\n               href=\"/ag/\">Active AGs</a>\n        </li>\n    \n        <li>\n            <a class=\"dropdown-item \"\n               href=\"/area/\">Active Areas</a>\n        </li>\n    \n        <li>\n            <a class=\"dropdown-item \"\n               href=\"/dir/\">Active Directorates</a>\n        </li>\n    \n        <li>\n            <a class=\"dropdown-item \"\n               href=\"/iabworkshop/\">Active IAB Workshops</a>\n        </li>\n    \n        <li>\n            <a class=\"dropdown-item \"\n               href=\"/program/\">Active Programs</a>\n        </li>\n    \n        <li>\n            <a class=\"dropdown-item \"\n               href=\"/rag/\">Active RAGs</a>\n        </li>\n    \n        <li>\n            <a class=\"dropdown-item \"\n               href=\"/team/\">Active Teams</a>\n        </li>\n    \n    \n</ul>\n\n    </li>\n    <li><hr class=\"dropdown-divider\"></li>\n    <li class=\"dropdown-header\">New work</li>\n    <li>\n        <a class=\"dropdown-item\"\n           href=\"/group/chartering/\">\n            Chartering groups\n        </a>\n    </li>\n    <li>\n        <a class=\"dropdown-item\"\n           href=\"/wg/bofs/\">\n            BOFs\n        </a>\n    </li>\n    <li>\n        <a class=\"dropdown-item\"\n           href=\"/doc/bof-requests\">\n            BOF Requests\n        </a>\n    </li>\n    <li><hr class=\"dropdown-divider\"></li>\n    <li class=\"dropdown-header\">Other groups</li>\n    <li>\n        <a class=\"dropdown-item\"\n           href=\"/group/concluded/\">\n            Concluded groups\n        </a>\n    </li>\n    <li>\n        <a class=\"dropdown-item\"\n           href=\"/list/nonwg\">\n            Non-WG lists\n        </a>\n    </li>\n    \n    </ul>\n</li>\n\n<li class=\"nav-item dropdown\">\n    \n        <a href=\"#\"\n           class=\"nav-link dropdown-toggle\"\n           role=\"button\"\n           data-bs-toggle=\"dropdown\"\n           aria-expanded=\"false\">\n            Documents\n        </a>\n        <ul class=\"dropdown-menu mt-n1\">\n        \n    <li>\n        <a class=\"dropdown-item\"\n           href=\"/doc/search\">\n            Search\n        </a>\n    </li>\n    <li>\n        <a class=\"dropdown-item\"\n           href=\"/doc/recent\">\n            Recent I-Ds\n        </a>\n    </li>\n    <li>\n        <a class=\"dropdown-item\"\n           href=\"/submit/\">\n            Submit an Internet-Draft\n        </a>\n    </li>\n    \n    \n        <li><hr class=\"dropdown-divider\">\n        </li>\n    \n    <li class=\"dropdown-header\">\n        RFC streams\n    </li>\n    <li>\n        <a class=\"dropdown-item\"\n           href=\"/stream/iab/\">\n            IAB\n        </a>\n    </li>\n    <li>\n        <a class=\"dropdown-item\"\n           href=\"/stream/irtf/\">\n            IRTF\n        </a>\n    </li>\n    <li>\n        <a class=\"dropdown-item\"\n           href=\"/stream/ise/\">\n            ISE\n        </a>\n    </li>\n    <li>\n        <a class=\"dropdown-item\"\n           href=\"/stream/editorial/\">\n            Editorial\n        </a>\n    </li>\n    \n        <li><hr class=\"dropdown-divider\">\n        </li>\n    \n    <li class=\"dropdown-header\">\n        Subseries\n    </li>\n    <li>\n        <a class=\"dropdown-item\"\n           href=\"/doc/std\">\n            STD\n        </a>\n        <a class=\"dropdown-item\"\n           href=\"/doc/bcp\">\n            BCP\n        </a>\n        <a class=\"dropdown-item\"\n           href=\"/doc/fyi\">\n            FYI\n        </a>\n    </li>\n    \n    </ul>\n</li>\n\n<li class=\"nav-item dropdown\">\n    \n        <a href=\"#\"\n           class=\"nav-link dropdown-toggle\"\n           role=\"button\"\n           data-bs-toggle=\"dropdown\"\n           aria-expanded=\"false\">\n            Meetings\n        </a>\n        <ul class=\"dropdown-menu mt-n1\">\n        \n    <li>\n        <a class=\"dropdown-item\"\n           href=\"/meeting/agenda\">\n            Agenda\n        </a>\n    </li>\n    <li>\n        <a class=\"dropdown-item\"\n           href=\"/meeting/materials\">\n            Materials\n        </a>\n    </li>\n    <li>\n        <a class=\"dropdown-item\"\n           href=\"/meeting/floor-plan\">\n            Floor plan\n        </a>\n    </li>\n    <li>\n        <a class=\"dropdown-item\"\n           href=\"https://www.ietf.org/how/meetings/register/\">\n            Registration\n        </a>\n    </li>\n    <li>\n        <a class=\"dropdown-item\"\n           href=\"/meeting/important-dates/\">\n            Important dates\n        </a>\n    </li>\n    <li>\n        <a class=\"dropdown-item\"\n           href=\"/meeting/session/request/\">\n            Request a session\n        </a>\n    </li>\n    \n    <li>\n        <a class=\"dropdown-item\"\n           href=\"/meeting/requests\">\n            Session requests\n        </a>\n    </li>\n    \n    \n        \n            <li><hr class=\"dropdown-divider\">\n            </li>\n        \n        <li class=\"dropdown-header\">\n            Upcoming meetings\n        </li>\n    \n    <li>\n        <a class=\"dropdown-item\"\n           href=\"/meeting/upcoming\">\n            Upcoming meetings\n        </a>\n    </li>\n    \n        \n            <li><hr class=\"dropdown-divider\">\n            </li>\n        \n        <li class=\"dropdown-header\">\n            Past meetings\n        </li>\n    \n    <li>\n        <a class=\"dropdown-item\"\n           href=\"/meeting/past\">\n            Past meetings\n        </a>\n    </li>\n    <li>\n        <a class=\"dropdown-item\"\n           href=\"https://www.ietf.org/how/meetings/past/\">\n            Meeting proceedings\n        </a>\n    </li>\n    \n    </ul>\n</li>\n\n<li class=\"nav-item dropdown\">\n    \n        <a href=\"#\"\n           class=\"nav-link dropdown-toggle\"\n           role=\"button\"\n           data-bs-toggle=\"dropdown\"\n           aria-expanded=\"false\">\n            Other\n        </a>\n        <ul class=\"dropdown-menu mt-n1\">\n        \n    <li>\n        <a class=\"dropdown-item\"\n           href=\"/ipr/\">\n            IPR disclosures\n        </a>\n    </li>\n    <li>\n        <a class=\"dropdown-item\"\n           href=\"/liaison/\">\n            Liaison statements\n        </a>\n    </li>\n    \n    <li>\n        <a class=\"dropdown-item\"\n           href=\"/iesg/agenda/\">\n            IESG agenda\n        </a>\n    </li>\n    <li>\n        <a class=\"dropdown-item\"\n           href=\"/nomcom/\">\n            NomComs\n        </a>\n    </li>\n    <li>\n        <a class=\"dropdown-item\"\n           href=\"/doc/downref\">\n            Downref registry\n        </a>\n    </li>\n    <li class=\"dropend\">\n        <a class=\"dropdown-item dropdown-toggle\" href=\"#\">\n            Statistics\n        </a>\n        <ul class=\"dropdown-menu\">\n            <li>\n                <a class=\"dropdown-item\"\n                   href=\"/stats/document/\">\n                    I-Ds/RFCs\n                </a>\n            </li>\n            <li>\n                <a class=\"dropdown-item\"\n                   href=\"/stats/meeting/\">\n                    Meetings\n                </a>\n            </li>\n            \n            \n        </ul>\n    </li>\n    <li>\n        <a class=\"dropdown-item\"\n           href=\"/api/\">\n            API Help\n        </a>\n    </li>\n    <li>\n        <a class=\"dropdown-item\"\n           href=\"/release/\">\n            Release notes\n        </a>\n    </li>\n    <li>\n        <a class=\"dropdown-item\"\n           target=\"_blank\" href=\"https://status.ietf.org\">\n            System status\n        </a>\n    </li>\n    \n        <li><hr class=\"dropdown-divider\">\n        </li>\n    \n    <li>\n        <a class=\"dropdown-item text-danger \"\n           target=\"_blank\" href=\"https://github.com/ietf-tools/datatracker/issues/new/choose\">\n            <i class=\"bi bi-bug\">\n            </i>\n            Report a bug\n        </a>\n    </li>\n    \n    </ul>\n</li>\n\n\n    \n\n\n\n<li class=\"nav-item dropdown\">\n    \n        <a href=\"#\"\n           class=\"nav-link dropdown-toggle\"\n           role=\"button\"\n           data-bs-toggle=\"dropdown\"\n           aria-expanded=\"false\">\n            \n                User\n            \n        </a>\n        <ul class=\"dropdown-menu  mt-n1 \">\n        \n    \n    \n        \n            <li>\n                <a class=\"dropdown-item \"\n                   rel=\"nofollow\"\n                   href=\"/accounts/login/?next=/doc/draft-prakash-aip/\">\n                    Sign in\n                </a>\n            </li>\n            <li>\n                <a class=\"dropdown-item \"\n                   rel=\"nofollow\"\n                   href=\"/accounts/reset/\">\n                    Password reset\n                </a>\n            </li>\n            <li>\n                <a class=\"dropdown-item \"\n                   href=\"/accounts/settings/\"\n                   rel=\"nofollow\">\n                    Preferences\n                </a>\n            </li>\n        \n    \n    \n        <li>\n            <a class=\"dropdown-item \"\n               href=\"/accounts/create/\">\n                New account\n            </a>\n        </li>\n    \n    <li class=\"dropend\">\n      <a class=\"dropdown-item dropdown-toggle\" href=\"#\">\n        List subscriptions\n      </a>\n      <ul class=\"dropdown-menu\">\n            <li>\n                <a class=\"dropdown-item \"\n                href=\"https://mailman3.ietf.org/mailman3/lists/\">\n                    IETF Lists\n                </a>\n            </li>\n            <li>\n                <a class=\"dropdown-item \"\n                href=\"https://mailman3.irtf.org/mailman3/lists/\">\n                IRTF Lists\n                </a>\n            </li>\n            <li>\n                <a class=\"dropdown-item \"\n                href=\"https://mailman3.iab.org/mailman3/lists/\">\n                    IAB Lists\n                </a>\n            </li>\n            <li>\n                <a class=\"dropdown-item \"\n                href=\"https://mailman3.rfc-editor.org/mailman3/lists/\">\n                    RFC-Editor Lists\n                </a>\n            </li>\n        </ul>\n    </li>\n    \n    \n    \n    \n    \n    </ul></li>\n\n\n                    </ul>\n                </div>\n                <div class=\"d-flex align-items-center\">\n                    <a class=\"nav-link text-danger d-none d-xl-inline me-xl-4\"\n                       target=\"_blank\"\n                       href=\"https://github.com/ietf-tools/datatracker/issues/new/choose\">\n                        Report a bug\n                        <i class=\"bi bi-bug\"></i>\n                    </a>\n\n                    \n                        <a class=\"btn me-1  btn-warning  d-none d-sm-block\"\n                           rel=\"nofollow\"\n                           href=\"/accounts/login/?next=/doc/draft-prakash-aip/\">\n                            Sign in\n                        </a>\n                    \n\n                    <div class=\"d-none d-md-block dropdown\" id=\"navbar-doc-search-wrapper\">\n                        <input class=\"form-control\"\n                               id=\"navbar-doc-search\"\n                               type=\"text\"\n                               placeholder=\"Document search\"\n                               autocomplete=\"off\"\n                               data-ajax-url=\"/doc/select2search/document/all/\"\n                               aria-label=\"Document search\">\n                        <ul class=\"dropdown-menu\" id=\"navbar-doc-search-results\">\n                        </ul>\n                    </div>\n                </div>\n                <button class=\"navbar-toggler\"\n                        type=\"button\"\n                        data-bs-toggle=\"collapse\"\n                        data-bs-target=\"#navbar-collapse\"\n                        aria-controls=\"navbar-collapse\"\n                        aria-expanded=\"false\"\n                        aria-label=\"Toggle navigation\">\n                    <i class=\"navbar-toggler-icon\"></i>\n                </button>\n            </div>\n        </nav>\n        \n        <main class=\"pt-3 container-fluid\" id=\"main\">\n            <div class=\"row\">\n                \n                <div class=\"col mx-lg-3 ietf-auto-nav\" id=\"content\">\n                    <noscript data-nosnippet>\n                        <div class=\"alert alert-danger alert-ignore my-3\">\n                            <b>Javascript disabled?</b> Like other modern websites, the IETF Datatracker relies on Javascript.\n                            Please enable Javascript for full functionality.\n                        </div>\n                    </noscript>\n                    \n                    \n    \n    \n\n\n\n<h1>\n    Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems\n    <br>\n    <small class=\"text-body-secondary\">draft-prakash-aip-01</small>\n</h1>\n<ul class=\"nav nav-tabs my-3\">\n    \n        <li  class=\"nav-item\">\n            <a class=\"nav-link active\"\n               href=\"/doc/draft-prakash-aip/\">\n                Status\n            </a>\n        </li>\n    \n        <li  class=\"nav-item\">\n            <a class=\"nav-link \"\n               href=\"/doc/draft-prakash-aip/email/\">\n                Email expansions\n            </a>\n        </li>\n    \n        <li  class=\"nav-item\">\n            <a class=\"nav-link \"\n               href=\"/doc/draft-prakash-aip/history/\">\n                History\n            </a>\n        </li>\n    \n</ul>\n\n    \n\n\n\n    <label class=\"my-1 fw-bold\">Versions:</label>\n    <nav class=\"mb-3\">\n\n    <ul class=\"revision-list pagination pagination-sm text-center flex-wrap\">\n        \n            \n                 \n                    <li class=\"page-item \">\n                        <a class=\"page-link\"\n                        href=\"/doc/draft-prakash-aip/00/\"\n                        >\n                            00\n                        </a>\n                    </li>\n                \n            \n                 \n                    <li class=\"page-item active\">\n                        <a class=\"page-link\"\n                        href=\"/doc/draft-prakash-aip/01/\"\n                        >\n                            01\n                        </a>\n                    </li>\n                \n            \n            \n        \n    </ul>\n\n    </nav>\n\n    \n\n\n\n\n    <div class=\"alert alert-warning \" role=\"alert\">\n        This document is an Internet-Draft (I-D).\n        Anyone may submit an I-D to the IETF.\n        This I-D is <strong>not endorsed by the IETF</strong> and has <strong>no formal standing</strong> in the\n        <a href=\"/doc/rfc2026/\">IETF standards process</a>.\n    </div>\n\n\n    <div id=\"doc-timeline\"></div>\n    \n        \n    \n    <table class=\"table table-sm table-borderless\">\n        \n\n\n\n\n\n\n\n<tbody class=\"meta align-top  border-top\">\n    <tr>\n        <th scope=\"row\">Document</th>\n        <th scope=\"row\">Type</th>\n        <td class=\"edit\"></td>\n        <td>\n            \n\n\n\n\n\n\n\n    <span class=\"text-success\">Active Internet-Draft</span>\n    (individual)\n    \n\n            \n            \n            \n        </td>\n    </tr>\n    \n    <tr>\n        <td></td>\n        <th scope=\"row\">Author</th>\n        <td class=\"edit\">\n            \n        </td>\n        <td>\n            \n            \n                <span ><a \n           title=\"Datatracker profile of Sunil Prakash\"\n            href=\"/person/sunil@sunilprakash.com\" >Sunil Prakash</a> <a \n               href=\"mailto:sunil%40sunilprakash.com\"\n               aria-label=\"Compose email to sunil@sunilprakash.com\"\n               title=\"Compose email to sunil@sunilprakash.com\">\n                <i class=\"bi bi-envelope\"></i></a></span>\n            \n            \n        </td>\n    </tr>\n    \n    \n    <tr>\n        <td></td>\n        <th scope=\"row\">Last updated</th>\n        <td class=\"edit\"></td>\n        <td>\n            2026-08-19\n            \n        </td>\n    </tr>\n    \n    \n        \n        \n        \n    \n    <tr>\n        <td></td>\n        <th scope=\"row\">\n            RFC stream\n        </th>\n        <td class=\"edit\">\n            \n        </td>\n        <td class=\"text-body-secondary\">\n            \n                (None)\n            \n        </td>\n    </tr>\n    \n        <tr>\n            <td></td>\n            <th scope=\"row\">\n                Intended RFC status\n            </th>\n            <td class=\"edit\">\n                \n            </td>\n            <td>\n                \n                    <span class=\"text-body-secondary\">\n                        (None)\n                    </span>\n                \n            </td>\n        </tr>\n    \n    <tr>\n        <td></td>\n        <th scope=\"row\">\n            Formats\n        </th>\n        <td class=\"edit\">\n        </td>\n        <td>\n            \n                \n    <div class=\"buttonlist\">\n    \n        \n        <a class=\"btn btn-primary btn-sm\"\n          \n          target=\"_blank\"\n          href=\"https://www.ietf.org/archive/id/draft-prakash-aip-01.txt\">\n            \n                <i class=\"bi bi-file-text\"></i> txt\n            \n        </a>\n        \n    \n        \n        <a class=\"btn btn-primary btn-sm\"\n          \n          target=\"_blank\"\n          href=\"https://www.ietf.org/archive/id/draft-prakash-aip-01.html\">\n            \n                <i class=\"bi bi-file-code\"></i> html\n            \n        </a>\n        \n    \n        \n        <a class=\"btn btn-primary btn-sm\"\n          \n          target=\"_blank\"\n          href=\"https://www.ietf.org/archive/id/draft-prakash-aip-01.xml\">\n            \n                <i class=\"bi bi-file-code\"></i> xml\n            \n        </a>\n        \n    \n        \n        <a class=\"btn btn-primary btn-sm\"\n          \n          \n          href=\"/doc/html/draft-prakash-aip-01\">\n            \n                <i class=\"bi bi-file-code\"></i> htmlized\n            \n        </a>\n        \n    \n        \n        <a class=\"btn btn-primary btn-sm\"\n          \n          target=\"_blank\"\n          href=\"/doc/draft-prakash-aip/01/bibtex/\">\n            \n                <i class=\"bi bi-file-ruled\"></i> bibtex\n            \n        </a>\n        \n    \n        \n        <a class=\"btn btn-primary btn-sm\"\n          \n          target=\"_blank\"\n          href=\"/doc/bibxml3/draft-prakash-aip-01.xml\">\n            \n                <i class=\"bi bi-file-code\"></i> bibxml\n            \n        </a>\n        \n    \n</div>\n\n            \n        </td>\n    </tr>\n    \n    \n        \n    \n        \n            \n            \n        \n    \n    \n        \n    \n</tbody>\n        <tbody class=\"meta border-top\">\n            <tr>\n                <th scope=\"row\">\n                    Stream\n                </th>\n                \n                    <th scope=\"row\">\n                        Stream state\n                    </th>\n                    <td class=\"edit\">\n                    </td>\n                    <td>\n                        <span class=\"text-body-secondary\">(No stream defined)</span>\n                    </td>\n                \n            </tr>\n            \n            \n                <tr>\n                    <td></td>\n                    <th scope=\"row\">\n                        Consensus boilerplate\n                    </th>\n                    <td class=\"edit\">\n                        \n                    </td>\n                    <td>\n                        <span class=\"text-danger\"\n                              title=\"Whether the document is the result of a community consensus process as defined in RFC 5741\">\n                            Unknown\n                        </span>\n                    </td>\n                </tr>\n            \n            \n            \n                <tr>\n                    <td></td>\n                    <th scope=\"row\">\n                        RFC Editor Note\n                    </th>\n                    <td class=\"edit\">\n                        \n                    </td>\n                    <td>\n                        \n                            <span class=\"text-body-secondary\">\n                                (None)\n                            </span>\n                        \n                    </td>\n                </tr>\n            \n            \n        </tbody>\n        \n            <tbody class=\"meta border-top\">\n                <tr>\n                    <th scope=\"row\">\n                        IESG\n                    </th>\n                    <th scope=\"row\">\n                        <a href=\"/doc/help/state/draft-iesg/\">\n                            IESG state\n                        </a>\n                    </th>\n                    <td class=\"edit\">\n                        \n                    </td>\n                    <td>\n                        <span class=\"\">\n                            \n                                I-D Exists\n                            \n                        </span>\n                    </td>\n                </tr>\n                \n                    \n                    <tr>\n                        <td></td>\n                        <th scope=\"row\">\n                            Telechat date\n                        </th>\n                        <td class=\"edit\">\n                            \n                        </td>\n                        <td>\n                            \n                                <span class=\"text-body-secondary\">\n                                    (None)\n                                </span>\n                            \n                            \n                        </td>\n                    </tr>\n                    <tr>\n                        <td></td>\n                        <th scope=\"row\">\n                            Responsible AD\n                        </th>\n                        <td class=\"edit\">\n                            \n                        </td>\n                        <td>\n                            \n                                <span class=\"text-body-secondary\">\n                                    (None)\n                                </span>\n                            \n                        </td>\n                    </tr>\n                    \n                    <tr>\n                        <td></td>\n                        <th scope=\"row\">\n                            Send notices to\n                        </th>\n                        <td class=\"edit\">\n                            \n                        </td>\n                        <td>\n                            \n                                <span class=\"text-body-secondary\">\n                                    (None)\n                                </span>\n                            \n                        </td>\n                    </tr>\n                </tbody>\n            \n            \n                \n            \n            \n        </table>\n        <div class=\"buttonlist\">\n            <a class=\"btn btn-primary btn-sm\"\n               href=\"mailto:draft-prakash-aip@ietf.org?subject=Mail%20regarding%20draft-prakash-aip\">\n                <i class=\"bi bi-envelope\">\n                </i>\n                Email authors\n            </a>\n            \n            <a class=\"btn btn-primary btn-sm\"\n               href=\"/ipr/search/?submit=draft&amp;id=draft-prakash-aip\"\n               rel=\"nofollow\">\n                <i class=\"bi bi-lightning\">\n                </i>\n                IPR\n                \n            </a>\n            <a class=\"btn btn-primary btn-sm\"\n               href=\"/doc/draft-prakash-aip/references/\"\n               rel=\"nofollow\">\n                <i class=\"bi bi-arrow-left\">\n                </i>\n                References\n            </a>\n            <a class=\"btn btn-primary btn-sm\"\n               href=\"/doc/draft-prakash-aip/referencedby/\"\n               rel=\"nofollow\">\n                <i class=\"bi bi-arrow-right\">\n                </i>\n                Referenced by\n            </a>\n            <a class=\"btn btn-primary btn-sm\"\n               href=\"https://author-tools.ietf.org/api/idnits?url=https://www.ietf.org/archive/id/draft-prakash-aip-01.txt\"\n               rel=\"nofollow\"\n               target=\"_blank\">\n                <i class=\"bi bi-exclamation\">\n                </i>\n                Nits\n            </a>\n             <a class=\"btn btn-primary btn-sm\"\n               href=\"https://author-tools.ietf.org/idnits3/results?url=https://www.ietf.org/archive/id/draft-prakash-aip-01.txt\"\n               rel=\"nofollow\"\n               target=\"_blank\">\n                <i class=\"bi bi-exclamation-diamond\">\n                </i>\n                Nits v3\n            </a>           \n            <a class=\"btn btn-primary btn-sm\"\n               href=\"https://mailarchive.ietf.org/arch/search/?q=%22draft-prakash-aip%22\"\n               rel=\"nofollow\"\n               target=\"_blank\">\n                <i class=\"bi bi-search\">\n                </i>\n                Search email archive\n            </a>\n            \n            \n            \n            \n        </div>\n        \n            <div class=\"card mt-5\">\n                <div class=\"card-header\">\n                    \n                        draft-prakash-aip-01\n                    \n                </div>\n                <div class=\"card-body\">\n                    <pre>Individual Submission                                         S. Prakash\nInternet-Draft                                               Independent\nIntended status: Informational                            19 August 2026\nExpires: 20 February 2027\n\n   Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent\n                                Systems\n                          draft-prakash-aip-01\n\n<span>Abstract</span>\n\n   This document specifies the Agent Identity Protocol (AIP), a protocol\n   for verifiable, delegable identity for AI agent systems.  AIP\n   introduces Invocation-Bound Capability Tokens (IBCTs) that bind\n   identity, authorization, scope constraints, and provenance into a\n   single cryptographic artifact.  Two token modes are defined: a\n   compact mode using JSON Web Tokens (JWT) with Ed25519 signatures for\n   single-hop interactions, and a chained mode using Biscuit tokens with\n   append-only blocks and Datalog policy evaluation for multi-hop\n   delegation chains.  Protocol bindings are specified for the Model\n   Context Protocol (MCP), Agent-to-Agent Protocol (A2A), and generic\n   HTTP APIs.  The protocol addresses authentication gaps in current AI\n   agent infrastructure where a survey of approximately 2,000 MCP\n   servers found all lacked authentication.  This revision specifies a\n   normative verification algorithm, defines the canonical policy\n   encoding for chained mode, describes how AIP composes with workload\n   identity systems such as SPIFFE, and maps AIP against the cross-\n   organization delegation requirements enumerated in\n   [I-D.reece-wimse-cross-org-delegation].\n\n<span>Status of This Memo</span>\n\n   This Internet-Draft is submitted in full conformance with the\n   provisions of BCP 78 and BCP 79.\n\n   Internet-Drafts are working documents of the Internet Engineering\n   Task Force (IETF).  Note that other groups may also distribute\n   working documents as Internet-Drafts.  The list of current Internet-\n   Drafts is at https://datatracker.ietf.org/drafts/current/.\n\n   Internet-Drafts are draft documents valid for a maximum of six months\n   and may be updated, replaced, or obsoleted by other documents at any\n   time.  It is inappropriate to use Internet-Drafts as reference\n   material or to cite them other than as &quot;work in progress.&quot;\n\n   This Internet-Draft will expire on 20 February 2027.\n\n<span>Prakash                 Expires 20 February 2027                [Page 1]</span>\n<span>Internet-Draft                     AIP                       August 2026</span>\n\n<span>Copyright Notice</span>\n\n   Copyright (c) 2026 IETF Trust and the persons identified as the\n   document authors.  All rights reserved.\n\n   This document is subject to BCP 78 and the IETF Trust&#x27;s Legal\n   Provisions Relating to IETF Documents (https://trustee.ietf.org/\n   license-info) in effect on the date of publication of this document.\n   Please review these documents carefully, as they describe your rights\n   and restrictions with respect to this document.\n\n<span>Table of Contents</span>\n\n   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   3\n     1.1.  Requirements Language . . . . . . . . . . . . . . . . . .   4\n   2.  Identity Scheme . . . . . . . . . . . . . . . . . . . . . . .   4\n     2.1.  DNS-Based Identifiers . . . . . . . . . . . . . . . . . .   4\n     2.2.  Self-Certifying Identifiers . . . . . . . . . . . . . . .   4\n     2.3.  Identity Document . . . . . . . . . . . . . . . . . . . .   4\n   3.  Token Formats . . . . . . . . . . . . . . . . . . . . . . . .   5\n     3.1.  Compact Mode (JWT)  . . . . . . . . . . . . . . . . . . .   5\n     3.2.  Chained Mode (Biscuit)  . . . . . . . . . . . . . . . . .   6\n     3.3.  Scope Attenuation . . . . . . . . . . . . . . . . . . . .   6\n     3.4.  Policy Profiles . . . . . . . . . . . . . . . . . . . . .   6\n       3.4.1.  Canonical Block Encoding  . . . . . . . . . . . . . .   7\n     3.5.  Budget Semantics  . . . . . . . . . . . . . . . . . . . .   8\n   4.  Verification Algorithm  . . . . . . . . . . . . . . . . . . .   8\n     4.1.  Step V1: Chain Integrity  . . . . . . . . . . . . . . . .   9\n     4.2.  Step V2: Root Binding . . . . . . . . . . . . . . . . . .   9\n     4.3.  Step V3: Depth  . . . . . . . . . . . . . . . . . . . . .   9\n     4.4.  Step V4: Structural Attenuation Walk  . . . . . . . . . .   9\n     4.5.  Step V5: Delegation Context . . . . . . . . . . . . . . .  10\n     4.6.  Step V6: Policy Evaluation  . . . . . . . . . . . . . . .  10\n     4.7.  Step V7: Revocation with Bounded Staleness  . . . . . . .  11\n     4.8.  Verification Result . . . . . . . . . . . . . . . . . . .  11\n   5.  Trust Anchors and Workload Identity . . . . . . . . . . . . .  11\n     5.1.  Anchor Modes  . . . . . . . . . . . . . . . . . . . . . .  12\n     5.2.  Relationship to Token Exchange  . . . . . . . . . . . . .  12\n     5.3.  Proof of Possession . . . . . . . . . . . . . . . . . . .  13\n   6.  Protocol Bindings . . . . . . . . . . . . . . . . . . . . . .  13\n     6.1.  MCP Binding . . . . . . . . . . . . . . . . . . . . . . .  13\n     6.2.  A2A Binding . . . . . . . . . . . . . . . . . . . . . . .  14\n     6.3.  HTTP Binding  . . . . . . . . . . . . . . . . . . . . . .  14\n   7.  Delegation Lifecycle  . . . . . . . . . . . . . . . . . . . .  14\n     7.1.  Bounded Depth . . . . . . . . . . . . . . . . . . . . . .  14\n     7.2.  Delegation Context  . . . . . . . . . . . . . . . . . . .  14\n     7.3.  Ephemeral Agent Grants  . . . . . . . . . . . . . . . . .  14\n     7.4.  Key Rotation  . . . . . . . . . . . . . . . . . . . . . .  15\n\n<span>Prakash                 Expires 20 February 2027                [Page 2]</span>\n<span>Internet-Draft                     AIP                       August 2026</span>\n\n     7.5.  Revocation  . . . . . . . . . . . . . . . . . . . . . . .  15\n   8.  Provenance and Audit  . . . . . . . . . . . . . . . . . . . .  15\n     8.1.  Completion Blocks . . . . . . . . . . . . . . . . . . . .  15\n     8.2.  Verification Trust Levels . . . . . . . . . . . . . . . .  15\n     8.3.  Audit Tokens  . . . . . . . . . . . . . . . . . . . . . .  16\n   9.  Security Considerations . . . . . . . . . . . . . . . . . . .  16\n     9.1.  Threat Model  . . . . . . . . . . . . . . . . . . . . . .  16\n     9.2.  Adversarial Evaluation  . . . . . . . . . . . . . . . . .  17\n     9.3.  Cryptographic Agility . . . . . . . . . . . . . . . . . .  17\n     9.4.  Transport Security  . . . . . . . . . . . . . . . . . . .  17\n   10. IANA Considerations . . . . . . . . . . . . . . . . . . . . .  17\n     10.1.  HTTP Authentication Scheme . . . . . . . . . . . . . . .  18\n     10.2.  Well-Known URI . . . . . . . . . . . . . . . . . . . . .  18\n     10.3.  Media Type . . . . . . . . . . . . . . . . . . . . . . .  18\n   11. References  . . . . . . . . . . . . . . . . . . . . . . . . .  18\n     11.1.  Normative References . . . . . . . . . . . . . . . . . .  18\n     11.2.  Informative References . . . . . . . . . . . . . . . . .  19\n   Appendix A.  Cross-Organization Delegation Requirements\n           Mapping . . . . . . . . . . . . . . . . . . . . . . . . .  20\n   Appendix B.  Changes from draft-prakash-aip-00  . . . . . . . . .  21\n   Acknowledgements  . . . . . . . . . . . . . . . . . . . . . . . .  22\n   Author&#x27;s Address  . . . . . . . . . . . . . . . . . . . . . . . .  22\n\n1.  Introduction\n\n   AI agent systems are increasingly deployed in multi-agent\n   architectures where an orchestrator decomposes tasks and delegates\n   subtasks to specialist agents.  The protocols enabling this\n   communication, notably the Model Context Protocol (MCP) and the\n   Agent-to-Agent Protocol (A2A), solve the connectivity problem but do\n   not solve the identity problem.\n\n   MCP provides no built-in authentication layer.  A2A uses self-\n   declared identities with no attestation mechanism.  OAuth 2.1,\n   recently added to MCP, covers single-hop client-to-server\n   authentication but does not address multi-hop delegation chains.\n   When an orchestrator delegates to a specialist that calls a tool, the\n   delegation chain that led to the tool invocation is lost.\n\n   AIP fills this gap by introducing Invocation-Bound Capability Tokens\n   (IBCTs) that answer four questions for every agent action: who\n   authorized this action, through which delegation chain, with what\n   constraints at each hop, and what was the outcome.\n\n<span>Prakash                 Expires 20 February 2027                [Page 3]</span>\n<span>Internet-Draft                     AIP                       August 2026</span>\n\n1.1.  Requirements Language\n\n   The key words &quot;MUST&quot;, &quot;MUST NOT&quot;, &quot;REQUIRED&quot;, &quot;SHALL&quot;, &quot;SHALL NOT&quot;,\n   &quot;SHOULD&quot;, &quot;SHOULD NOT&quot;, &quot;RECOMMENDED&quot;, &quot;NOT RECOMMENDED&quot;, &quot;MAY&quot;, and\n   &quot;OPTIONAL&quot; in this document are to be interpreted as described in BCP\n   14 [RFC2119] [RFC8174] when, and only when, they appear in all\n   capitals, as shown here.\n\n2.  Identity Scheme\n\n   AIP defines two identifier schemes for agent identity:\n\n2.1.  DNS-Based Identifiers\n\n   DNS-based identifiers follow the format:\n\n   aip:web:&lt;domain&gt;/&lt;path&gt;\n\n   Example: aip:web:example.com/agents/research-analyst\n\n   DNS-based identifiers are suitable for long-lived agents with stable\n   domain ownership.  Identity documents are resolved via HTTPS at a\n   well-known path.\n\n2.2.  Self-Certifying Identifiers\n\n   aip:key:ed25519:&lt;multibase-encoded-public-key&gt;\n\n   Self-certifying identifiers derive identity from the public key\n   itself.  They are suitable for ephemeral agents that do not require\n   DNS infrastructure.  The identifier is deterministically computed\n   from the Ed25519 public key using multibase encoding.\n\n2.3.  Identity Document\n\n   Each agent with a DNS-based identifier MUST publish an identity\n   document at:\n\n   https://&lt;domain&gt;/.well-known/aip/&lt;path&gt;.json\n\n   The identity document is a JSON object containing:\n\n   *  aip: Protocol version (MUST be &quot;1.0&quot;)\n\n   *  id: The agent&#x27;s AIP identifier\n\n   *  public_keys: Array of public key objects with validity windows\n\n<span>Prakash                 Expires 20 February 2027                [Page 4]</span>\n<span>Internet-Draft                     AIP                       August 2026</span>\n\n   *  name: Human-readable agent name\n\n   *  delegation: Delegation preferences\n\n   *  protocols: Supported protocol bindings\n\n   *  document_signature: Ed25519 signature over the canonicalized\n      document\n\n   *  expires: Document expiration timestamp\n\n   The document MUST be self-signed.  Verification uses JSON\n   Canonicalization Scheme (JCS) [RFC8785]: remove the\n   document_signature field, canonicalize the remaining JSON, and verify\n   the Ed25519 signature against a currently-valid public key.\n\n3.  Token Formats\n\n   AIP defines two token modes that share a common identity scheme but\n   differ in delegation capability.\n\n3.1.  Compact Mode (JWT)\n\n   Compact mode tokens are JSON Web Tokens [RFC7519] signed with Ed25519\n   (EdDSA).  They support single-hop interactions only.\n\n   Header:\n\n   {&quot;alg&quot;: &quot;EdDSA&quot;, &quot;typ&quot;: &quot;aip+jwt&quot;}\n\n   Claims:\n\n   *  iss: Issuer AIP identifier (REQUIRED)\n\n   *  sub: Subject/holder AIP identifier (REQUIRED)\n\n   *  scope: Array of authorized capabilities (REQUIRED)\n\n   *  budget_usd: Authorization budget ceiling in USD (REQUIRED)\n\n   *  max_depth: Maximum delegation depth, 0 for no further delegation\n      (REQUIRED)\n\n   *  iat: Issued-at timestamp (REQUIRED)\n\n   *  exp: Expiration timestamp (REQUIRED)\n\n<span>Prakash                 Expires 20 February 2027                [Page 5]</span>\n<span>Internet-Draft                     AIP                       August 2026</span>\n\n   Token lifetime SHOULD be less than one hour.  Both iss and sub MUST\n   be valid AIP identifiers.\n\n3.2.  Chained Mode (Biscuit)\n\n   Chained mode tokens use Biscuit [BISCUIT] tokens with append-only\n   blocks and Datalog policy evaluation.  They support multi-hop\n   delegation with cryptographic scope attenuation.\n\n   A chained token consists of ordered blocks:\n\n   *  Block 0 (Authority): Root identity, initial capabilities, budget,\n      max_depth, expiration.  Signed by the root authority.\n\n   *  Blocks 1..N-1 (Delegation): Each block narrows scope.  Contains\n      delegator, delegate, attenuated capabilities (as Biscuit right\n      facts), attenuated budget, and a non-empty context field.  Signed\n      by the delegator.\n\n   *  Block N (Completion, optional): Execution outcome.  Contains\n      status, result_hash (SHA-256), verification_status, and optional\n      resource usage metrics.  Signed by the executing agent.\n\n3.3.  Scope Attenuation\n\n   Scope attenuation is a fundamental security property of AIP.  At each\n   delegation step, scope can only narrow or remain equal, never widen.\n   This applies across four dimensions:\n\n   *  Tools: Child scope MUST be a subset of parent scope\n\n   *  Budget: Child budget MUST be less than or equal to parent budget\n\n   *  Domains: Child domains MUST be a subset of parent domains\n\n   *  Time: Child expiration MUST be less than or equal to parent\n      expiration\n\n   Verifiers MUST check attenuation at every hop in the delegation\n   chain.  A wildcard (*) in the parent permits any specific value in\n   the child, but a specific value in the parent MUST NOT widen to a\n   wildcard in the child.\n\n3.4.  Policy Profiles\n\n   Chained mode tokens support three policy profiles of increasing\n   expressiveness:\n\n<span>Prakash                 Expires 20 February 2027                [Page 6]</span>\n<span>Internet-Draft                     AIP                       August 2026</span>\n\n   *  Simple: Templated rules requiring no Datalog knowledge.  The\n      library generates canonical Datalog for tool allowlists, budget\n      ceilings, delegation depth, and time expiry.\n\n   *  Standard: Curated Datalog subset without recursion and with\n      bounded evaluation.\n\n   *  Advanced: Full Datalog with a maximum 1000 iteration limit.  Opt-\n      in only.\n\n3.4.1.  Canonical Block Encoding\n\n   Interoperability of chained mode depends on every implementation\n   emitting the same Datalog for the same authorization intent.  Two\n   encodings that are individually defensible will not verify against\n   each other.  Implementations of the Simple profile MUST emit exactly\n   the forms below.\n\n   The authority block (block 0) MUST contain:\n\n   identity(&quot;&lt;aip-identifier&gt;&quot;);\n   principal(&quot;&lt;identifier&gt;&quot;);          ; OPTIONAL, on-behalf-of party\n   right(&quot;&lt;scope&gt;&quot;);                   ; one fact per granted scope\n   max_depth(&lt;n&gt;);\n   budget_ceiling(&lt;cents&gt;);            ; OPTIONAL, integer cents\n   check if tool($t), [&quot;&lt;scope&gt;&quot;, ...].contains($t);\n   check if time($t), $t &lt;= &lt;expiry&gt;;\n\n   Each delegation block (blocks 1 through N) MUST contain:\n\n   delegator(&quot;&lt;aip-identifier&gt;&quot;);\n   delegate(&quot;&lt;aip-identifier&gt;&quot;);\n   context(&quot;&lt;non-empty string&gt;&quot;);\n   budget_ceiling(&lt;cents&gt;);            ; OPTIONAL, integer cents\n   check if tool($t), [&quot;&lt;scope&gt;&quot;, ...].contains($t);\n   check if time($t), $t &lt;= &lt;expiry&gt;;  ; OPTIONAL, &lt;= parent expiry\n\n   Scope narrowing follows from conjunction: because every block\n   contributes a check if tool($t) constraint and all checks in all\n   blocks MUST pass, the set of authorized tools is the intersection of\n   the per-block allowlists.  A delegation block cannot widen scope,\n   because naming a tool absent from an ancestor&#x27;s allowlist produces an\n   empty intersection and authorizes nothing.\n\n   Budget is carried as a fact rather than a check.  A Datalog check of\n   the form check if budget($b), $b &lt;= N binds to whatever budget facts\n   are in scope during evaluation, which is not the same question as\n   whether this block&#x27;s ceiling narrows its parent&#x27;s.  Encoding budget\n\n<span>Prakash                 Expires 20 February 2027                [Page 7]</span>\n<span>Internet-Draft                     AIP                       August 2026</span>\n\n   as a check therefore either rejects valid chains or, if the verifier\n   supplies a satisfying ambient fact, passes unconditionally.  Budget\n   attenuation is verified structurally instead, in step V4 of\n   Section 4.\n\n   Implementations MUST NOT emit a check statement over budget, and\n   verifiers MUST NOT inject an ambient budget fact during policy\n   evaluation.\n\n3.5.  Budget Semantics\n\n   Budget values in AIP tokens represent per-token authorization\n   ceilings, NOT running balances.  A delegator asserts &quot;I authorize up\n   to $X for this task&quot; at delegation time.\n\n   A budget ceiling is both declared and verified, and the two are\n   distinct operations:\n\n   *  Declared as a budget_ceiling fact in the block that establishes\n      it, in integer cents.\n\n   *  Verified structurally at every hop: a verifier MUST confirm that\n      each block&#x27;s declared ceiling is non-negative and does not exceed\n      the nearest ancestor block that declares one.  A block that\n      declares no ceiling inherits its nearest ancestor&#x27;s.  This check\n      is specified in step V4 of Section 4.\n\n   What the token does NOT do is track cumulative spending.  Nothing in\n   a delegation chain records how much of a ceiling has been consumed,\n   and a verifier evaluating a single request cannot know.  Enforcement\n   of actual spend against a ceiling is out of band, and is the\n   responsibility of the orchestration platform at dispatch time.\n   Completion blocks record actual cost_usd for audit purposes, which\n   supports after-the-fact reconciliation but is not an authorization\n   control.\n\n   Implementations MUST NOT present ceiling verification as spend\n   enforcement.  A chain that verifies establishes that no hop\n   authorized more than it held.  It does not establish that the\n   authorized amount remains available.\n\n4.  Verification Algorithm\n\n   This section is normative.  A verifier presented with an AIP token\n   MUST perform steps V1 through V7 in the order given before treating\n   any identity or capability asserted by the token as established.  The\n   ordering matters: no step that reads block content is permitted\n   before chain integrity is established in V1.\n\n<span>Prakash                 Expires 20 February 2027                [Page 8]</span>\n<span>Internet-Draft                     AIP                       August 2026</span>\n\n4.1.  Step V1: Chain Integrity\n\n   The verifier MUST deserialize the token from its wire form and verify\n   the signature on every block against the root public key.  In chained\n   mode this means verifying the full signature chain from block 0\n   through block N, not the signature on the presented leaf alone.\n\n   Verification MUST be performed against the serialized form as\n   received.  An implementation that holds a token in a parsed in-memory\n   representation MUST re-serialize and re-verify before relying on it,\n   rather than trusting the state of its own parsed object.\n\n   A verifier MUST NOT accept any fact, check, or claim from a block\n   that it has not verified as part of a chain rooted at the issuer&#x27;s\n   key.  Failure returns aip_signature_invalid.\n\n4.2.  Step V2: Root Binding\n\n   The verifier MUST extract the issuer from the identity fact in block\n   0 and confirm that the root public key used in V1 is the key bound to\n   that identifier:\n\n   *  For aip:web: identifiers, by resolving the identity document as\n      specified in Section 2.3 and comparing the published key.\n\n   *  For aip:key: identifiers, by decoding the key from the identifier\n      itself and comparing.\n\n   An identifier that does not resolve, or that resolves to a different\n   key, returns aip_identity_unresolvable.  A verifier MUST NOT infer\n   the root key from the token.\n\n4.3.  Step V3: Depth\n\n   The verifier MUST confirm that the number of delegation blocks does\n   not exceed the max_depth declared in block 0.  Failure returns\n   aip_depth_exceeded.\n\n4.4.  Step V4: Structural Attenuation Walk\n\n   The verifier MUST walk the chain from block 1 to block N and confirm,\n   for each block i, that every capability dimension is narrower than or\n   equal to the corresponding dimension in block i-1:\n\n   *  Scope: the allowlist in block i MUST be a subset of the allowlist\n      in block i-1.  Failure returns aip_scope_insufficient.\n\n<span>Prakash                 Expires 20 February 2027                [Page 9]</span>\n<span>Internet-Draft                     AIP                       August 2026</span>\n\n   *  Budget: a budget_ceiling declared in block i MUST be non-negative\n      and MUST NOT exceed the ceiling declared by the nearest ancestor\n      that declares one.  Failure returns aip_budget_exceeded.\n\n   *  Time: an expiry declared in block i MUST NOT be later than the\n      expiry declared by the nearest ancestor that declares one, and no\n      block&#x27;s expiry may be in the past.  Failure returns\n      aip_token_expired.\n\n   *  Domains: the domain set in block i MUST be a subset of the domain\n      set in block i-1.  Failure returns aip_scope_insufficient.\n\n   *  Principal: if block 0 declares a principal, no subsequent block\n      may declare a different one.  The on-behalf-of principal is\n      invariant along a chain: intermediaries narrow authority, they do\n      not substitute the party on whose behalf the chain acts.  Failure\n      returns aip_token_malformed.\n\n   A dimension absent from block i inherits the value of its nearest\n   ancestor.  A wildcard in an ancestor permits any specific value in a\n   descendant.  A specific value in an ancestor MUST NOT widen to a\n   wildcard in a descendant.\n\n   This step is REQUIRED and is not satisfied by the container format.\n   A verifier MUST NOT rely on the semantics of an append-only token\n   container to establish attenuation.  Container-level signature\n   chaining establishes that blocks were appended in order by successive\n   keyholders, which is a different property: it prevents a block from\n   being substituted, reordered, or forged, but it does not establish\n   that the capabilities asserted in block i are a subset of those held\n   by block i-1.  Attenuation is a property of the capability content\n   and MUST be checked as such, in addition to V1.\n\n4.5.  Step V5: Delegation Context\n\n   Every delegation block MUST carry a non-empty context fact.  A\n   verifier MUST reject a chain in which any delegation block omits it\n   or supplies an empty value, returning aip_token_malformed.\n\n4.6.  Step V6: Policy Evaluation\n\n   The verifier MUST evaluate the token&#x27;s policies with the ambient\n   facts tool, time, and depth bound to the request under consideration,\n   and MUST require that every check in every block passes.\n\n<span>Prakash                 Expires 20 February 2027               [Page 10]</span>\n<span>Internet-Draft                     AIP                       August 2026</span>\n\n   The verifier MUST NOT introduce ambient facts beyond those named\n   above.  In particular it MUST NOT supply a budget fact: supplying one\n   causes any budget check in the chain to evaluate against verifier-\n   chosen data rather than against the token, which makes the check\n   meaningless.  Budget is handled in V4.\n\n   Failure returns aip_scope_insufficient.\n\n4.7.  Step V7: Revocation with Bounded Staleness\n\n   If the issuer&#x27;s identity document advertises a revocation endpoint,\n   the verifier MUST check whether any key in the chain has been\n   revoked.  Revocation data MAY be cached.  A verifier MUST be\n   configurable with a maximum acceptable staleness for cached\n   revocation data, and MUST fail closed when its cached data is older\n   than that bound, returning aip_key_revoked rather than proceeding on\n   stale information.\n\n   Revocation responses MUST be signed by the issuer so that their\n   authenticity is verifiable without a trusted transport to the\n   revocation endpoint.\n\n4.8.  Verification Result\n\n   A token that passes V1 through V7 establishes: the identity of the\n   issuer, the identity of each delegator and delegate in the chain, the\n   capabilities available at the leaf, and that no hop in the chain\n   exceeded the authority of its predecessor.  It does not establish\n   that the presenting party is the party the leaf was issued to.  See\n   Section 5.3.\n\n5.  Trust Anchors and Workload Identity\n\n   AIP answers a different question from a workload identity system, and\n   the two compose rather than compete.\n\n   A workload identity system such as SPIFFE [SPIFFE], in the\n   architecture described by [I-D.ietf-wimse-arch], answers &quot;which\n   workload is this?&quot;  It attests a running process against the platform\n   it runs on and issues a credential that says so.  Its trust boundary\n   is the trust domain it administers, and it does not model authority\n   passing between parties.\n\n   AIP answers &quot;on whose authority is this being done, how far back, and\n   can a party with no relationship to the origin verify it?&quot;  It\n   carries delegation across hops and organizations, and it says nothing\n   about whether the process presenting the token is the one the\n   platform attested.\n\n<span>Prakash                 Expires 20 February 2027               [Page 11]</span>\n<span>Internet-Draft                     AIP                       August 2026</span>\n\n5.1.  Anchor Modes\n\n   Block 0 of a chain is signed by the issuer&#x27;s key.  Three ways of\n   establishing trust in that key are defined:\n\n   *  DNS-anchored: the issuer is an aip:web: identifier and the key is\n      published in an identity document resolved over HTTPS.  Trust\n      derives from the Web PKI and DNS control.\n\n   *  Self-certifying: the issuer is an aip:key: identifier and the key\n      is the identifier.  Trust derives from whoever accepted the\n      identifier.\n\n   *  Workload-attested: the issuer&#x27;s key is bound to a workload\n      identity credential issued by an external authority, and the\n      identity document records that binding.  Trust derives from that\n      authority&#x27;s attestation.\n\n   In workload-attested mode, an identity document MAY carry a\n   workload_identity member naming the credential that attests the\n   issuer key, for example a SPIFFE ID.  A verifier that recognises the\n   naming authority MAY treat that attestation as the basis for\n   accepting the root key, in place of resolving the document over\n   HTTPS.  A verifier that does not recognise it MUST fall back to the\n   DNS-anchored or self-certifying path, and MUST NOT treat an\n   unrecognised attestation as an endorsement.\n\n   This is the deployment shape most likely in practice: a workload\n   identity system establishes that the orchestrator is what it claims\n   to be inside its own trust domain, and AIP carries what that\n   orchestrator was permitted to delegate onward, across boundaries the\n   workload identity system does not span.\n\n5.2.  Relationship to Token Exchange\n\n   A common deployment pattern carries delegation by repeated token\n   exchange [RFC8693], in which each hop presents its credential to an\n   authorization server and receives a narrowed token carrying an act\n   claim naming the acting party.\n\n   The mechanisms differ in where verification happens.  Token exchange\n   places an authorization server on the path at each hop, and the\n   relying party&#x27;s assurance derives from trusting that server.  An AIP\n   chain is verified by the relying party directly from the token and\n   the issuer&#x27;s published key, with no synchronous call to the\n   originating organization.  The two are not exclusive: an exchanged\n   token may serve as the credential that anchors block 0.\n\n<span>Prakash                 Expires 20 February 2027               [Page 12]</span>\n<span>Internet-Draft                     AIP                       August 2026</span>\n\n5.3.  Proof of Possession\n\n   An AIP token as specified in this document is a bearer credential.\n   Verification establishes what authority the chain conveys and that no\n   hop exceeded its predecessor.  It does not establish that the party\n   presenting the token is the party the leaf was delegated to.  A\n   captured or relayed token is usable by whoever holds it, within the\n   scope, time, and budget the chain permits.\n\n   Deployments requiring proof of possession MUST bind the token to a\n   key at the transport or message layer.  Mutual TLS, HTTP message\n   signatures, and workload proof tokens [I-D.ietf-wimse-wpt] are all\n   suitable.  Specifying that binding is out of scope for this document,\n   and is deliberately left to mechanisms already being standardized\n   rather than duplicated here.\n\n   Implementations MUST NOT describe AIP verification as authenticating\n   the presenter.\n\n6.  Protocol Bindings\n\n6.1.  MCP Binding\n\n   AIP tokens are transported in MCP via the X-AIP-Token HTTP header:\n\n   X-AIP-Token: &lt;compact-or-chained-token&gt;\n\n   For tokens exceeding 4KB, token-by-reference is supported:\n\n   X-AIP-Token-Ref: https://issuer/.well-known/aip/tokens/&lt;id&gt;\n\n   An MCP server extracts the token from the header, or fetches it from\n   the reference URL, and then verifies it according to Section 4.  On\n   success it injects the verified identity into the request context,\n   where the tool implementation MAY use it for authorization decisions,\n   logging, or audit.  The verification steps are not restated here; the\n   algorithm is binding-independent, and an MCP server that verifies\n   tokens differently from an A2A agent is a source of exactly the\n   divergence this document exists to prevent.\n\n   Nine error codes are defined with appropriate HTTP status mappings:\n   401 for authentication failures (token_missing, token_malformed,\n   signature_invalid, identity_unresolvable, token_expired, key_revoked)\n   and 403 for authorization failures (scope_insufficient,\n   budget_exceeded, depth_exceeded).\n\n   Servers declare AIP requirements via the require_aip field in their\n   identity document&#x27;s protocols.mcp configuration.\n\n<span>Prakash                 Expires 20 February 2027               [Page 13]</span>\n<span>Internet-Draft                     AIP                       August 2026</span>\n\n6.2.  A2A Binding\n\n   In A2A interactions, AIP tokens are transported in the\n   metadata.aip_token field of task submissions.  Agent cards are\n   extended with an aip_identity object containing the agent&#x27;s AIP\n   identifier and document URL.\n\n   The A2A verification flow adds a sixth step: the calling agent\n   appends a delegation block with attenuated scope before sending the\n   task, and the receiving agent verifies that the final delegation\n   block delegates to its own AIP identifier.\n\n6.3.  HTTP Binding\n\n   For generic HTTP APIs not using MCP or A2A, tokens are transported\n   via the Authorization header with the AIP scheme:\n\n   Authorization: AIP &lt;base64url-encoded-token&gt;\n\n   Token-by-reference uses the X-AIP-Token-Ref header with a 5-second\n   fetch timeout and SSRF protection (reject reference URLs outside\n   expected domain patterns).\n\n7.  Delegation Lifecycle\n\n7.1.  Bounded Depth\n\n   Block 0 declares max_depth (default: 3).  Each delegation block\n   increments effective depth by 1.  If current depth equals max_depth,\n   further delegation is forbidden.  In compact mode, max_depth of 0\n   means the holder MUST NOT delegate further.\n\n7.2.  Delegation Context\n\n   Each delegation block MUST include a non-empty context field\n   containing a human-readable description of the delegation purpose.\n   Verifiers MUST reject tokens with missing or empty context.  This\n   requirement ensures audit trail integrity.\n\n7.3.  Ephemeral Agent Grants\n\n   For short-lived sub-agents, a parent agent generates an Ed25519\n   keypair, creates an aip:key: identifier, and appends a delegation\n   block with scoped capabilities and a short TTL (5 minutes\n   RECOMMENDED).  The parent&#x27;s identity document MAY set\n   delegation.allow_ephemeral_grants to false to prevent this.\n\n<span>Prakash                 Expires 20 February 2027               [Page 14]</span>\n<span>Internet-Draft                     AIP                       August 2026</span>\n\n7.4.  Key Rotation\n\n   DNS-based identifiers support zero-downtime key rotation through\n   overlapping validity windows on public keys.  A new key is published\n   with a future valid_from timestamp.  Both keys are valid during the\n   overlap period.  Recommended rotation period is 90 days.  Cache TTL\n   MUST NOT exceed 5 minutes.\n\n   Self-certifying identifiers cannot rotate keys; key rotation requires\n   identity replacement, which is acceptable for ephemeral agents.\n\n7.5.  Revocation\n\n   AIP prefers short-lived tokens over revocation infrastructure.\n   Compact mode tokens SHOULD have a TTL under 1 hour, making revocation\n   generally unnecessary.  For chained mode, key revocation (removing a\n   key from the identity document) invalidates all tokens signed by that\n   key.  Token-specific revocation via Certificate Revocation Lists is\n   deferred to v2.\n\n8.  Provenance and Audit\n\n8.1.  Completion Blocks\n\n   A completion block is the final block in a chained token, signed by\n   the executing agent.  It contains:\n\n   *  status: REQUIRED.  One of &quot;completed&quot;, &quot;failed&quot;, or &quot;partial&quot;.\n\n   *  result_hash: REQUIRED.  SHA-256 hash of the output in format\n      &quot;sha256:&lt;hex&gt;&quot;.\n\n   *  verification_status: REQUIRED.  One of &quot;self_reported&quot;,\n      &quot;tool_verified&quot;, &quot;peer_verified&quot;, or &quot;human_verified&quot;.\n\n   *  tokens_used: OPTIONAL.  LLM tokens consumed.\n\n   *  cost_usd: OPTIONAL.  Actual cost incurred.\n\n   *  duration_ms: OPTIONAL.  Wall-clock execution time.\n\n   *  ldp_provenance_id: OPTIONAL.  Back-link to LDP provenance record.\n\n8.2.  Verification Trust Levels\n\n   AIP defines three escalating trust levels for completion data:\n\n<span>Prakash                 Expires 20 February 2027               [Page 15]</span>\n<span>Internet-Draft                     AIP                       August 2026</span>\n\n   *  Level 1 (Self-Reported): Agent reports its own results with no\n      independent verification.  Default for trusted environments.\n\n   *  Level 2 (Counter-Signed): Delegator independently verifies the\n      result and appends a verification block.\n\n   *  Level 3 (Third-Party Attested): External verifier (LDP peer, human\n      reviewer, or audit service) signs an attestation block.\n\n8.3.  Audit Tokens\n\n   A completed chained token with a completion block appended is a self-\n   contained audit artifact.  It answers five questions without\n   requiring an external database: who authorized (Block 0), through\n   whom (delegation blocks), what constraints (Datalog policies), what\n   happened (completion block), and whether it was verified\n   (verification_status).  Audit tokens are tamper-evident, non-\n   repudiable, and verifiable offline using public keys from identity\n   documents.\n\n9.  Security Considerations\n\n   This section addresses the security properties and threat model for\n   AIP.\n\n9.1.  Threat Model\n\n   AIP is designed to resist the following attack categories:\n\n   *  Scope widening: An agent attempts to exceed its delegated\n      capabilities.  Prevented by cryptographic scope attenuation\n      verification at each hop.\n\n   *  Delegation depth violation: An agent attempts to delegate beyond\n      the maximum permitted depth.  Prevented by depth tracking in each\n      delegation block.\n\n   *  Token replay: A captured token is reused.  Mitigated by short TTLs\n      (under 1 hour recommended for compact mode).\n\n   *  Token forgery: An attacker constructs a token without holding the\n      private key.  Prevented by Ed25519 signature verification.\n\n   *  Identity spoofing: An agent claims a false identity.  Prevented by\n      identity document resolution and signature verification.\n\n<span>Prakash                 Expires 20 February 2027               [Page 16]</span>\n<span>Internet-Draft                     AIP                       August 2026</span>\n\n   *  Audit evasion: An agent delegates with empty context to avoid\n      audit trails.  Prevented by mandatory non-empty context on all\n      delegation blocks.\n\n   *  Ancestor substitution: An attacker holding a valid leaf block\n      attempts to present it beneath a different, more permissive\n      ancestor.  Prevented by V1, which verifies the full signature\n      chain from the root key rather than the leaf in isolation.  A\n      substituted ancestor breaks the chain, because each block&#x27;s\n      signature is produced by the key its predecessor committed to.\n\n   Two of these deserve to be separated, because conflating them is a\n   common source of error.  Signature chaining (V1) prevents blocks from\n   being forged, reordered, or substituted.  Attenuation checking (V4)\n   prevents a block from asserting more than its predecessor held.  The\n   first is a property of the container; the second is a property of the\n   capability content.  Neither implies the other, and a verifier that\n   performs only the first will accept a chain in which a delegation\n   widened its own authority.  Both are REQUIRED.\n\n9.2.  Adversarial Evaluation\n\n   Experimental evaluation across 600 adversarial attempts in six attack\n   categories showed a 100% rejection rate.  Two attack categories\n   (delegation depth violation and audit evasion through empty context)\n   are uniquely addressed by AIP&#x27;s chained token structure and cannot be\n   detected by standard JWT deployments.  Details are reported in the\n   companion paper [AIP-PAPER].\n\n9.3.  Cryptographic Agility\n\n   AIP v1 mandates Ed25519 exclusively.  No algorithm negotiation is\n   supported.  This is a deliberate design choice to eliminate downgrade\n   attacks and reduce implementation complexity.  Future versions MAY\n   introduce additional algorithms through the protocol version field.\n\n9.4.  Transport Security\n\n   Identity document resolution and token-by-reference fetching MUST use\n   HTTPS.  Implementations SHOULD enforce TLS 1.3 or later.  Token-by-\n   reference URLs MUST be validated against expected domain patterns to\n   prevent SSRF attacks.  Fetch timeout SHOULD be 5 seconds.\n\n10.  IANA Considerations\n\n   This document requests the following IANA registrations:\n\n<span>Prakash                 Expires 20 February 2027               [Page 17]</span>\n<span>Internet-Draft                     AIP                       August 2026</span>\n\n10.1.  HTTP Authentication Scheme\n\n   Registration of the &quot;AIP&quot; HTTP authentication scheme in the &quot;HTTP\n   Authentication Scheme Registry&quot;:\n\n   *  Authentication Scheme Name: AIP\n\n   *  Reference: This document, Section 6.3\n\n10.2.  Well-Known URI\n\n   Registration of the &quot;aip&quot; well-known URI suffix in the &quot;Well-Known\n   URIs&quot; registry:\n\n   *  URI Suffix: aip\n\n   *  Change Controller: IETF\n\n   *  Reference: This document, Section 2.3\n\n10.3.  Media Type\n\n   Registration of the &quot;aip+jwt&quot; structured syntax suffix:\n\n   *  Type name: application\n\n   *  Subtype name: aip+jwt\n\n   *  Reference: This document, Section 3.1\n\n11.  References\n\n11.1.  Normative References\n\n   [RFC2119]  Bradner, S., &quot;Key words for use in RFCs to Indicate\n              Requirement Levels&quot;, BCP 14, RFC 2119, March 1997,\n              &lt;https://www.rfc-editor.org/info/rfc2119&gt;.\n\n   [RFC7519]  Jones, M., Bradley, J., and N. Sakimura, &quot;JSON Web Token\n              (JWT)&quot;, RFC 7519, May 2015,\n              &lt;https://www.rfc-editor.org/info/rfc7519&gt;.\n\n   [RFC8174]  Leiba, B., &quot;Ambiguity of Uppercase vs Lowercase in RFC\n              2119 Key Words&quot;, BCP 14, RFC 8174, May 2017,\n              &lt;https://www.rfc-editor.org/info/rfc8174&gt;.\n\n<span>Prakash                 Expires 20 February 2027               [Page 18]</span>\n<span>Internet-Draft                     AIP                       August 2026</span>\n\n   [RFC8785]  Rundgren, A., Jordan, B., and S. Erdtman, &quot;JSON\n              Canonicalization Scheme (JCS)&quot;, RFC 8785, June 2020,\n              &lt;https://www.rfc-editor.org/info/rfc8785&gt;.\n\n   [RFC8693]  Jones, M., Nadalin, A., Campbell, B., Bradley, J., and C.\n              Mortimore, &quot;OAuth 2.0 Token Exchange&quot;, RFC 8693, January\n              2020, &lt;https://www.rfc-editor.org/info/rfc8693&gt;.\n\n11.2.  Informative References\n\n   [SPIFFE]   Cloud Native Computing Foundation, &quot;Secure Production\n              Identity Framework for Everyone (SPIFFE)&quot;, 2026,\n              &lt;https://spiffe.io/&gt;.\n\n   [I-D.ietf-wimse-arch]\n              IETF WIMSE Working Group, &quot;Workload Identity in a Multi\n              System Environment (WIMSE) Architecture&quot;, Work in\n              Progress, Internet-Draft, draft-ietf-wimse-arch, 2026,\n              &lt;https://datatracker.ietf.org/doc/html/draft-ietf-wimse-\n              arch&gt;.\n\n   [I-D.ietf-wimse-wpt]\n              IETF WIMSE Working Group, &quot;WIMSE Workload Proof Token&quot;,\n              Work in Progress, Internet-Draft, draft-ietf-wimse-wpt,\n              2026, &lt;https://datatracker.ietf.org/doc/html/draft-ietf-\n              wimse-wpt&gt;.\n\n   [I-D.reece-wimse-cross-org-delegation]\n              Reece, M., &quot;Cross-Organizational Delegation for Workload\n              and Agent Identity: Problem Statement and Requirements&quot;,\n              Work in Progress, Internet-Draft, draft-reece-wimse-cross-\n              org-delegation-00, June 2026,\n              &lt;https://datatracker.ietf.org/doc/html/draft-reece-wimse-\n              cross-org-delegation-00&gt;.\n\n   [I-D.rampalli-pedigree]\n              Rampalli, K., &quot;PEDIGREE: Verifiable Delegation Identity\n              for Agentic AI Systems&quot;, Work in Progress, Internet-Draft,\n              draft-rampalli-pedigree, 2026,\n              &lt;https://datatracker.ietf.org/doc/html/draft-rampalli-\n              pedigree&gt;.\n\n   [BISCUIT]  Music, G., &quot;Biscuit Authorization Token&quot;, 2024,\n              &lt;https://www.biscuitsec.org/&gt;.\n\n<span>Prakash                 Expires 20 February 2027               [Page 19]</span>\n<span>Internet-Draft                     AIP                       August 2026</span>\n\n   [AIP-PAPER]\n              Prakash, S., &quot;AIP: Agent Identity Protocol for Verifiable\n              Delegation Across MCP and A2A&quot;, 27 March 2026,\n              &lt;https://arxiv.org/abs/2603.24775&gt;.\n\n<span>Appendix A.  Cross-Organization Delegation Requirements Mapping</span>\n\n   [I-D.reece-wimse-cross-org-delegation] enumerates nine requirements\n   for delegation between organizations that share no operator, no\n   runtime, and no bilateral agreement.  This appendix maps AIP against\n   them.  Verdicts are stated conditionally where the mechanism depends\n   on deployment choices, and gaps are named rather than argued around.\n\n   Other proposals address overlapping parts of the same problem,\n   including [I-D.rampalli-pedigree].  The requirements themselves,\n   rather than any one mechanism, are the useful common ground, and\n   several of the gaps identified below are shared across proposals.\n\n   R1, Recursive attenuation: MET.  Step V4 of Section 4 requires a\n      structural walk confirming that each hop is a subset of its\n      predecessor across scope, budget, time, and domains, verifiable\n      from the conveyed authority alone.  The canonical encoding in\n      Section 3.4.1 additionally makes scope widening impossible by\n      construction, since the authorized set is the intersection of per-\n      block allowlists.\n\n   R2, Cross-organizational verification: MET.  An aip:web: issuer\n      publishes its key at a location derived from its own DNS name, and\n      a relying party resolves it over HTTPS with no prior arrangement.\n      An aip:key: issuer needs no resolution at all.  Neither requires a\n      federation relationship established in advance of the interaction.\n\n   R3, No runtime callback: MET, with caching.  Once the issuer&#x27;s\n      identity document is held, verification is local.  Documents are\n      cacheable, so the originating organization is not on the critical\n      path.  The exception is revocation freshness, which R7 addresses.\n\n   R4, Proof of possession: NOT MET by this document.  An AIP token is a\n      bearer credential, as stated in Section 5.3.  Binding the token to\n      a key requires a transport or message layer mechanism.  This\n      document deliberately does not define one, and points instead at\n      [I-D.ietf-wimse-wpt] and HTTP message signatures.\n\n   R5, Principal binding and invariance: MET when declared.  Block 0 MAY\n      declare a principal, and V4 requires that no subsequent block\n      declare a different one.  A chain that omits the principal conveys\n      agent authority only and does not satisfy R5.\n\n<span>Prakash                 Expires 20 February 2027               [Page 20]</span>\n<span>Internet-Draft                     AIP                       August 2026</span>\n\n   R6, Dual-axis authorization: NOT MET, and out of scope.  AIP conveys\n      the agent&#x27;s authority and the identity of the bound principal.  It\n      does not carry the principal&#x27;s entitlements, and a verifier cannot\n      evaluate them from the token.  Composing the two axes is the\n      relying party&#x27;s responsibility.  Naming this rather than claiming\n      it seems more useful to the working group.\n\n   R7, Authentic, bounded-staleness revocation: MET.  Step V7 requires\n      signed revocation responses, so authenticity does not depend on\n      transport trust, and requires verifiers to be configurable with a\n      maximum staleness and to fail closed beyond it.\n\n   R8, Tamper-evident, composable audit: MET.  Each delegation block\n      records delegator, delegate, and a non-empty context, and\n      completion blocks record outcome and cost.  Because blocks are\n      signed in sequence, a participant&#x27;s own record cannot be altered\n      undetectably by a later participant, and the chain composes into\n      an end-to-end account.\n\n   R9, Format and transport agnosticism: MET.  Compact mode is a JWT and\n      chained mode is a Biscuit token; neither presupposes a transport.\n      Bindings are specified for MCP, A2A, and generic HTTP, and the\n      identity layer is uniform across them.\n\n   Summarising the gaps: AIP does not by itself prove possession (R4) or\n   evaluate principal entitlements (R6).  Both are shared with other\n   proposals in this space and both are better solved by composition\n   than by any one document.\n\n<span>Appendix B.  Changes from draft-prakash-aip-00</span>\n\n   *  Added Section 4, a normative verification algorithm with ordered\n      steps V1 through V7 and defined error codes.  Draft-00 asserted\n      that verifiers must check attenuation at every hop without\n      specifying how, which left the requirement open to divergent\n      readings.\n\n   *  Added Section 3.4.1, fixing the exact Datalog each implementation\n      must emit for the Simple profile.  Draft-00 named canonical\n      templates without normative form, and independent implementations\n      diverged.\n\n   *  Changed budget from a Datalog check to a budget_ceiling fact\n      verified structurally in V4, and stated plainly that ceiling\n      verification is not spend enforcement.  The previous encoding\n      could not express the intended comparison.\n\n<span>Prakash                 Expires 20 February 2027               [Page 21]</span>\n<span>Internet-Draft                     AIP                       August 2026</span>\n\n   *  Added an OPTIONAL principal fact with an invariance rule,\n      addressing principal binding along a chain.\n\n   *  Added Section 5 describing workload-attested anchoring, the\n      relationship to workload identity systems, and the relationship to\n      token exchange.\n\n   *  Stated explicitly that AIP tokens are bearer credentials and that\n      verification does not authenticate the presenter.\n\n   *  Added bounded-staleness and signed-response requirements for\n      revocation.\n\n   *  Added Appendix A.\n\n<span>Acknowledgements</span>\n\n   The Biscuit authorization token specification influenced the chained\n   mode design.  The MCP and A2A protocol teams provided the agent\n   communication infrastructure that AIP extends.\n\n<span>Author&#x27;s Address</span>\n\n   Sunil Prakash\n   Independent\n   Email: sunil@sunilprakash.com\n   URI:   https://sunilprakash.com\n\n<span>Prakash                 Expires 20 February 2027               [Page 22]</span>\n</pre>\n                </div>\n            </div>\n            \n        \n    \n                    \n                </div>\n            </div>\n        </main>\n        \n            <footer class=\"col-md-12 col-sm-12 border-top mt-5 py-5 bg-light-subtle text-center position-sticky\">\n                <a href=\"https://www.ietf.org/\" class=\"p-3\">IETF</a>\n                <a href=\"https://www.ietf.org/iesg/\" class=\"p-3\">IESG</a>\n                <a href=\"https://www.iab.org/\" class=\"p-3\">IAB</a>\n                <a href=\"https://www.irtf.org/\" class=\"p-3\">IRTF</a>\n                <a href=\"https://www.ietf.org/llc/\" class=\"p-3 text-nowrap\">IETF LLC</a>\n                <a href=\"https://trustee.ietf.org/\" class=\"p-3 text-nowrap\">IETF Trust</a>\n                <a href=\"https://www.rfc-editor.org/\" class=\"p-3 text-nowrap\">RFC Editor</a>\n                <a href=\"https://www.iana.org/\" class=\"p-3\">IANA</a>\n                <a href=\"https://www.ietf.org/privacy-statement/\" class=\"p-3 text-nowrap\">Privacy Statement</a>\n                <div class=\"small text-body-secondary py-3\">\n                    \n                        <a class=\"mx-2\" href=\"/release/about\">About IETF Datatracker</a>\n                        <span class=\"mx-2\">\n                            \n                                <a href=\"https://github.com/ietf-tools/datatracker/releases/tag/12.74.0\">\n                            \n                            Version 12.74.0\n                            (release - 9578423)\n                            \n                                </a>\n                            \n                        </span>\n                    \n                    <a class=\"mx-2\" href=\"https://status.ietf.org\" target=\"_blank\">System Status</a>\n                    <span class=\"mx-2 text-danger\">\n                        <i class=\"bi bi-bug\"></i>\n                        Report a bug:\n                        <a class=\"text-reset\" target=\"_blank\" href=\"https://github.com/ietf-tools/datatracker/issues/new/choose\">GitHub</a>\n                        \n                            <a class=\"text-reset\" href=\"mailto:tools-help@ietf.org\">Email</a>\n                        \n                    </span>\n                    \n                </div>\n            </footer>\n        \n        \n        <script src=\"https://static.ietf.org/dt/12.74.0/ietf/js/d3.js\">\n        </script>\n        <script src=\"https://static.ietf.org/dt/12.74.0/ietf/js/document_timeline.js\">\n        </script>\n    \n        <script src=\"https://static.ietf.org/dt/12.74.0/ietf/js/select2.js\"></script>\n        <script src=\"https://static.ietf.org/dt/12.74.0/ietf/js/navbar-doc-search.js\"></script>\n      \n<script>\n  var _paq = window._paq || [];\n  \n  _paq.push(['disableCookies']);\n  _paq.push(['trackPageView']);\n  _paq.push(['enableLinkTracking']);\n  (function() {\n    var u=\"//analytics.ietf.org/\";\n    _paq.push(['setTrackerUrl', u+'matomo.php']);\n    _paq.push(['setSiteId', 7]);\n    var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\n    g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);\n  })();\n</script>\n<noscript><p><img src=\"//analytics.ietf.org/matomo.php?idsite=7\" style=\"border:0;\" alt=\"\" /></p></noscript>\n\n    <script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML=\"window.__CF$cv$params={r:'a38dedcbeef6ced9',t:'MTc4OTAzODAyNQ=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);\";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script></body>\n</html>\n","snapshot_chars":85779,"live_check":"matches"}]}