6
6
< link href ="https://www.w3.org/StyleSheets/TR/2021/cg-draft " rel ="stylesheet ">
7
7
< meta content ="Bikeshed version 82ce88815, updated Thu Sep 7 16:33:55 2023 -0700 " name ="generator ">
8
8
< link href ="https://wicg.github.io/trust-token-api/ " rel ="canonical ">
9
- < meta content ="ae07cb54ee14b9c74c378cf0cd1a8bed06e4c535 " name ="document-revision ">
9
+ < meta content ="35305251347e60ffa8f1101721d1edad66e849d4 " name ="document-revision ">
10
10
< style > /* Boilerplate: style-autolinks */
11
11
.css .css , .property .property , .descriptor .descriptor {
12
12
color : var (--a-normal-text );
647
647
< div class ="head ">
648
648
< p data-fill-with ="logo "> < a class ="logo " href ="https://www.w3.org/ "> < img alt ="W3C " height ="48 " src ="https://www.w3.org/StyleSheets/TR/2021/logos/W3C " width ="72 "> </ a > </ p >
649
649
< h1 class ="p-name no-ref " id ="title "> Private State Token API</ h1 >
650
- < p id ="w3c-state "> < a href ="https://www.w3.org/standards/types#CG-DRAFT "> Draft Community Group Report</ a > , < time class ="dt-updated " datetime ="2024-06 -18 "> 18 June 2024</ time > </ p >
650
+ < p id ="w3c-state "> < a href ="https://www.w3.org/standards/types#CG-DRAFT "> Draft Community Group Report</ a > , < time class ="dt-updated " datetime ="2024-07 -18 "> 18 July 2024</ time > </ p >
651
651
< div data-fill-with ="spec-metadata ">
652
652
< dl >
653
653
< dt > This version:
@@ -765,7 +765,8 @@ <h2 class="no-num no-toc no-ref" id="contents">Table of Contents</h2>
765
765
< a href ="#security "> < span class ="secno "> 14</ span > < span class ="content "> Security Considerations</ span > </ a >
766
766
< ol class ="toc ">
767
767
< li > < a href ="#token-exhaustion "> < span class ="secno "> 14.1</ span > < span class ="content "> Preventing Token Exhaustion</ span > </ a >
768
- < li > < a href ="#preventing-double-spend "> < span class ="secno "> 14.2</ span > < span class ="content "> Preventing Double Spending</ span > </ a >
768
+ < li > < a href ="#issuer-exhaustion "> < span class ="secno "> 14.2</ span > < span class ="content "> Preventing Issuer Exhaustion</ span > </ a >
769
+ < li > < a href ="#preventing-double-spend "> < span class ="secno "> 14.3</ span > < span class ="content "> Preventing Double Spending</ span > </ a >
769
770
</ ol >
770
771
< li >
771
772
< a href ="#iana-considerations "> < span class ="secno "> 15</ span > < span class ="content "> IANA Considerations</ span > </ a >
@@ -1861,7 +1862,10 @@ <h3 class="heading settled" data-level="14.1" id="token-exhaustion"><span class=
1861
1862
operations. In the context of a given origin, two redemptions are allowed initially. However,
1862
1863
the third redemption is only allowed once more than an < a data-link-type ="dfn " href ="https://infra.spec.whatwg.org/#implementation-defined " id ="ref-for-implementation-defined⑤ "> implementation-defined</ a > amount of time,
1863
1864
usually 48 hours, have elapsed since the first redemption.</ p >
1864
- < h3 class ="heading settled " data-level ="14.2 " id ="preventing-double-spend "> < span class ="secno "> 14.2. </ span > < span class ="content "> Preventing Double Spending</ span > < a class ="self-link " href ="#preventing-double-spend "> </ a > </ h3 >
1865
+ < h3 class ="heading settled " data-level ="14.2 " id ="issuer-exhaustion "> < span class ="secno "> 14.2. </ span > < span class ="content "> Preventing Issuer Exhaustion</ span > < a class ="self-link " href ="#issuer-exhaustion "> </ a > </ h3 >
1866
+ Competing scripts might race to call < code > hasPrivateToken(issuer)</ code > to ensure their < var > issuer</ var > enters the < a data-link-type ="dfn " href ="#issuerassociations " id ="ref-for-issuerassociations⑧ "> issuerAssociations</ a > < a data-link-type ="dfn " href ="https://infra.spec.whatwg.org/#ordered-map " id ="ref-for-ordered-map⑦ "> map</ a > before the < var > issuer</ var > of others given a limit of two per < a data-link-type ="dfn " href ="https://html.spec.whatwg.org/multipage/webappapis.html#concept-environment-top-level-origin " id ="ref-for-concept-environment-top-level-origin⑥ "> top-level origin</ a > . To control this process, the < a data-link-type ="dfn " href ="https://html.spec.whatwg.org/multipage/webappapis.html#concept-environment-top-level-origin " id ="ref-for-concept-environment-top-level-origin⑦ "> top-level origin</ a > could call < code > hasPrivateToken(issuer)</ code > up to twice before any other JavaScript is included
1867
+ to ensure their preferred < var > issuer</ var > s are available.
1868
+ < h3 class ="heading settled " data-level ="14.3 " id ="preventing-double-spend "> < span class ="secno "> 14.3. </ span > < span class ="content "> Preventing Double Spending</ span > < a class ="self-link " href ="#preventing-double-spend "> </ a > </ h3 >
1865
1869
< p > Issuers can verify that each token is seen only once, because every redemption
1866
1870
is sent to the same token issuer. This means that even if a malicious piece of
1867
1871
malware exfiltrates all of a user’s tokens, the tokens will run out over time.
@@ -2578,7 +2582,7 @@ <h2 class="no-num no-ref heading settled" id="idl-index"><span class="content">I
2578
2582
window . dfnpanelData [ 'e99bd18e' ] = { "dfnID" : "e99bd18e" , "url" : "https://html.spec.whatwg.org/multipage/webappapis.html#concept-relevant-global" , "dfnText" : "relevant global object" , "refSections" : [ { "refs" : [ { "id" : "ref-for-concept-relevant-global" } ] , "title" : "11.1. Token Query" } , { "refs" : [ { "id" : "ref-for-concept-relevant-global\u2460" } ] , "title" : "11.2. Redemption Record Query" } ] , "external" : true } ;
2579
2583
window . dfnpanelData [ '9c4c1e66' ] = { "dfnID" : "9c4c1e66" , "url" : "https://html.spec.whatwg.org/multipage/webappapis.html#relevant-settings-object" , "dfnText" : "relevant settings object" , "refSections" : [ { "refs" : [ { "id" : "ref-for-relevant-settings-object" } ] , "title" : "11.1. Token Query" } , { "refs" : [ { "id" : "ref-for-relevant-settings-object\u2460" } ] , "title" : "11.2. Redemption Record Query" } ] , "external" : true } ;
2580
2584
window . dfnpanelData [ '65181da8' ] = { "dfnID" : "65181da8" , "url" : "https://html.spec.whatwg.org/multipage/webappapis.html#secure-context" , "dfnText" : "secure context" , "refSections" : [ { "refs" : [ { "id" : "ref-for-secure-context" } ] , "title" : "9.1. Creating An Issue Request" } , { "refs" : [ { "id" : "ref-for-secure-context\u2460" } ] , "title" : "10. Redeeming Tokens" } , { "refs" : [ { "id" : "ref-for-secure-context\u2461" } ] , "title" : "10.2. Redemption Records" } , { "refs" : [ { "id" : "ref-for-secure-context\u2462" } ] , "title" : "11.1. Token Query" } , { "refs" : [ { "id" : "ref-for-secure-context\u2463" } ] , "title" : "11.2. Redemption Record Query" } ] , "external" : true } ;
2581
- window . dfnpanelData [ 'c63519ed' ] = { "dfnID" : "c63519ed" , "url" : "https://html.spec.whatwg.org/multipage/webappapis.html#concept-environment-top-level-origin" , "dfnText" : "top-level origin" , "refSections" : [ { "refs" : [ { "id" : "ref-for-concept-environment-top-level-origin" } ] , "title" : "9.1. Creating An Issue Request" } , { "refs" : [ { "id" : "ref-for-concept-environment-top-level-origin\u2460" } ] , "title" : "10. Redeeming Tokens" } , { "refs" : [ { "id" : "ref-for-concept-environment-top-level-origin\u2461" } ] , "title" : "10.1. Handling Redeem Responses" } , { "refs" : [ { "id" : "ref-for-concept-environment-top-level-origin\u2462" } ] , "title" : "10.2. Redemption Records" } , { "refs" : [ { "id" : "ref-for-concept-environment-top-level-origin\u2463" } ] , "title" : "11.1. Token Query" } , { "refs" : [ { "id" : "ref-for-concept-environment-top-level-origin\u2464" } ] , "title" : "11.2. Redemption Record Query" } ] , "external" : true } ;
2585
+ window . dfnpanelData [ 'c63519ed' ] = { "dfnID" : "c63519ed" , "url" : "https://html.spec.whatwg.org/multipage/webappapis.html#concept-environment-top-level-origin" , "dfnText" : "top-level origin" , "refSections" : [ { "refs" : [ { "id" : "ref-for-concept-environment-top-level-origin" } ] , "title" : "9.1. Creating An Issue Request" } , { "refs" : [ { "id" : "ref-for-concept-environment-top-level-origin\u2460" } ] , "title" : "10. Redeeming Tokens" } , { "refs" : [ { "id" : "ref-for-concept-environment-top-level-origin\u2461" } ] , "title" : "10.1. Handling Redeem Responses" } , { "refs" : [ { "id" : "ref-for-concept-environment-top-level-origin\u2462" } ] , "title" : "10.2. Redemption Records" } , { "refs" : [ { "id" : "ref-for-concept-environment-top-level-origin\u2463" } ] , "title" : "11.1. Token Query" } , { "refs" : [ { "id" : "ref-for-concept-environment-top-level-origin\u2464" } ] , "title" : "11.2. Redemption Record Query" } , { "refs" : [ { "id" : "ref-for-concept-environment-top-level-origin\u2465" } , { "id" : "ref-for-concept-environment-top-level-origin\u2466" } ] , "title" : "14.2. Preventing Issuer Exhaustion" } ] , "external" : true } ;
2582
2586
window . dfnpanelData [ '53275e46' ] = { "dfnID" : "53275e46" , "url" : "https://infra.spec.whatwg.org/#list-append" , "dfnText" : "append" , "refSections" : [ { "refs" : [ { "id" : "ref-for-list-append" } , { "id" : "ref-for-list-append\u2460" } , { "id" : "ref-for-list-append\u2461" } , { "id" : "ref-for-list-append\u2462" } , { "id" : "ref-for-list-append\u2463" } , { "id" : "ref-for-list-append\u2464" } ] , "title" : "5. Algorithms" } , { "refs" : [ { "id" : "ref-for-list-append\u2465" } ] , "title" : "10.2. Redemption Records" } ] , "external" : true } ;
2583
2587
window . dfnpanelData [ '77b4c09a' ] = { "dfnID" : "77b4c09a" , "url" : "https://infra.spec.whatwg.org/#assert" , "dfnText" : "assert" , "refSections" : [ { "refs" : [ { "id" : "ref-for-assert" } ] , "title" : "6.3. Modifications to http-network-or-cache fetch" } ] , "external" : true } ;
2584
2588
window . dfnpanelData [ '3de9e659' ] = { "dfnID" : "3de9e659" , "url" : "https://infra.spec.whatwg.org/#byte-sequence" , "dfnText" : "byte sequence" , "refSections" : [ { "refs" : [ { "id" : "ref-for-byte-sequence" } , { "id" : "ref-for-byte-sequence\u2460" } , { "id" : "ref-for-byte-sequence\u2461" } , { "id" : "ref-for-byte-sequence\u2462" } , { "id" : "ref-for-byte-sequence\u2463" } , { "id" : "ref-for-byte-sequence\u2464" } , { "id" : "ref-for-byte-sequence\u2465" } , { "id" : "ref-for-byte-sequence\u2466" } , { "id" : "ref-for-byte-sequence\u2467" } , { "id" : "ref-for-byte-sequence\u2468" } , { "id" : "ref-for-byte-sequence\u2460\u24ea" } , { "id" : "ref-for-byte-sequence\u2460\u2460" } , { "id" : "ref-for-byte-sequence\u2460\u2461" } , { "id" : "ref-for-byte-sequence\u2460\u2462" } , { "id" : "ref-for-byte-sequence\u2460\u2463" } ] , "title" : "5. Algorithms" } , { "refs" : [ { "id" : "ref-for-byte-sequence\u2460\u2464" } ] , "title" : "6.2. Modifications to request" } , { "refs" : [ { "id" : "ref-for-byte-sequence\u2460\u2465" } ] , "title" : "10.2. Redemption Records" } ] , "external" : true } ;
@@ -2591,7 +2595,7 @@ <h2 class="no-num no-ref heading settled" id="idl-index"><span class="content">I
2591
2595
window . dfnpanelData [ '860300d4' ] = { "dfnID" : "860300d4" , "url" : "https://infra.spec.whatwg.org/#implementation-defined" , "dfnText" : "implementation-defined" , "refSections" : [ { "refs" : [ { "id" : "ref-for-implementation-defined" } ] , "title" : "3.1. Issuer Key Fetching/Registration" } , { "refs" : [ { "id" : "ref-for-implementation-defined\u2460" } ] , "title" : "5. Algorithms" } , { "refs" : [ { "id" : "ref-for-implementation-defined\u2461" } ] , "title" : "9.1. Creating An Issue Request" } , { "refs" : [ { "id" : "ref-for-implementation-defined\u2462" } ] , "title" : "10. Redeeming Tokens" } , { "refs" : [ { "id" : "ref-for-implementation-defined\u2463" } ] , "title" : "13.3.1. Mitigation: Dynamic Issuance/Redemption Limits" } , { "refs" : [ { "id" : "ref-for-implementation-defined\u2464" } ] , "title" : "14.1. Preventing Token Exhaustion" } ] , "external" : true } ;
2592
2596
window . dfnpanelData [ '36333997' ] = { "dfnID" : "36333997" , "url" : "https://infra.spec.whatwg.org/#byte-sequence-length" , "dfnText" : "length" , "refSections" : [ { "refs" : [ { "id" : "ref-for-byte-sequence-length" } ] , "title" : "5. Algorithms" } ] , "external" : true } ;
2593
2597
window . dfnpanelData [ '649608b9' ] = { "dfnID" : "649608b9" , "url" : "https://infra.spec.whatwg.org/#list" , "dfnText" : "list" , "refSections" : [ { "refs" : [ { "id" : "ref-for-list" } , { "id" : "ref-for-list\u2460" } , { "id" : "ref-for-list\u2461" } , { "id" : "ref-for-list\u2462" } , { "id" : "ref-for-list\u2463" } , { "id" : "ref-for-list\u2464" } , { "id" : "ref-for-list\u2465" } , { "id" : "ref-for-list\u2466" } , { "id" : "ref-for-list\u2467" } ] , "title" : "5. Algorithms" } ] , "external" : true } ;
2594
- window . dfnpanelData [ '3fca5a9e' ] = { "dfnID" : "3fca5a9e" , "url" : "https://infra.spec.whatwg.org/#ordered-map" , "dfnText" : "map" , "refSections" : [ { "refs" : [ { "id" : "ref-for-ordered-map" } ] , "title" : "3. Issuer Public Keys" } , { "refs" : [ { "id" : "ref-for-ordered-map\u2460" } , { "id" : "ref-for-ordered-map\u2461" } , { "id" : "ref-for-ordered-map\u2462" } , { "id" : "ref-for-ordered-map\u2463" } , { "id" : "ref-for-ordered-map\u2464" } ] , "title" : "5. Algorithms" } , { "refs" : [ { "id" : "ref-for-ordered-map\u2465" } ] , "title" : "10.2. Redemption Records" } ] , "external" : true } ;
2598
+ window . dfnpanelData [ '3fca5a9e' ] = { "dfnID" : "3fca5a9e" , "url" : "https://infra.spec.whatwg.org/#ordered-map" , "dfnText" : "map" , "refSections" : [ { "refs" : [ { "id" : "ref-for-ordered-map" } ] , "title" : "3. Issuer Public Keys" } , { "refs" : [ { "id" : "ref-for-ordered-map\u2460" } , { "id" : "ref-for-ordered-map\u2461" } , { "id" : "ref-for-ordered-map\u2462" } , { "id" : "ref-for-ordered-map\u2463" } , { "id" : "ref-for-ordered-map\u2464" } ] , "title" : "5. Algorithms" } , { "refs" : [ { "id" : "ref-for-ordered-map\u2465" } ] , "title" : "10.2. Redemption Records" } , { "refs" : [ { "id" : "ref-for-ordered-map\u2466" } ] , "title" : "14.2. Preventing Issuer Exhaustion" } ] , "external" : true } ;
2595
2599
window . dfnpanelData [ '99c988d6' ] = { "dfnID" : "99c988d6" , "url" : "https://infra.spec.whatwg.org/#list-remove" , "dfnText" : "remove" , "refSections" : [ { "refs" : [ { "id" : "ref-for-list-remove" } , { "id" : "ref-for-list-remove\u2460" } ] , "title" : "5. Algorithms" } ] , "external" : true } ;
2596
2600
window . dfnpanelData [ '0e6b2056' ] = { "dfnID" : "0e6b2056" , "url" : "https://infra.spec.whatwg.org/#map-set" , "dfnText" : "set" , "refSections" : [ { "refs" : [ { "id" : "ref-for-map-set" } , { "id" : "ref-for-map-set\u2460" } ] , "title" : "5. Algorithms" } , { "refs" : [ { "id" : "ref-for-map-set\u2461" } ] , "title" : "10.2. Redemption Records" } ] , "external" : true } ;
2597
2601
window . dfnpanelData [ '0204d188' ] = { "dfnID" : "0204d188" , "url" : "https://infra.spec.whatwg.org/#list-size" , "dfnText" : "size" , "refSections" : [ { "refs" : [ { "id" : "ref-for-list-size" } , { "id" : "ref-for-list-size\u2460" } , { "id" : "ref-for-list-size\u2461" } ] , "title" : "5. Algorithms" } ] , "external" : true } ;
@@ -2638,7 +2642,7 @@ <h2 class="no-num no-ref heading settled" id="idl-index"><span class="content">I
2638
2642
window . dfnpanelData [ 'redeemresponse' ] = { "dfnID" : "redeemresponse" , "url" : "#redeemresponse" , "dfnText" : "RedeemResponse" , "refSections" : [ { "refs" : [ { "id" : "ref-for-redeemresponse" } ] , "title" : "10.1. Handling Redeem Responses" } ] , "external" : false } ;
2639
2643
window . dfnpanelData [ 'pstfinalize' ] = { "dfnID" : "pstfinalize" , "url" : "#pstfinalize" , "dfnText" : "PSTFinalize" , "refSections" : [ { "refs" : [ { "id" : "ref-for-pstfinalize" } ] , "title" : "5. Algorithms" } ] , "external" : false } ;
2640
2644
window . dfnpanelData [ 'pstevaluate' ] = { "dfnID" : "pstevaluate" , "url" : "#pstevaluate" , "dfnText" : "PSTEvaluate" , "refSections" : [ { "refs" : [ { "id" : "ref-for-pstevaluate" } ] , "title" : "4. VOPRF Methods" } ] , "external" : false } ;
2641
- window . dfnpanelData [ 'issuerassociations' ] = { "dfnID" : "issuerassociations" , "url" : "#issuerassociations" , "dfnText" : "issuerAssociations" , "refSections" : [ { "refs" : [ { "id" : "ref-for-issuerassociations" } , { "id" : "ref-for-issuerassociations\u2460" } , { "id" : "ref-for-issuerassociations\u2461" } , { "id" : "ref-for-issuerassociations\u2462" } , { "id" : "ref-for-issuerassociations\u2463" } , { "id" : "ref-for-issuerassociations\u2464" } , { "id" : "ref-for-issuerassociations\u2465" } , { "id" : "ref-for-issuerassociations\u2466" } ] , "title" : "5. Algorithms" } ] , "external" : false } ;
2645
+ window . dfnpanelData [ 'issuerassociations' ] = { "dfnID" : "issuerassociations" , "url" : "#issuerassociations" , "dfnText" : "issuerAssociations" , "refSections" : [ { "refs" : [ { "id" : "ref-for-issuerassociations" } , { "id" : "ref-for-issuerassociations\u2460" } , { "id" : "ref-for-issuerassociations\u2461" } , { "id" : "ref-for-issuerassociations\u2462" } , { "id" : "ref-for-issuerassociations\u2463" } , { "id" : "ref-for-issuerassociations\u2464" } , { "id" : "ref-for-issuerassociations\u2465" } , { "id" : "ref-for-issuerassociations\u2466" } ] , "title" : "5. Algorithms" } , { "refs" : [ { "id" : "ref-for-issuerassociations\u2467" } ] , "title" : "14.2. Preventing Issuer Exhaustion" } ] , "external" : false } ;
2642
2646
window . dfnpanelData [ 'determine-whether-associating-an-issuer-would-exceed-the-top-level-limit' ] = { "dfnID" : "determine-whether-associating-an-issuer-would-exceed-the-top-level-limit" , "url" : "#determine-whether-associating-an-issuer-would-exceed-the-top-level-limit" , "dfnText" : "determine whether associating an issuer would exceed the top-level limit" , "refSections" : [ { "refs" : [ { "id" : "ref-for-determine-whether-associating-an-issuer-would-exceed-the-top-level-limit" } ] , "title" : "9.1. Creating An Issue Request" } , { "refs" : [ { "id" : "ref-for-determine-whether-associating-an-issuer-would-exceed-the-top-level-limit\u2460" } ] , "title" : "10. Redeeming Tokens" } , { "refs" : [ { "id" : "ref-for-determine-whether-associating-an-issuer-would-exceed-the-top-level-limit\u2461" } ] , "title" : "11.1. Token Query" } ] , "external" : false } ;
2643
2647
window . dfnpanelData [ 'associate-the-issuer' ] = { "dfnID" : "associate-the-issuer" , "url" : "#associate-the-issuer" , "dfnText" : "associate the issuer" , "refSections" : [ { "refs" : [ { "id" : "ref-for-associate-the-issuer" } ] , "title" : "9.1. Creating An Issue Request" } , { "refs" : [ { "id" : "ref-for-associate-the-issuer\u2460" } ] , "title" : "10. Redeeming Tokens" } , { "refs" : [ { "id" : "ref-for-associate-the-issuer\u2461" } ] , "title" : "11.1. Token Query" } ] , "external" : false } ;
2644
2648
window . dfnpanelData [ 'is-associated-with' ] = { "dfnID" : "is-associated-with" , "url" : "#is-associated-with" , "dfnText" : "is associated with" , "refSections" : [ { "refs" : [ { "id" : "ref-for-is-associated-with" } ] , "title" : "11.2. Redemption Record Query" } ] , "external" : false } ;
0 commit comments