<?xml version="1.0" encoding="utf-8"?>
<!-- This is built from a template for a generic Internet Draft. Suggestions for
     improvement welcome - write to Brian Carpenter, brian.e.carpenter @ gmail.com 
     This can be converted using the Web service at http://xml.resource.org/ -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<!-- You want a table of contents -->
<!-- Use symbolic labels for references -->
<!-- This sorts the references -->
<!-- Change to "yes" if someone has disclosed IPR for the draft -->
<!-- This defines the specific filename and version number of your draft (and inserts the appropriate IETF boilerplate -->
<?rfc sortrefs="yes"?>
<?rfc toc="yes"?>
<?rfc symrefs="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<?rfc topblock="yes"?>
<?rfc comments="no"?>
<rfc category="std"
     docName="draft-wang-spice-public-key-service-provider-02"
     ipr="trust200902">
  <front>
    <title abbrev="SD-CWT PKSP">A Public Key Service Provider for Verification in Multiple Issuers and Verifiers</title>

      <seriesInfo name="Internet-Draft" value="draft-wang-spice-public-key-service-provider-02"/>
      <author initials="D." surname="Wang" fullname="Donghui Wang">
        <organization>Huawei</organization>
        <address>
          <email>wangdonghui124@huawei.com</email>
        </address>
      </author>
      <author initials="F." surname="Liu" fullname="Faye Liu">
        <organization>Huawei</organization>
        <address>
          <email>liufei19@huawei.com</email>
        </address>
      </author>

      <author initials="L." surname="Li" fullname="Lun Li">
        <organization>Huawei</organization>
        <address>
          <email>lilun20@huawei.com</email>
        </address>
      </author>

      <author initials="Y." surname="Jiang" fullname="Yuning Jiang">
        <organization>Huawei</organization>
        <address>
          <email>jiangyuning2@h-partners.com</email>
        </address>
      </author>

    <!---->

    <date day="6" month="Jan" year="2026"/>

    <area>Security</area>

    <workgroup>Secure Patterns for Internet CrEdentials</workgroup>
    <keyword>public key service </keyword>

    <abstract>
      <t>SPICE provides a selective disclosure mechanism of credentials from issuer. However, future network services may be built on the trust between multiple entities.  Obtaining the public key of multiple issuers for a verifer from potential multiple sources can be complex. In this contribution, an optional public key service is proposed in SPICE architecture for the issue of obtaining the public keys of the issuers from multiple trusted entities. The basic function of public key service is proposed including public key registration, token verification, and a potential implementation such as the distributed ledger. We hope that the proposed contribution can be used as infomative for SPICE regarding to the token validation procedure. </t>
    </abstract>
  </front>

  <middle>
    <section anchor="intro" title="Introduction">   
<t>Digital credential ecosystems require verifiers to obtain the correct issuer public key material to validate signatures. This becomes challenging in multi-stakeholder deployments across administrative domains, such as physical supply chains, IoT and critical infrastructure operations, and telecommunications service provisioning, where verifiers may encounter many issuers whose keys can rotate or be revoked.</t>

<t>Consider a cross-domain deployment in which manufacturer A produces device a, and operator X deploys device a alongside an existing device/system x. During onboarding and operation, a and x may need to validate signed statements issued by A or X
regarding device identity, access control, compliance, or firmware/software integrity. In supply chain settings, such statements may traverse intermediaries and be validated asynchronously at scale. In telecommunications networks, providers may enable users
or services to exchange digitally signed attributes (e.g., subscription status or account-related information) during interactions, requiring relying parties to validate credentials from multiple issuers.</t>

<t>In current PKI-based deployments, trust between a verifier and multiple issuers is often realized using one of the following approaches:</t>

<t>1. Manual configuration: verifiers maintain local trust stores and administrators provision issuer certificates/keys. For example, device a adds network operator X's credentials, and device x adds device manufacturer A's. This does not scale with many issuers, frequent key rotation, or constrained devices and operational environments.</t>

<t>2. Common trust anchor: a third party T acts as a trust anchor (directly or via hierarchical chains such as T->A->a for x and T->X->x for a.) for issuers. This requires global adoption of the same anchor and may not match real-world trust relationships across domains.</t>

<t>3. Cross-certification: issuers mutually certify each other’s keys. For example, A issues a credential for X's public key, and X does the same for A's, forming trust chains A->X->x for a and X->A->a for x. This becomes operationally complex in many-to-many relationships and is difficult to maintain under rotation and revocation.</t>

<t>These approaches become inadequate when (a) verifiers validate credentials from a large and changing issuer set, (b) verification is high-volume or time-sensitive, (c) trust relationships are dynamic and not well represented by a fixed hierarchy,
or (d) operational constraints limit frequent updates to local trust stores.</t>

<t>This document proposes an optional Public Key Service Provider (PKSP) architecture to reduce this operational complexity. A PKSP provides a service for issuer public key registration and discovery, including key status information needed for verification (e.g., updates and revocation), enabling verifiers to obtain current verification key material on demand in multi-domain environments.</t>
    </section>

    <section anchor="requirements-language" title="Requirements Language">
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
      "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
      document are to be interpreted as described in <xref target="RFC2119"/>.</t>
    </section>

    <section title="Architecture Overview">
	 <section title="Multi-party trust">
	<t>Figure 1 illustrates the traditional approach where issuers, i.e. CAs, must establish pairwise mutual trust. This process incurs high workload, and maintaining trust will require even more effort when public key updates and revocations occur.  </t>
	  <t>
	  <figure>
              <artwork name="Establish mutual trust between every two issuers. "><![CDATA[ 
+---------------+              +---------------+
|               |<------------>|               |
|   Issuer A    |              |   Issuer B    |
+---------------+              +---------------+
    |   ^     \                /     ^   |
    |   |      \              /      |   |
    |   |       \            /       |   |
    |   |        \          /        |   |
    |   |         \        /         |   |
    |   |          \      /          |   |
    |   |           \    /           |   |
    |   |            \  /            |   |
    |   |             \/             |   |
    |   |             /\             |   |
    |   |            /  \            |   |
    |   |           /    \           |   |
    |   |          /      \          |   |
    |   |         /        \         |   |
    |   |        /          \        |   |
    |   |       /            \       |   |
    |   |      /              \      |   |
    v   |     /                \     |   v
+---------------+              +---------------+
|               |<------------>|               |
|   Issuer C    |              |   Issuer D    |
+---------------+              +---------------+                                                                                                                               
     				   
  Figure 1 Establish mutual trust between every two issuers. ]]></artwork></figure></t>
	
<t>When we can establish mutual trust among multiple parties based on PKSP, as shown in Figure 2, the issuer only needs to publish registration and revocation messages of public keys/credentials to the public-Key-Service-Provider(PKSP), which can then be accessed by other issuers or verifiers when they are performing verification, then, during the verification, the verifiers may verify the token such as RFC 9207<xref target="RFC9207"/> and RFC 9449 <xref target="RFC9449"/> , or the selective disclosed token such as  SD-CWT(<xref target="draft-ietf-spice-sd-cwt-02"/>)   </t>
	 <t>
	  <figure>
              <artwork name=" Multi-party Trust Based on PKSP . "><![CDATA[ 
  +---------------+                         +----------------+   
  |   Issuer A    |                         |    Issuer B    |           
  |               |                         |                |                                                                                                                
  +---------------+                         +----------------+  
          |                                        |                       
          |                                        |      
          |                                        |                    
 +-------------------------------------------------------------+ 
 |                            PKSP                             | 
 +-------------------------------------------------------------+    
          |                                        |   
          |                                        |       
          |                                        |       
 +----------------+                        +----------------+     
 |    Issuer C    |                        |    Issuer D    |   
 |                |                        |                |     
 +----------------+                        +----------------+  
 	   
  Figure 2 Multi-party Trust Based on PKSP  ]]></artwork></figure></t>
   
        <t>During the registration process, identity verification is usually carried out to ensure that only legitimate entities can add public keys. The service checks on the format and validity of the public key to ensure it meets the system requirements.	The registration process between the issuer and the PKSP is as follows:
</t>
       <t><list style="symbols">
       <t>1. Submission by the Issuer.
	The issuer initiates registration by sending a request to the PKSP. This request contains the issuer's public keys. Meanwhile, the issuer declares the purposes of these keys, such as for token issuance, revocation, and so on. Along with the public keys, detailed descriptive information about the issuer is provided. This includes the issuer's name, identifier, the expiration time of the public keys, as well as a declaration of the claims of the tokens the issuer can provide.
</t>
        <t>2. Validation by the PKSP.
	Upon receiving the registration request, the PKSP first validates issuer's public key. The descriptive information provided by the issuer is then examined for accuracy and completeness. The PKSP may cross-reference this information with existing databases or industry-recognized sources to verify the issuer's legitimacy.
</t>
         <t>	3. Response from the PKSP.
	If all the information is found to be valid and compliant, the PKSP sends a registration response to the issuer. This response includes a confirmation of successful registration. The PKSP may also provide additional information like the storage location of the issuer's public key within the PKSP.
	In case the registration request is not approved, the PKSP sends a rejection notice to the issuer, stating the reasons for rejection. 
</t>
        <t>4. Completion of Registration.
Once the issuer receives a positive response from the PKSP, the registration process is considered complete. The issuer can then start using the registered public key for its intended purposes and issue tokens according to the specifications provided during registration. The PKSP updates its records to reflect the newly registered issuer and is ready to support the verifiers in matters related to public key querying.
</t>
          </list></t>      

        </section> <!-- Requirements-->
   
   

 <section title="PKSP for verification">
    <t> As a public public key service platform, PKSP accepts public key registration from issuers, stores the registered public keys securely and in a non-tamperable manner. When a verifier queries for a key, it provides the corresponding public key.  </t>
      <t>
	  <figure>
              <artwork name="System architecture of public-key-service"><![CDATA[ 
  +--------+                            +---------+                                                            
  |        |  (2)Token issuance         |         |                                                            
  | Holder |<-------------------------- | Issuer  |                                                            
  |        |                            |         | 
  +--------+                            +---------+     
       |                                     | 
       |                                     |              
       |(3)Token display                     | (1)Public Key Registration       
       |                                     |
       |   +-----------------------------+   |  
       |   |            PKSP             |<--+       
       |   +-----------------------------+  
       |                ^
       |                |(4)Public key query and token verification
       |                |
       |           +----------+ 
       |           |          | 
       +---------->| Verifier | 
                   |          | 
               	   +----------+ 
		   
               Figure 1 System architecture of a PKSP ]]></artwork></figure></t>



        <t>When a verifier is performing SD-CWT verification, it can query the public key information of relevant issuers through the PKSP.
It supports various query methods, such as precise queries based on the identity identifier of the entity, credential number, etc., to quickly obtain the required public key. 
</t>
      
        <t>The following steps shall be performed between verifiers and PKSP:</t>
        <t><list style="symbols">
                <t>1. Token Receipt.
The Holder sends the token to the Verifier. </t>
                <t>2. Request for public key from PKSP.
After receiving the token, the verifier extracts the identification information of the issuer from the token. For example, the "iss" field in the header or payload may be found to identify the issuer.
The verifier then uses this identification information to send a request to the PKSP, asking for the public key of this issuer. </t>
                <t>3. PKSP Processes the Request and Returns the Public Key.
When the PKSP receives the verifier's request, it first authenticates the verifier's identity. After successful authentication, based on the issuer identification provided in the request, it searches for the corresponding public key in its storage system.
Then the PKSP returns this public key to the verifier as a response message. The response message may also contain some metadata, such as the expiration date of the public key and the type of the public key. </t>
 
  <t>4. Token Verification.
The Verifier uses the public key obtained from the PKSP to verify the token according to the signature algorithm specified in the token. </t> 
 <t>5. Processing of Verification Results
If the verification passes, the verifier can perform subsequent business logic processing based on the information in the token payload, such as allowing the holder to access specific resources.
If the verification fails, the verifier usually rejects the operations related to this token and may record relevant log information for subsequent security audits and problem-troubleshooting. </t>
 
           </list>
        </t>      
      
    </section><!-- System Architecture-->

</section>
    <section title="Enabling Technologies of PKSP" >
	
	
	
 <section title="Permissioned distributed ledger">
			<t> As for the implementation technology of PKSP, distributed ledger technology strongly enables PKSP to meet the following requirements. Decentralized storage spreads data across multiple nodes to prevent single-point failures. The tamper-proof data structure, formed by complex encryption, makes data modification extremely hard. Besides, the consistency maintenance based on multi - party consensus, such as the Practical Byzantine Fault Tolerance (PBFT) algorithm, ensures that multiple nodes conduct verification for public key operations in the PKSP.  Only when most nodes approve are operations recorded, reducing the impact of malicious or wrong actions by individual nodes.</t>			  
				 </section>
	  <section title="Operation of distributed ledger ">
	  <t> TODO </t>
  </section>
        
 	    </section>

	  <section title="Detailed protocol ">
	  <t> TODO </t>
  </section>
        

  <section anchor="iana-considerations">
    <name>IANA Considerations</name>
    <t>This document has no IANA considerations.</t>
  </section>

  <section title="Security Consideration">
    <t>
	TODO 
	</t>

  </section><!--8 Security Consideration-->



  </middle>

  <back>

    <references title = "References">

      <references title = "Normative Reference">
	 	  
	    <reference anchor="RFC9449" target="https://www.rfc-editor.org/info/rfc9449">
        <front>
        <title>OAuth 2.0 Demonstrating Proof of Possession (DPoP)</title>
        <author fullname="D. Fett" initials="D." surname="Fett"/> 
		<author fullname="B. Campbell" initials="B." surname="Campbell"/> 
		<author fullname="J. Bradley" initials="J." surname="Bradley"/> 
		<author fullname="T. Lodderstedt" initials="T." surname="Lodderstedt"/> 
		<author fullname="M. Jones" initials="M." surname="Jones"/> 
		<author fullname="D. Waite" initials="D." surname="Waite"/> 
        <date month="September" year="2023"/>
        <abstract>
        <t>This document describes a mechanism for sender-constraining OAuth 2.0 tokens via a proof-of-possession mechanism on the application level.
   This mechanism allows for the detection of replay attacks with access and refresh tokens.</t>
        </abstract>
        </front>
        <seriesInfo name="RFC" value="9449"/>
        <seriesInfo name="DOI" value="10.17487/9449"/>
      </reference>
	  
	  	<reference anchor="RFC9207" target="https://www.rfc-editor.org/info/rfc9207">
        <front>
        <title>OAuth 2.0 Demonstrating Proof of Possession (DPoP)</title>
        <author fullname="K. Meyer zu Selhausen" initials="K." surname="Meyer zu Selhausen"/> 
		<author fullname="D. Fett" initials="D." surname="Fett"/> 
        <date month="March" year="2022"/>
        <abstract>
        <t>This document specifies a new parameter called iss.  This parameter is used to explicitly include the issuer identifier of the authorization server in the authorization response of an OAuth authorization flow.  The iss parameter serves as an effective countermeasure to "mix-up attacks".</t>
        </abstract>
        </front>
        <seriesInfo name="RFC" value="9207"/>
        <seriesInfo name="DOI" value="10.17487/9207"/>
      </reference>
	  
	    <reference anchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner"/>
          <date month="March" year="1997"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
	  
	   
	   <reference anchor="GS PDL 024" target="https://portal.etsi.org/webapp/WorkProgram/Report_WorkItem.asp?WKI_ID=68066">
        <front>
        <title>	Architecture enhancements for PDL service provisioning in telecom networks</title>
        <author fullname="ETSI PDL"/>
        <date month="November" year="2024"/>
        </front>
      </reference>
    </references>

      <references title = "Informative References">
    
      <reference anchor=" draft-ietf-spice-sd-cwt-02" target="https://datatracker.ietf.org/doc/draft-ietf-spice-sd-cwt/">
        <front>
        <title>SPICE SD-CWT</title>
	    <author fullname="M. Prorock" initials="M." surname="Prorock"/> 
		<author fullname="O. Steele" initials="O." surname="Campbell"/> 
		<author fullname="H. Birkholz" initials="H." surname="Steele"/> 
		<author fullname="R. Mahy" initials="R." surname="Mahy"/> 
        <date month="December" year="2024"/>
        </front>

      </reference>
    
	
   
      <reference anchor="draft-ietf-spice-use-cases-00" target="https://datatracker.ietf.org/doc/draft-ietf-spice-use-cases/">
        <front>
        <title>Use Cases for SPICE</title>
	    <author fullname="M. Prorock" initials="M." surname="Prorock"/> 
		<author fullname="B. Zundel" initials="B." surname="Zundel"/> 
        <date month="September" year="2024"/>
        </front>
      </reference>
	  
	  
	</references>
	
	
  </references>
  
    <section anchor="acknowledgments" numbered="false"> 
      <name>Acknowledgments</name>
      <t>TODO</t>
    </section>

  </back>
</rfc>
