Denis,
Thanks for the careful read of draft-yossif-psea-01 — I'll address only your 
point 18 here, as the rest concerns a separate draft.
Agreed on the value of a non-normative example for TEE-backed digital 
credential wallets. The intent of the SHOULD on hardware-backed key storage was 
exactly the wallet deployment model — Secure Enclave / StrongBox holding the 
signing key, with the per-action PSEA evidence produced inside the trust anchor 
and the surrounding application unable to forge it.
I'll add a concrete example along these lines to the Security Considerations 
section in -02, covering both the iOS (Secure Enclave + App Attest) and Android 
(StrongBox + Key Attestation) cases, and noting how this composes with platform 
attestation to give the Relying Party a chain from device trust to per-action 
authority.
If you have a preferred framing for the wallet example — particularly with 
respect to EUDI / SD-JWT VC deployment contexts — happy to incorporate it.
Best,

[Mohamad Khalil Yossif, Founder & CEO of Yuthent]
Mohamad Khalil Yossif
Founder & CEO · Yuthent
PSEA Spec Author · IETF draft-yossif-psea
[Yuthent — Execution Authority Infrastructure]
 
T: +972 50-931-1103 [tel:+972509311103]
E: [email protected] [mailto:[email protected]]
W: yuthent.com [https://yuthent.com] [LinkedIn] 
[https://www.linkedin.com/in/mohamadkhalilyossif]
 
[Yuthent — Cryptographic proof of human authorization at execution time] 
[https://yuthent.com]
This email may contain confidential or sensitive information. If you are not 
the intended recipient, any review, use, disclosure, distribution, or copying 
is prohibited. If you received this message in error, please delete it 
immediately.
On 11/05/2026 10:27:37, Denis <[email protected]> wrote:
Hi Paul,
These comments on draft-ietf-oauth-attestation-based-client-auth-08 detail my 
observations and comments
made during the virtual interim meeting held last Monday on 2026-05-04 from 
17:00 to 18:00 UTC.
Since my comments 3 and 12 contain the acronym CBOR, I copy the Spice mailing 
list
while this document does not contain any occurrence of that acronym.
1.  The vocabulary used in this draft is still confusing
Introduction
   Traditional OAuth security concepts perform client authentication    through 
a backend channel. 
The wording "backend channel" is not explained.
The term "backend" is confusing as the Figure indicates:
                +--------------------+                 |                    |   
              |    Client Attester |                 |      (backend)     |     
            |                    |                 +--------------------+ 
In the ISO OBP, the single definition for the term "attester" is as follows:
attester : actor (person) who certifies and records legal responsibility for a 
particular unit of information ISO 13606-1:2019, 3.1.1.
An Attester is someone who affirms or vouches for the correctness or truth or 
genuineness of something.
Such a role is endorsed by a TTP (Trusted Third Party). However, the acronym 
TPP does not appear anywhere in this draft.
The text continues with:
   This specification establishes a mechanism for a backend-attested client
   authentication through a frontend channel to address these issues.
The wording "frontend channel" is not explained and the word "frontend" is used 
nowhere else in the draft.

However, using the terms "frontend" and "backend" makes sense for a Client, but 
these terms would need to be defined
in section 3 (Terminology).


2.  The draft should support "data origin authentication" instead of "entity 
authentication"
 In the Introduction, the step (6) is described as follows:

   (6) The Client Instance sends both the Client Attestation JWT and
       the Client Attestation PoP JWT to the authorization server,
       e.g. within a token request.

This is insecure as :
* the token request is left unprotected,
* the Client Attestation JWT is left unprotected since it is not signed by the 
Client Instance Key.
In order to allow an AS to verify the origin of a request rather than only 
authenticating a client, the draft should support a "data origin authentication 
service" instead of an "authentication service". See also the following issue: 
https://github.com/oauth-wg/draft-ietf-oauth-attestation-based-client-auth/issues/159
 
[https://github.com/oauth-wg/draft-ietf-oauth-attestation-based-client-auth/issues/159]
 that has been raised more than six months ago on Oct 16, 2025.
3.  Terminology used in Section 3: Client Attestation JWT  
   Client Attestation JWT:  A JSON Web Token (JWT) generated by the       
Client Attester which is bound to a key managed by a Client       Instance 
which can then be used by the instance for client       authentication. The 
draft should first define a Client Attestation. A client attestation can be 
encoded either using JSON or CBOR. At the conceptual level, the encoding of a 
Client Attestation is irrelevant. In Token Status List (TSLs), TSLs can be 
encoded using either JSON or CBOR. Why not do the same in this document?
4.  Model overview
 The terminology I propose is based on the following model:          
+--------------+           |    Client    |           |    Backend   |          
 |    Attester  |           +--------------+             |          |           
  |          |           +--------------+           |    Client    |           
|    Backend   |           +--------------+             |          |            
 |          |           +--------------+          +--------------+           |  
  Client    |          |              |           |    Frontend  |----------|   
   AS      |           |              |          |              |           
+--------------+          +--------------+              FIGURE 1: Model overview
A Client Backend Attester delivers Client Backend Attestations to Client 
Backends.
A Client Backend stores, protects and manages critical cryptographic key 
materials. It communicates with a Client Frontend and possibly with a Client 
Backend Attester.
A Client Frontend communicates with a Client Backend and with an AS, as well as 
with other entities.
The following definition is proposed:
Client Backend Attestation: data generated by a Client Backend Attester that 
describes some of the characteristics of the Client Backend application, 
including those of the OS/hardware supporting it, that contains a public key 
which is associated with a private key stored and protected within the Client 
Backend. A Client Backend Attester is a TTP that certifies and bears 
responsibility for the delivery of these attestations after the examination of 
the characteristics of a Client Backend and how it is managed. Characteristics 
supported by a Client Backend are described using a sequence of OIDs that can 
be defined under different name spaces.

5.  Terminology used in Section 3: Client Attestation Proof of Possession (PoP) 
JWT

The next definition is:

Client Attestation Proof of Possession (PoP) JWT:  A Proof of Possession 
generated by the Client Instance
using the key that the Client Attestation JWT is bound to.
The goal is NOT to authenticate the Client Backend but to know that some data 
originates from a Client Backend.

When a client application is interacting with an AS, there are two goals:
(1) a first goal is to demonstrate to the AS that a request sent by the Client 
Fronted to an AS is integrity protected using a private key managed by the 
Client Backend. (2) a second goal is to demonstrate to the AS that some key 
material has be generated by a Client Backend (i.e., not by the Client 
Frontend) that supports a set of characteristics that are attested by a Client 
Backend Attester. Such characteristics are intended to guaranty that the keys 
are correctly generated, kept in a secure place and are only usable by a set of 
reliable applications. If the Issuer trusts that Client Backend Attester, then 
it can be confident that this set of characteristics is supported by that 
Client Backend.
The definition of a "Client Attestation Proof of Possession (PoP)" JWT should 
be removed.

6.  Terminology used in Section 3: Client Instance

The next definition is:

   Client Instance:  A deployed instance of a piece of client software.

This definition should be reconsidered as it does not explain its relationship 
with the internal structure of the client.

It should be replaced by two definitions: Client Backend and Client Frontend.

Client Backend: a part of a Client application that stores, protects and 
manages critical cryptographic key materials.
It communicates with a Client Frontend and possibly with a Client Backend 
Attester.
When a TEE (Trusted Execution Environment) is supported, a Client Backend 
corresponds to a TA (Trusted Application) running in the TEE.

Client Frontend: a part of a Client application that communicates with a Client 
Backend and with an AS, as well as with other entities.
When a TEE is supported, a Client Frontend corresponds to a UA (Untrusted 
Application) running in the REE (Rich Execution Environment).


7.  Terminology used in Section 3: Client Instance Key

The next definition is:

   Client Instance Key:  A cryptographic asymmetric key pair that is
      generated by the Client Instance where the public key of the key
      pair is provided to the Client Attester.  This public key is then
      encapsulated within the Client Attestation JWT and is utilized to
      sign the Client Attestation Proof of Possession.

This definition is not appropriate as there are different ways to install or 
generate such key pair.
For example, using an on-the-air (OTA) update of a smartphone, it is possible 
to download into the mobile device such a key together with its attestation.

This definition should be reconsidered.


8.  Terminology used in Section 3: Client Attester

The next definition is:

   Client Attester:  An entity that authenticates a Client Instance and
                     attests it by issuing a Client Attestation JWT.

A Client Attester does not simply "authenticate" a Client Instance. It attests 
some of its characteristics and makes sure
that a public key that is inserted into the client attestation corresponds to a 
private key that is present in a protected part
of that client i.e, the Client Backend.

The following definition is proposed as a replacement:

Client Backend Attester:  Trusted Third Party (TTP) that delivers Client 
Backend Attestations to Client Backends after examination
of the characteristics and of the environment where a type of Client Backend 
will be deployed. This TTP bears responsibility
when delivering Client Backend Attestations.

9.  Terminology used in Section 3: Challenge

The next definition is:

   Challenge:  A String that is the input to a cryptographic challenge-
   response pattern.  This is traditionally called a nonce within OAuth.

This definition is technically correct but can be improved as it does not state 
for what purpose the String will be used.

   Challenge:  A String that is the input to a cryptographic challenge-
   response pattern in order to be able to detect replay attacks.
   Within OAuth, this is traditionally called a nonce.

IMPORTANT: The use of a challenge should be mandatory.


10.  About section 5: Relation to RATS

RATS (RFC 9334) does not contain any definition for the term "Attester". 
However, it contains the following sentence:

In Remote ATtestation procedureS (RATS), one peer (the "Attester") produces 
believable information about itself ("Evidence")
to enable a remote peer (the "Relying Party") to decide whether or not to 
consider that Attester a trustworthy peer.

RATS (RFC 9334) does not contain any definition for the term "Attestation" 
either. The text is only using the wording "Attestation Results".

The current draft states:

   The Remote Attestation Procedures (RATS) architecture defined by
   [RFC9334] has some commonalities to this document.  The flow
   specified in this specification relates to the "Passport Model" in
   RATS.

In RATS, the Passport Model is described in section 5.1:

The citizen retains control of the resulting passport document and presents it 
to other entities
when it needs to assert a citizenship or identity Claim, such as at an airport 
immigration desk.

It is questionable whether this model applies, as the second paragraph from 
section 5.1 states:

Thus, in this immigration desk analogy, the citizen is the Attester, (...)

Can a citizen really be an Attester ? What about the Client ?

Section 4 (i.e., Relation to RATS) should be removed.


11.  About section 5: Client Attestation Format

The next section is : 5.  Client Attestation Format

Before diving into the encoding, it would be useful to indicate the goal of the 
Client Attestation and its relationship with a Client Attestation Result.

Before that section, a new section should be added with a title like : "Goals 
and Architecture".

Figure 2 (below) which is different from the Figure currently present on page 4 
should be used.

When making a request to the AS, two cases can be considered:

(a) the Client Frontend wishes to send a request to the AS and to integrity 
protect it using a key stored and protected within the Client Backend.

(b) the Client Frontend wishes to send a request to the AS that contains, in 
addition, a set of cryptographic data (e.g., a set of public keys)
    and wishes to demonstrate that this set of keys has been generated by the 
Client Backend.

A typical example is the request of a batch of digital credentials where each 
issued digital credential contains one of these public keys.
When the AS receives these public keys, it can know the characteristics 
supported by the Client Backend and then can decide whether
they match with one of its issuing digital credential policies.

How can this be modelled ?

The Client Frontend instructs its Client Backend what to do. This will be done 
by locally communicating:

- a command to the Client Backend and
- a set of parameters appropriate for that command.
This is usually done using an API.

Commands sent to the Client Backend will have the following structure;

        - a command XYZ sent to the Client Backend,
        - a challenge that has been previously requested to the AS by the 
Client Frontend and
        - a hash value of the request that the Client Frontend wishes to send 
to the AS.

An example of such a command XYZ sent to an AS can be:

" generate a batch of four public keys according to the algorithm Y using the 
set of parameters Z and return these public keys (as authenticated data)
  within the Attestation Result and an index for each of them in the response 
to the command ".

It is now possible to take a look at Figure 2 below:

          +--------------+
          |    Client    |
          |    Backend   |
          |    Attester  |
          +--------------+
            |  Out of  |
            |   scope  |
          +--------------+
          |    Client    |
          |    backend   |
          +--------------+
             / \     | 
         (4)  |      |  (5)
  command     |      |  response to the command
     +        |      |  + Attestation Result =
  challenge   |      |  all signed under a Client Backend private key:
     +        |      |  (challenge + hash value of the request
  hash value  |      |    + Client Backend Attestation
 of a request |      |    + authenticated data (optional))
              |     \ /
          +---------------+                         +---------------+
          |               |  challenge request (1)  |               |
          |               |------------------------>|               |
          |               |      challenge     (2)  |               |
          |   Client      |<------------------------| Authorization |
          |   frontend    |      request            |     Server    |
          |     (3)       |         +               |               |
          |               |  Attestation Result     |               |
          |               |------------------------>|               |
          +---------------+         (6)             +---------------+

             FIGURE 2: Architecture and data flows overview

Out of the scope of this document:  How the Client Backend got or generated a 
private key and obtained,
from a Client Backend Attester, a Client Backend Attestation for the 
corresponding public key
where that attestation includes a set of characteristics supported by the 
Client Backend.

(1) The Client Frontend requests a challenge to the AS

(2) The AS sends back a challenge to the Client frontend

(3) The Client Frontend locally constructs a request that will be sent later on 
to the AS and computes a hash of this request

(4) The Client Frontend communicates to the Client Backend and constructs a 
message composed of a command, the challenge and the hash of the request.

(5) the Client Backend returns to the Client Frontend a response to the command 
intended to be processed by the Client Frontend and an Attestation Result
     that contains up to four data elements, all signed under a private key of 
the Client Backend:

    (a) the challenge,
    (b) the hash value of the request,
    (c) a client backend Attestation and
    (d) optionally, authenticated data generated by the Client Backend intended 
to be processed by the AS.

An example of "authenticated data generated by the Client Backend" is a set of 
public keys where each public key is intended to be included into 
soon-to-be-issued digital credentials.

(6) the Client Frontend sends to the AS both a request (e.g. a token request) 
and the Attestation Result.


12.  About section 5 (Client Attestation Format) The text states:    The Client 
Attestation MUST be encoded as a "JSON Web Token (JWT)" according to [RFC7519]. 
This is debatable. If used in a CBOR context, why should client backend 
attestations be only JSON encoded ? 13. About the field "sub" and the 
unlinkability property between RSs    *  sub: REQUIRED.  The sub (subject) 
claim MUST specify client_id value of the OAuth Client. Since the header of the 
JWT shall include a "sub (subject) claim that MUST specify client_id value of 
the OAuth Client", if this protocol is used towards a RS, the unlinkability 
property between RSs cannot be supported.. If this protocol is maintained with 
a RS, it should be clearly advertised that the unlinkability property between 
RSs cannot be supported. In that case, a "Privacy Considerations" section 
should be added to warn implementers. Using a transitive trust model, it is 
possible to communicate to a RS a set of characteristics supported by the 
Client Backend while supporting the unlinkability property between RSs in the 
following way:
At the time a token request is received by an AS, the AS can know a set of 
characteristics supported by the Client Backend. If that set of characteristics 
is adequate according to the issuance policy of a given type of token, then the 
AS can include a subset of that set of characteristics into the issued token 
(e.g., into a digital credential) but SHALL NOT include the "sub" field that is 
present in the Client Backend Attestation, as it would allow to identify a 
particular Client Backend.
In this way, the unlinkability property between RSs can be supported and a 
protocol between the AS and the RS can be avoided.

14.  About the field "exp"

   *  exp: REQUIRED.  The exp (expiration time) claim MUST specify the
      time at which the Client Attestation is considered expired by its issuer.

Since a Client Backend Attestation shall include an expiration time field, the 
document should include a section to deal with
the suspension and the revocation of Client Backend Attestations.

It should be noticed that, in the proposal, the digital signature made using a 
private key of the Client Backend also protects the Client Backend Attestation.
This is necessary because the Client Backend Attestation needs to know which 
one has been used. Suspension or revocation apply to a Client Backend 
Attestation
and not to the public key it contains.
After the end of a suspension, it is not necessary to change the key pair. 
After a revocation, depending about the revocation reason, it may not be 
necessary to change the key pair.
15.  About the most important missing field and "other claims"

The text mentions:

   The following additional rules apply:
   1.  The JWT MAY contain other claims. 

A field that enumerates a set of characteristics supported by the Client 
Backend is missing. Such field should contain a set of OIDs.

Saying "The JWT MAY contain other claims" is insufficient, as it would not 
permit any kind of interoperability and would miss one major goal of this 
document.


16.  About the title

The title of this draft is: OAuth 2.0 Attestation-Based Client Authentication

Given the previous comments, it would be more appropriate to rename it:

OAuth 2.0 Attestation-Based Client Data Origin Authentication

17. About the abstract

The wording "or Resource Server" should be removed from the abstract. Taking 
into account the previous comment, the following abstract is proposed:

This specification defines an extension to the OAuth 2.0 protocol [RFC6749] 
that enables a client instance to send to an Authorization Server
messages integrity-protected using an attestation bound to a Client Backend.


18. Considering the following individual draft issued on May 5, 2026 and 
recently advertised on the saag mailing list

Post-Session Execution Assurance (PSEA): A Security Model for Verifying 
Authority at the Moment of Action (draft-yossif-psea-01)

I noticed the following statement in the Security considerations section:

   Implementations SHOULD use platform-attested hardware-backed key
   storage (such as Trusted Execution Environments) to bound this risk.

This observation is appropriate. A non-normative example about digital 
credential wallets supported by a TEE would be great.

END OF COMMENTS

 

Hi Paul,

I support the DPoP addition in the editor's draft. To be honest, I have never 
been a big fan of the separate PoP-JWT but I have to admit that the draft 
improved quite a lot since I looked at it the last time!

Reading the draft again, it actually contains two mechanisms:
- On the one hand, it defines a new client authentication method for an OAuth 
client (attest_jwt_client_auth) as indicated by the title.
- On the other hand, it describes a mechanism for "additional security signals".

Imo, the title of the document should reflect both - or you split them up into 
two. 

Is there a way for the resource server (or authorization server) to challenge 
the client to provide additional security signals? I guess, they could return 
an  'invalid_client_attestation' error, if the request was missing an 
attestation. I think it would be good with more guidance on how to inform the 
client to provide the attestation as additional security signals if it is 
missing (in addition to e.g., the access token or client credentials). The 
resource server could even publish its requirements in its resource metadata 
document, e.g., with "client_attestation_required: true".

I agree with the conversation in the minutes. Leave the details of the 
attestation process out of scope. However, I suggest you list the requirements 
as it currently is unclear what attestation means. What do you expect an 
attester to validate at a bare minimum (i.e., client instance controlling the 
key)? What makes the key-bound JWT a client attestation? What information 
should/does the client attestation JWT convey? In section 6.4 you mention: 
"[Sending additional security signals] may provide additional assurance about 
the client's authenticity, integrity, state or other information contained in 
the Client Attestation". Make it clear (as part of the terminology?) that this 
is what you expect from an attester and client attestation. Imo, the client's 
authenticity and integrity are key to an attestation (without having to get 
into technical details...). 

+1 on the use case for platform-specific apps (so-called "native apps". I 
prefer to avoid the term native to foster a more inclusive language). At Curity 
we have implemented something very similar for our Hypermedia Authentication 
API (HAAPI) quite some time ago to support mobile apps. I can also picture a 
use-case where you use client attestation in DCR, for example, to establish 
trust in the client (comparable to software statement). 

Cheers,
Judith

On Thu, May 7, 2026 at 12:11 AM Paul Bastian <[email protected] 
[mailto:[email protected]]> wrote:

Hi all,
on Monday we had the OAuth Interims call dedicated to Attestation-Based Client 
Authentication, see the minutes for details: 
https://datatracker.ietf.org/doc/minutes-interim-2026-oauth-01-202605041700/ 
[https://datatracker.ietf.org/doc/minutes-interim-2026-oauth-01-202605041700/]
As a follow-up, we want to bring the following points also to the mailing list 
to reach out to people that did not participate on the Interims call:
- we presented the integration of the combined DPoP mode into the editor's 
draft, allowing to use a single key for both DPoP and Attestation-Based Client 
Authentication and re-use the DPoP Proof Header as a proof of possession for 
the Client Attestation JWT. We are looking for feedback on the current draft 
before making a new release
- we discussed which which OAuth artefacts should explicitly be bound to the 
client instance and the client instance key of the client attestation JWT. 
Currently we have language for the refresh token and there are two open Github 
issues 
https://github.com/oauth-wg/draft-ietf-oauth-attestation-based-client-auth/issues/56
 
[https://github.com/oauth-wg/draft-ietf-oauth-attestation-based-client-auth/issues/56]
 and 
https://github.com/oauth-wg/draft-ietf-oauth-attestation-based-client-auth/issues/114
 
[https://github.com/oauth-wg/draft-ietf-oauth-attestation-based-client-auth/issues/114]
 that discuss whether auth code or other artifacts shall be bound to the client 
instance. If you have opinions on this, please respond in either issue or 
respond to this mail
- we discussed whether explicit relationship to DCR should be mentioned, see 
https://github.com/oauth-wg/draft-ietf-oauth-attestation-based-client-auth/issues/61
 
[https://github.com/oauth-wg/draft-ietf-oauth-attestation-based-client-auth/issues/61].
 The feeling in the Interims call was to not include specific language
- we discussed whether we should be more descriptive about the mechanisms how 
the client instance authenticates towards the client attester, see 
https://github.com/oauth-wg/draft-ietf-oauth-attestation-based-client-auth/issues/107
 
[https://github.com/oauth-wg/draft-ietf-oauth-attestation-based-client-auth/issues/107]
 . These steps are currently out-of-scope and the feeling in the interims call 
was to not include specific technologies
- we discussed the AS/Client metadata for supported algorithms, see 
https://github.com/oauth-wg/draft-ietf-oauth-attestation-based-client-auth/issues/170
 
[https://github.com/oauth-wg/draft-ietf-oauth-attestation-based-client-auth/issues/170]
 . The proposal is to remove client_attestation_signing_alg_values_supported 
and client_attestation_pop_signing_alg_values_supported and rather re-use the 
existing token_endpoint_auth_signing_alg_values_supported. There was discussion 
whether client metadata makes sense, feedback is welcome.
If you want to provide feedback, respond to this mail or post in the relevant 
Github issues.
Best regards,
Paul
_______________________________________________
OAuth mailing list -- [email protected] [mailto:[email protected]]
To unsubscribe send an email to [email protected] 
[mailto:[email protected]]


_______________________________________________ OAuth mailing list -- 
[email protected] [mailto:[email protected]] To unsubscribe send an email to 
[email protected] [mailto:[email protected]]

_______________________________________________ OAuth mailing list -- 
[email protected] To unsubscribe send an email to [email protected]
_______________________________________________
OAuth mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to