[OAUTH-WG] Re: WGLC for Token Status List

Rohan Mahy <rohan.mahy@gmail.com> Fri, 07 February 2025 21:31 UTC

Return-Path: <rohan.mahy@gmail.com>
X-Original-To: oauth@ietfa.amsl.com
Delivered-To: oauth@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 5EEC5C1E5F22 for <oauth@ietfa.amsl.com>; Fri, 7 Feb 2025 13:31:00 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.105
X-Spam-Level:
X-Spam-Status: No, score=-2.105 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01, URIBL_BLOCKED=0.001, URIBL_DBL_BLOCKED_OPENDNS=0.001, URIBL_ZEN_BLOCKED_OPENDNS=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com
Received: from mail.ietf.org ([50.223.129.194]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Koism8DDIGaN for <oauth@ietfa.amsl.com>; Fri, 7 Feb 2025 13:30:56 -0800 (PST)
Received: from mail-ed1-x52a.google.com (mail-ed1-x52a.google.com [IPv6:2a00:1450:4864:20::52a]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (P-256) server-digest SHA256) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id D17B4C1E5F36 for <oauth@ietf.org>; Fri, 7 Feb 2025 13:30:50 -0800 (PST)
Received: by mail-ed1-x52a.google.com with SMTP id 4fb4d7f45d1cf-5dccaaca646so4856957a12.0 for <oauth@ietf.org>; Fri, 07 Feb 2025 13:30:50 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738963849; x=1739568649; darn=ietf.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=lA2DgMZ/1fc1JlZQgpjb1W9BNkeZKxh7YV0/OKQxyp8=; b=IPcAzdPPzA0WpbAqJHiWZKfYQWXCA9ckS4jpoG3chjmqZdB6NLYJhRwZZ7qEstRiCX q0+XFydoitIS1bUfIo0HvULHPTsWskP/lx+jcJsqoj/Oyp+yXepxZskVldoyI4BzsRsi GQ9vC8/uu4vVLq5HG44ljR9hrxppS/wBs/2vZuOVjeFIr1uYV05moeCzXZrln/dTN0cn i9aQzkfpNB0EHUjF0kXmiHDS/flCTwKgCpX/6xuplik7oT4CdMGzMwf25ndhMo0uQXwX V7qsHEtJSuNrGyrnReNTvRKVec/w2LBEduY5Cs9LbinwfBVRv93FT/5PQwYRJOZ+sKtH 6y+A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738963849; x=1739568649; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=lA2DgMZ/1fc1JlZQgpjb1W9BNkeZKxh7YV0/OKQxyp8=; b=bCy7Kp0REhx5c6gIFOSOviBU6XW8qdhtyOdGdK4pJg4wMJ5wUQIn01ZesBjOFfWybh AAT4w+iGmPdhO/8dLStOAZHIUBguGkIl30ShVl01gTXtc37YdWBf8ruwBGovWDTUlHCR KmqsGQhOdrYt1tBCrYr1hTlM8tROFmghvfvRXc21g8ykm5GFjcgsHJ0OhnfgjpMVGjtN Jme8HVq5l81DYyHfK7FxwBU/i5Qoeng0jtwrQjplVNGT3RiiFc4XGyMst2gUKWi3Ko52 QS4ao86rn5YCCsSijuc0uwfGg4T25eevSbKBYzKfn3iqm13EwKODrtsjYk0o7uhiqkA2 iYPQ==
X-Gm-Message-State: AOJu0YxQOTouyXkHg7YOFsTjvR6ukauh+1R4OdkhPzbZhi3UEaZC9mmR dZRUxxZ6kNC5O6I3Kd0ztuKtaFf54oIP+h+32y2hw9lWb08Vux+cAD1R1GwRJBSrHdq3uNa0acR Y/6KFJ3g4dXQaq/MQm+pCaOZ+9fg=
X-Gm-Gg: ASbGnct8JAVSlY0+ed32Jmd9hSXTkBMRQ9d0nD76IOCgOZPWF+YcxCB4G4PTk06zyfI RHAPTn2z03/+aUigRDUi8JXKjq3DuJ2hUDWkkiqvUZQz0WWNyAjnZeGX9YRFSF0PyCbwfQQVp7y 4=
X-Google-Smtp-Source: AGHT+IGtS1FCxeLNj02bPZWdXYFhzxgZ11BHFYFsNtHLaI54P4Ge4Ar9//+VFJCLYlaiDXtYlvRyqP6H+orHSJWTXuk=
X-Received: by 2002:a05:6402:4014:b0:5d9:3118:d0b8 with SMTP id 4fb4d7f45d1cf-5de469cc32amr5501102a12.8.1738963848360; Fri, 07 Feb 2025 13:30:48 -0800 (PST)
MIME-Version: 1.0
References: <CADNypP_kmt2PdOJoUa+TNpYHYbfdyv+j2pteSaHsrPk4oxdqFw@mail.gmail.com> <CAKoiRuadWywURt0BuXb3yLU1Mo-nq95WGHov0dbghr2W4ND9Vw@mail.gmail.com> <2952fd2b-8653-49d9-aec2-2c482678ea4d@posteo.de>
In-Reply-To: <2952fd2b-8653-49d9-aec2-2c482678ea4d@posteo.de>
From: Rohan Mahy <rohan.mahy@gmail.com>
Date: Fri, 07 Feb 2025 13:30:37 -0800
X-Gm-Features: AWEUYZk-feKwjFjQLhdhsFU7X1mQijHTQrdWc6DIaLS0jleQAzmGmgWZn1uu1dM
Message-ID: <CAKoiRuYudcKftD2kxAnV08ZmExkwYzRjsN7iG8Fc6JfJHTfkpQ@mail.gmail.com>
To: Paul Bastian <paul.bastian@posteo.de>
Content-Type: multipart/alternative; boundary="000000000000757b00062d9412a1"
Message-ID-Hash: RBW6PFHMLWR6AZDW6VPNBGNMDTCXPRYI
X-Message-ID-Hash: RBW6PFHMLWR6AZDW6VPNBGNMDTCXPRYI
X-MailFrom: rohan.mahy@gmail.com
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-oauth.ietf.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
CC: oauth@ietf.org
X-Mailman-Version: 3.3.9rc6
Precedence: list
Subject: [OAUTH-WG] Re: WGLC for Token Status List
List-Id: OAUTH WG <oauth.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/oauth/20CND4k8Ticqx3XQGM9wMZicFvg>
List-Archive: <https://mailarchive.ietf.org/arch/browse/oauth>
List-Help: <mailto:oauth-request@ietf.org?subject=help>
List-Owner: <mailto:oauth-owner@ietf.org>
List-Post: <mailto:oauth@ietf.org>
List-Subscribe: <mailto:oauth-join@ietf.org>
List-Unsubscribe: <mailto:oauth-leave@ietf.org>

Hi Paul,
Apparently my review (based on -06)  and your publication of -07 happened
at about the same time. I will reread -07 and provide my feedback soon.

Regarding point 4, I wrote a quick test while having lunch that shows that
a deflate (level=12) compressed bit-stream becomes much more efficient than
a compressed CBOR array, well before the 1.2% average token revocation
percentage on the Internet (the numbers differ slightly on each run because
the bits which are invalid are randomly selected, but are very close each
run):

Tokens  % Revoked  CBOR size   Field size
------  ---------  ---------   ----------
10^4    0.0%              24          29
10^4    0.1%              51          55
10^4    0.3%             112          93
10^4    0.5%             165         128
10^4    0.8%             240         168
10^4    1.0%             284         191
10^4    1.2%             328         206
10^4    1.5%             401         235
10^4    2.0%             510         279
10^4    3.0%             735         331
10^4    5.0%            1167         429

10^5    0.0%              24          47
10^5    0.1%             327         245
10^5    0.3%             833         540
10^5    0.5%            1284         803
10^5    0.8%            1977        1178
10^5    1.0%            2422        1382
10^5    1.2%            2867        1590
10^5    1.5%            3529        1870
10^5    2.0%            4638        2329
10^5    3.0%            6588        2888
10^5    5.0%           10557        3806

10^6    0.0%              24         156
10^6    0.1%            2667        1925
10^6    0.3%            7359        4861
10^6    0.5%           11592        7361
10^6    0.8%           17246       10764
10^6    1.0%           20874       12854
10^6    1.2%           24348       14825
10^6    1.5%           29415       17538
10^6    2.0%           37700       21857
10^6    3.0%           53821       28415
10^6    5.0%           85279       37429

thanks,
-rohan



On Thu, Feb 6, 2025 at 12:11 AM Paul Bastian <paul.bastian@posteo.de> wrote:

> Hi Rohan, thanks for your feedback. Answers are inline:
> On 06.02.25 02:21, Rohan Mahy wrote:
>
> Hi,
> I support the overall goals of this document. I do *not* think the
> document was ready for WGLC; at minimum there are still plenty of TBDs and
> TODOs in the text. Below are some comments:
>
> We do not have any TODOs in the text. We have TBD in the text for values
> that will be defined by IANA registry which is standard procedure in other
> drafts as well.
>
>
> 1. I would prefer we make the document standards track instead of
> informational.
>
> This is correct, this draft has always been planned for the standards
> track, we will fix the metadata to accompany for that.
>
>
> 2. You have to read through to section 6.2 to see how a verifier
> determines the index of a token it receives in the status value array.
> Please add one sentence in the Introduction saying that the index is in the
> referenced token. You could even update the diagram to reflect this.
>
> This in incorrect, the introduction currently contains the following text:
> "Each Referenced Token is allocated an index during issuance that
> represents its position within this bit array. The value of the bit(s) at
> this index corresponds to the Referenced Token's status." We like the other
> idea, we will investigate the idea to add this to the diagram.
>
>
> 3. The document uses status_list (JSON object) and StatusList (CBOR map)
> to refer to the map, but Status List seems to be used to refer to both the
> compressed byte string (in Section 5) and the uncompressed byte array of
> status values (in Section 4 step 2, and Section 4.1 2nd sentence).
>
> This is correct, we will separate, the parts of section 4 that talk about
> the the uncompressed byte array into its own subsection and not use the
> wording Status List for this. Otherwise, through out the rest of the
> document, Status List refers to the compressed byte array as defined in the
> terminology.
>
>
> 4. CRLs (Certificate Revocation Lists) are a list of the serial numbers of
> every invalidated certificate (with a reason code). While a compressed 1 or
> 2 bit status per token tends to be very compact per issued token, it would
> be useful for the draft to show an analysis of what percentage of issued
> tokens would need to be invalid before a status list would be smaller than
> a CRL-like structure that only references invalid indexes in a (possibly
> compressed) ordered list (assuming randomly distributed invalidations).
>
> I have not seen performance or comparative measures like this in many
> other drafts, we have made analysis and performance measures for our
> presentations at IEFT, for example here:
> https://docs.google.com/presentation/d/1m59OC8uKM4nZ14aH2TM9r2mxEhOiP-G5uqzAZ7oOAUk/edit#slide=id.g2318b641e56_0_23
>
> The comparison with the CRL depends on a bunch of parameters and
> assumptions, so it's not that easy.
>
> What does the working group think about including performance metrics
> itself in the draft?
>
>
> 5. There is no discussion of maximum or recommended limits to the size of
> a Status List. Starting ambitiously, idx is a JSON Number, so we should
> probably follow the recommendation in
> https://datatracker.ietf.org/doc/html/rfc8259#section-6 and say it MUST
> NOT be larger than (2^53) - 1, but a 1-bit status list with that many
> indexes would be 10TB with > 10:1 compression. I think the document needs
> to define a reasonable maximum size, and could allow profiles to make that
> smaller.
>
> I haven't seen an guidance like this in CRL draft either and I believe
> that our assumptions about reasonable sizes in 2025 will not hold in 2035,
> so I'm hesitant to add this kind of guidance.
>
>
> 6. I think it is a mistake to compress the entire status_list (JSON
> object) or StatusList (CBOR map). Instead it would be better to compress
> just the status value array (the "lst" field).
>
>    - Naive implementations might try to decompress the entire object/map
>    to get the bit field before trying to read the array.
>    - If you make the "lst" field an uncompressed byte string in JSON, it
>    will need to be base64url encoded *before* you compress it. Then the
>    status_list object would need to be base64url encoded again. That's
>    wasteful and accomplishes nothing as far as I can tell.
>    - Because JSON maps and CBOR maps are encoded differently, compressing
>    the object/map will make it hard to use a status list across token encoding
>    environments. If only the contents of the "lst" field was compressed, it
>    would allow an issuer to generate JWT/CWT pairs with the same index and use
>    one status list between them. (both would be invalidated together).
>
> I think this is a misunderstanding. The Status List from Section 4 is
> already compressed in the Step 3. Section 4.1 about Status List in JSON
> Format has an "lst" field that then contains the compressed byte array,
> which must however be base64-encoded as JSON does not support. byte array.
> Section 4.2 about Status List in CBOR Format has an "lst" field that then
> contains the compressed byte array directly. I don't see how we can be any
> more space-efficient than this. Therefore, JSON and CBOR structures would
> contain the same Status List byte array.
>
> Furthermore, we have test vectors in the Appendix, so that implementations
> can verify correctness.
>
> 7. I am surprised by some details of the CBOR encoding:
>
>    - Traditionally, CWT maps have integer keys for comment values. Why
>    not replace "bits" with 1, and "lst" with 2?
>    - The document registers CWT claim keys 65534 and 65535. Why not ask
>    for unused numbers in the 24-256 range?
>    - It wasn't immediately clear from the text that the status list is a
>    bstr encoding of the compressed serialized map. If we implement my
>    recommendation in #6, this problem goes away.
>
> - We have talked to people from the CBOR world and apparently this is what
> people do today, e.g. in the ISO mdoc world, but we are open for
> discussions here.
> - We have talked to Mike Jones about this, who is one of the designated
> experts for CWT and this was his recommendation
> - We have the text: "lst: REQUIRED. Byte string (Major Type 2) that
> contains the Status List as specified in Section 4
> <https://drafts.oauth.net/draft-ietf-oauth-status-list/draft-ietf-oauth-status-list.html#status-list>."
> which clearly references bstr.
>
> 8. There should be a CDDL snippet for the CBOR. I would be happy to
> provide one once points 6 and 7 are addressed.
>
> If CDDL is requested and helps the understanding, then we can add this to
> the draft.
>
>
> 9. I think it will be important for implementers to have some advice on
> constructing a logical scope for Referenced Tokens to be interoperable, so
> that issuers have good practices for recycling indexes. For example if all
> the tokens with the same status list URL have roughly the same duration of
> validity, cycling through URL paths would eventually allow reuse after all
> previously referenced tokens had expired.
> Is it ok to generate a Status List for 100 tokens, then generate a new
> Status List with the same "referenced token scope" that covers 200 tokens
> (including the first 100 tokens)? If so, that would be good to say.
>
> We have some guidance here:
> https://drafts.oauth.net/draft-ietf-oauth-status-list/draft-ietf-oauth-status-list.html#name-referenced-token-lifecycle
> saying "The lifetime of a Status List Token depends on the lifetime of its
> Referenced Tokens. Once all Referenced Tokens are expired, the Issuer may
> stop serving the Status List Token." We did not want to encourage re-usage
> of indices, as this may introduce security issues.
>
> 10. NIT: Section 6.3 refers to status_list but I think you mean StatusList
>
> The CWT status structure says: "Each data item in the Status CBOR
> structure comprises a key-value pair, where the key must be a CBOR text
> string (Major Type 3) specifying the identifier of the status mechanism and
> the corresponding value defines its contents. This specification defines
> the following data items:", so indeed "status_list" refers to a CBOR text
> string.
>
>
> Thanks,
> -rohan
>
> Thanks for your feedback. Best regards,
>
> Paul+Christian
>
>
>
> On Thu, Jan 2, 2025 at 5:53 AM Rifaat Shekh-Yusef <rifaat.s.ietf@gmail.com>
> wrote:
>
>> All,
>>
>> This is a WG Last Call for the *Token Status List *document.
>> https://datatracker.ietf.org/doc/draft-ietf-oauth-status-list/
>>
>> Please, review this document and reply on the mailing list if you have
>> any comments or concerns, by *Jan 17th*.
>> Note that this document will be discussed during the OAuth WG *interim*
>> on *Jan 13th*.
>>
>> Regards,
>>   Rifaat & Hannes
>>
>> _______________________________________________
>> OAuth mailing list -- oauth@ietf.org
>> To unsubscribe send an email to oauth-leave@ietf.org
>>
>
> _______________________________________________
> OAuth mailing list -- oauth@ietf.org
> To unsubscribe send an email to oauth-leave@ietf.org
>
> _______________________________________________
> OAuth mailing list -- oauth@ietf.org
> To unsubscribe send an email to oauth-leave@ietf.org
>