<?xml version="1.0" encoding="utf-8"?>
<!-- 
     draft-rfcxml-general-template-standard-00
  
     This template includes examples of the most commonly used features of RFCXML with comments 
     explaining how to customise them. This template can be quickly turned into an I-D by editing 
     the examples provided. Look for [REPLACE], [REPLACE/DELETE], [CHECK] and edit accordingly.
     Note - 'DELETE' means delete the element or attribute, not just the contents.
     
     Documentation is at https://authors.ietf.org/en/templates-and-schemas
-->
<?xml-model href="rfc7991bis.rnc"?>  <!-- Required for schema validation and schema-aware editing -->
<!-- <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?> -->
<!-- This third-party XSLT can be enabled for direct transformations in XML processors, including most browsers -->


<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<!-- If further character entities are required then they should be added to the DOCTYPE above.
     Use of an external entity file is not recommended. -->

<rfc
  xmlns:xi="http://www.w3.org/2001/XInclude"
  category="std"
  consensus="true" 
  docName="draft-dnsop-dnssec-extension-pkix-01"
  ipr="trust200902"
  obsoletes=""
  updates=""
  submissionType="IETF"
  xml:lang="en"
  version="3">
<!-- [REPLACE] 
       * docName with name of your draft
     [CHECK] 
       * category should be one of std, bcp, info, exp, historic
       * ipr should be one of trust200902, noModificationTrust200902, noDerivativesTrust200902, pre5378Trust200902
       * updates can be an RFC number as NNNN
       * obsoletes can be an RFC number as NNNN 
-->

  <front>
    <title abbrev="dnssec-ext-pkix">DNSSEC Extension by Using PKIX Certificates</title>
    <!--  [REPLACE/DELETE] abbrev. The abbreviated title is required if the full title is longer than 39 characters -->

    <seriesInfo name="Internet-Draft" value="draft-dnsop-dnssec-extension-pkix-01"/>
   
	<author fullname="Hyeonmin Lee" initials="H." surname="Lee">
      <!-- [CHECK]
             * initials should not include an initial for the surname
             * role="editor" is optional -->
    <!-- Can have more than one author -->
      
    <!-- all of the following elements are optional -->
      <organization>Seoul National University</organization>
	  <address>
	  	<postal>
		  <country>KR</country>
		</postal>
        <email>min0921110@snu.ac.kr</email>  
      </address>
    </author>
	<author fullname="Taekyoung Kwon" initials="T." surname="Kwon">
       <organization>Seoul National University</organization>
	  <address>
	  	<postal>
		  <country>KR</country>
		</postal>
		<email>tkkwon@snu.ac.kr</email>  
      </address>
    </author>
	  
    <date year="2023"/>
    <!-- On draft subbmission:
         * If only the current year is specified, the current day and month will be used.
         * If the month and year are both specified and are the current ones, the current day will
           be used
         * If the year is not the current one, it is necessary to specify at least a month and day="1" will be used.
    -->

    <area>General</area>
    <workgroup>Internet Engineering Task Force</workgroup>
    <!-- "Internet Engineering Task Force" is fine for individual submissions.  If this element is 
          not present, the default is "Network Working Group", which is used by the RFC Editor as 
          a nod to the history of the RFC Series. -->

    <keyword>Internet-Draft</keyword>
    <!-- [REPLACE/DELETE]. Multiple allowed.  Keywords are incorporated into HTML output files for 
         use by search engines. -->

    <abstract>
      <t>The Domain Name System Security Extensions (DNSSEC) were standardized a couple of decades ago but it has not been widely deployed. Thus, a vast majority of DNS messages in the real world are still vulnerable to various kinds of integrity attacks like cache poisoning attacks. 
	  This document describes a mechanism that extends the current DNSSEC protocol in such a way that guarantees the integrity of DNS messages using PKIX certificates without any dependencies on other entities in the DNS infrastructure.
</t>
    </abstract>
 
  </front>

  <middle>
    
    <section>
      <name>Introduction</name>
	  <t>The DNSSEC <xref target="RFC4033"/> was standardized to provide integrity and authentication of DNS records. After twenty years of its introduction, DNSSEC is widely deployed for top-level domains. However, its deployment rates in second-level domains are low and most DNS messages in the real world are still vulnerable to tampering like cache poisoning attacks.</t><t>
	  In addition, to support DNSSEC, it is necessary that a domain publishes DS records to its upper zone (i.e., parent zone) to establish a chain of trust. Usually, this process requires manual intervention of domain owners which often results in errors. Thus, it is reported that a large number of domains do not have their corresponding DS records in their upper zones <xref target="DNSSEC-Deployment"/>, which results in DNSSEC validation failures. Thus, we need a more practical and deployable mechanism to guarantee the integrity and authenticity of DNS records.</t><t>
	  This document specifies DNSSEC-PKI to provide the integrity and authentication of DNS Resource Record sets (RRsets) by leveraging PKIX <xref target="RFC5280"/> certificates. DNSSEC-PKI offers domain owners another option to provide the DNS integrity without requiring the cooperation (or dependencies) of other entities in the DNS infrastructure (e.g., establishing a chain of trust across zones). For this purpose, DNSSEC-PKI exploits PKIX certificates widely used by most domains. Thus, DNSSEC-PKI allows a domain (or a zone) to use a public/private key pair from its certificate rather than generating a distinct key for DNS. This document defines the requirements and operations of domains and validators (e.g., resolvers) to support DNSSEC-PKI.</t>
      
      <section>
        <name>Requirements Language</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL",
          "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT
          RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
          interpreted as described in BCP 14 <xref target="RFC2119"/>
          <xref target="RFC8174"/> when, and only when, they appear in
          all capitals, as shown here.</t>
      </section>

    </section>
    
    <section>
      <name>DNSSEC-PKI Overview</name>
      <t>DNSSEC-PKI is designed to provide a practical and deployable way that guarantees the integrity and authenticity of DNSSEC RRsets. To achieve this, we need a mechanism that does not have dependencies on other entities in the DNS infrastructure.</t>

     <!-- 
      <ol>
        <li>Ordered list item [REPLACE/DELETE]</li>
      </ol>
      
      <ul>
        <li>Bulleted list item [REPLACE/DELETE]</li>
      </ul>
      
      <dl newline="true">
         Omit newline="true" if you want each definition to start on the same line as the corresponding term 
        <dt>First term: [REPLACE/DELETE]</dt>
        <dd>Definition of the first term [REPLACE/DELETE]</dd>
        <dt>Second term: [REPLACE/DELETE]</dt>
        <dd>Definition of the second term [REPLACE/DELETE]</dd>
      </dl>
      
      <table>
        <thead>
          <tr><th>Column 1 [REPLACE]</th></tr>
        </thead>
        <tbody>
          <tr><td>Cell [REPLACE]</td></tr>
        </tbody>
      </table>

      <figure>
        <name>Source [REPLACE]</name>
        <sourcecode name="suggested filename [REPLACE/DELETE]" type="language [REPLACE/DELETE]" markers="true">
          <![CDATA[
source code goes here [REPLACE]
          ]]>
        </sourcecode>
      </figure>

      <figure>
        <name>Diagram [REPLACE]</name>
        <artset>
          <artwork type="svg" src="https://www.rfc-editor.org/materials/format/svg/stream.svg" />
          <artwork type="ascii-art" name="stream.txt">
            <![CDATA[
 ascii-art diagram goes here [REPLACE]
            ]]>
          </artwork>
        </artset>
      </figure>
	  -->

	  <section>
		<name>Design Requirements</name>
		<t>We consider two requirements when designing DNSSEC-PKI.</t>
		
		<ol>
		  <li><t>Minimum or no changes of other entities in the DNS infrastructure:</t>
			  <ul>
		      <li>Requiring changes (or cooperations) from other entities causes dependency on those entities in the DNSSEC operations. Thus, DNSSEC-PKI should minimally require a change of other entities in the DNS infrastructure  (e.g. parent zones and DNS registrars).</li> 
			</ul>
	      </li>
		  <li><t>Maximum reuse of the current DNSSEC standards and DNS infrastructure:</t>
			<ul>
			  <li>DNSSEC-PKI should work with the existing DNS in a way that maximally reuses the current infrastructure. That is, DNSSEC-PKI seeks to achieve compatibility with the current DNSSEC standards.   
			  </li>
		    </ul>
		  </li>
		</ol>
	  </section>

	  <section>
		<name>The Operations of DNSSEC-PKI</name>
		<figure anchor="DNSSEC-PKI">
		  <name>Entities in DNSSEC-PKI</name>
		  <artwork><![CDATA[
                                       +---------------+
                                       |  Certificate  |
                                       |   Authority   |
                                       |      (CA)     |
                                       +---------------+
                                               |
                                               | Certificate
                                               v
+----------+                           +---------------+
|          |    RRSIG, DNSKEY, CERT    |               |
|  Client  |<--------------------------| Authoritative |
|          |                           |  Name Server  |
|          |                           |               |
+----------+                           +---------------+
		  	]]></artwork>
	  </figure>

	  <t>To satisfy the design requirements, we leverage PKIX certificates issued by CAs. A domain generates a private/public key pair. Also, it asks a CA to issue a certificate that contains its domain name and the public key. It then uses the private key to generate the signatures of its DNS RRsets. Each signature (for each RRset) is published as a DNS record. Here, we reuse an RRSIG record <xref target="RFC4034"/>, which is used to store the signature of an RRset. The domain publishes the public key in the certificate as a DNSKEY record <xref target="RFC4034"/>. Also the certificates in the certificate chain are published as CERT records <xref target="RFC4398"/>. The signature (i.e., RRSIG record) guarantees the integrity and authenticity of the corresponding DNS RRset and the certificate guarantees that the signature is generated by the domain owner’s private key.</t>  
		<t>A validator (e.g., a client or a resolver) can check the integrity of a given RRset by fetching the corresponding signature (RRSIG), a public key (DNSKEY), and a certificate chain (CERTs) and verifying them.</t>

  
	  <figure anchor="DNSSEC-PKI-Operations">
		  <name>The operations of DNSSEC-PKI</name>
		  <artwork><![CDATA[
   Validator                    Authoritative                 Certificate
(e.g., Resolver)                 Name Server                   Authority
       |                              |                          (CA)
       |                              |    Issue a certificate     |
       |                              |<---------------------------|
       |                              |                            |
       |                              |
       |                              | 
       |                              + Generate signatures of RRsets
       |                              |
       |                              + Publish RRSIG, DNSKEY, CERT records
       |                              |
       |  Fetch a target DNS record   |
       |       (i.e., A record)       |
       |<-----------------------------|
       |                              |
       |  Fetch RRSIG, DNSKEY, CERT   |
       |<-----------------------------|
       |                              |
       |                              |
       + Verify the target record     |
       |  using RRSIG, DNSKEY, CERT   |
       |                              |
		  	]]></artwork>
      </figure>
	
	  </section>

   </section>   

	<section>
		<name>Authoritative DNS Server-side Deployment</name>
        <t>Deploying DNSSEC-PKI on the authoritative DNS server (i.e., a domain or a zone) requires the following steps:</t>
		
		<ol>
		  <li>A domain is issued a PKIX certificate (from a CA).</li>
		  <li>The domain generates the signatures of its DNS RRsets using its private key in the certificate.</li>
		  <li>The domain publishes the signatures as RRSIG records.</li>
		  <li>The domain publishes the corresponding public key as a DNSKEY record.</li>
		  <li>Finally, the domain publishes the certificates (of its certificate chain) as CERT records.</li>
		</ol>

		<section>
		  <name>Generating Signatures of RRsets</name>
		  <t>For each RRset, the domain generates its signature and publishes it as an RRSIG record.</t>
		  
		  <section>
		  	<name>PKIX Certificates</name>
			<t>ost domains use PKIX <xref target="RFC5280"/> certificates for HTTPS (or TLS). Thus, they are familiar with how to handle such certificates (issuance, storage, and so on). We also rely on PKIX certificates issued by CAs for DNSSEC-PKI.</t>
		  </section>
		  
		  <section>
		  	<name>RRSIG Records</name>
			<t>We use RRSIG records for digital signatures of RRsets, which are generated by a private key in a PKIX certificate. The description of the RRSIG RR format is specified in Section 3 of <xref target="RFC4034"/>. The Key Tag field should be calculated as explained in Appendix B of <xref target="RFC4034"/>.</t>
			<t>A validator can fetch and validate RRSIG records to check the integrity and authenticity of DNS RRs.</t>
		  </section>

		</section>

		<section>
		  <name>Publishing Public Keys and Certificate Chains</name>
		  <t>Like DNSSEC, DNSSEC-PKI uses the public key cryptography to generate signatures of DNS RRsets. Thus, a domain should publish the public key as a DNS record. Also, the domain should publish a certificate that contains the public key and its certificate chain to allow a DNS client to validate the certificate and the signature. For this purpose, we use two existing DNS resource record (RR) types in DNSSEC.</t>
		  
		  <section>
		  	<name>DNSKEY Records</name>
			<t>A domain (or zone) generates the signatures of DNS RRsets using its private key. The corresponding public key is stored in a DNSKEY RR which is described in Section 2 of <xref target="RFC4034"/>. As specified in Section 2 of <xref target="RFC4034"/>, a DNSKEY RR MUST have a signature algorithm and a public key.</t>
			<t>Other fields except the Flags field have the same meaning as those specified in Section 2 of <xref target="RFC4034"/>. </t>
			<section anchor="Flagfield">
			  <name>The Flags Field extension</name>
			  <t><xref target="RFC4034"/> specifies the use of two bits in the Flags field. Bit 7 is used to specify the Zone Key flag. If bit 7 is set to 1, the DNSKEY RR contains a DNS zone key. Otherwise, the DNSKEY MUST NOT be used to verify RRSIGs. Thus, to use DNSSEC-PKI, bit 7 MUST be set to 1.</t>
			  <t>Bit 15 is used to specify the Secure Entry Point flag which is described in <xref target="RFC3757"/>. If bit 7 is set to 1, the DNSKEY RR contains a key-signing key (KSK). Otherwise, the DNSKEY RR contains a zone-signing key (ZSK). In DNSSEC-PKI, a private key corresponding to the public key in the DNSKEY RR is used to sign a zone’s RRsets, and hence its role is similar to that of a ZSK. Thus, for DNSSEC-PKI, bit 7 MUST be set to 0.</t>
			  <t>We propose to use bit 3 to specify whether the DNSSEC-PKI extension is supported flag (P). If bit 3 is set to 1, the public key in DNSKEY RR MUST be validated using the certificates in CERT RRs (specified in <xref target="CERTrecord"/>).</t>

			  <figure anchor="DNSSEC-PKIflag">
		  	   <name>DNSSEC-PKI (P) Flag</name>
		  	   <artwork><![CDATA[
                     1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     |P|      flags            |   protocol    |   algorithm   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/                                                               /
/                        public key                             /
/                                                               /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
	   		   ]]></artwork>
      		  </figure>
	
		    
		    </section>
		  </section>
		  
		  <section anchor="CERTrecord">
		  	<name>CERT Records</name>
			<t>A CERT RR <xref target="RFC4398"/> contains a PKIX certificate. The certificate includes a public key which is also included in a DNSKEY RR.</t>
			<t>A Key Tag should be calculated using the public key in the certificate as specified in Appendix B of <xref target="RFC4034"/>.</t>
			<t>We assume that a DNS client already stores the certificate of a root CA. Thus, CERT RRs include the certificates of the domain, issuing CA and intermediate CAs (excluding the root CA).</t>
		  </section>

		</section>

	</section>

	<section>
	  <name>Validator’s Behavior</name>
	  <section>
		<name>Verifying DNS RR</name>
		<t>DNSSEC-PKI guarantees the integrity and authenticity of DNS RRs based on public key cryptography. Validators should verify the signatures of DNS RRsets generated by domains.</t>
		<t>To check the integrity and authenticity of DNS RRs, a validator:</t>
		<ol>
		  <li><t>Fetches a target DNS RRset and its RRSIG, DNSKEY, and CERT RRs.</t>
            <ul>
			  <li>If there are cached DNS records whose TTLs are valid, the validator can use them directly.</li>
		      <li>The fetched DNS records can be cached.</li>  
		    </ul>
	      </li>
		  <li><t>Extracts a public key from the DNSKEY RR and another from a leaf certificate in the CERT RR.</t>
		  	<ul>
			  <li>If the extracted public keys are not matched, the verification of the signature fails.</li>
			  <li>Otherwise, it proceeds to the next step.</li>
		  	</ul>
		  </li>
		  <li><t>Validates the chain of certificates in the CERT RRs.</t>
			<ul>
			  <li>A certificate chain can be verified according to Section 6 of <xref target="RFC5280"/>.</li>
			  <li>If the certificate chain verification fails, the verification of the signature fails.</li>
		    </ul>
		  </li>
		  <li><t>Verifies the signature in the RRSIG RR using the public key.</t>
          </li>
		</ol>
	  </section>

	  <section>
		<name>Determine Verification Results</name>
		<t>The signature verification will result in one of the following:</t>  
		<ul>
		  <li>Mismatch of public keys in DNSKEY and Certificate: A public key in a DNSKEY RR and another in a certificate are different.</li>
	      <li>Certificate chain validation failure: The public keys in a DNSKEY RR and a certificate are matched but a certificate chain validation failed. (e.g., a certificate of a CA is expired).</li>
	      <li>Signature validation failure: A chain of certificates is validated but the validation of RRSIGs fails (e.g., missing signatures or incorrect signatures).</li>
	      <li>Authenticated: the signature is verified.</li>
	    </ul>
		<t>If a client trusts a (local or public) resolver, the resolver should validate the signature of DNS RRs and return the result to the client. A resolver sets the Authenticated Data (AD) bit in the message header of the DNS response message if and only if the queried RRset is authenticated.</t>
		<t>If a client does not trust the resolver, it should verify the signature (RRSIG) by itself.</t>
	  </section>

   </section>   


    <section anchor="IANA">
	  <name>IANA Considerations</name>
	  <t>We ask to update the “DNSKEY FLAGS” registry <xref target="RFC3755"/><xref target="RFC4034"/> to assign 3rd bit in the DNSKEY Flags as the DNSSEC-PKI (P) bit.</t> 
	  
	  <table>
	  	<name>DNSSEC-PKI (P) bit</name>
        <thead>
			<tr><th>Number</th><th>Description</th><th>Reference</th></tr>
        </thead>
        <tbody>
			<tr><td>3</td><td>DNSSEC-PKI (P)</td><td><xref target="Flagfield"/> of this document</td></tr>
        </tbody>
      </table>


    </section>
    
    <section anchor="Security">
      <name>Security Considerations</name>

	  <section>
	  	<name>Authenticated Denial of Existence</name>
		<t>We recommend using the NSEC <xref target="RFC4034"/> or NSEC3 <xref target="RFC5155"/> mechanism to provide the authenticated denial of existence.</t>
	  </section>
 
	  <section>
	  	<name>Leveraging Certificate Authorities</name>
		<t>DNSSEC-PKI leverages PKIX certificates issued by CAs. However, Certificate Authorities (CAs) have been criticized since there are no limits in a namespace in terms of certificate issuance. Protocols such as DNS CAA <xref target="RFC8659"/> and Certificates Transparency <xref target="RFC9162"/> can mitigate the problem.</t>
	  </section>
   
    </section>
    
    <!-- NOTE: The Acknowledgements and Contributors sections are at the end of this template -->
  </middle>

  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.2119.xml"/>
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.8174.xml"/>
		<!-- The recommended and simplest way to include a well known reference -->

		<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.3755.xml"/>
		<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.3757.xml"/>
		<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.4033.xml"/>
		<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.4034.xml"/>
		<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.4398.xml"/>
		<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.5155.xml"/>
		<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.5280.xml"/>

		<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.8659.xml"/>
		<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.9162.xml"/>
      </references>
 
      <references>
        <name>Informative References</name>
       
        <reference anchor="DNSSEC-Deployment" target="https://www.usenix.org/system/files/conference/usenixsecurity17/sec17-chung.pdf">
          <front>
            <title>A Longitudinal, End-to-End View of the DNSSEC Ecosystem</title>
            <author initials="T." surname="Chung">
              <organization/>
		    </author>
            <author initials="R." surname="van Rijswijk-Deij">
              <organization/>
		    </author>
			<author initials="B." surname="Chandrasekaran">
              <organization/>
		    </author>
			<author initials="D." surname="Choffnes">
              <organization/>
		    </author>
			<author initials="D." surname="Levin">
              <organization/>
		    </author>
			<author initials="B. M." surname="Maggs">
              <organization/>
		    </author>
			<author initials="A." surname="Misloven">
              <organization/>
		    </author>
			<author initials="C." surname="Wilson">
              <organization/>
		    </author>

            <date month="August" year="2017"/>
		  </front>
	      <seriesInfo name="Proceedings of the 26th USENIX Security Symposium,"
value="Vancouver"/>
          <format type="PDF" target="https://www.usenix.org/system/files/conference/usenixsecurity17/sec17-chung.pdf"/>
	    </reference>

      </references>
    </references>

	<!--
    <section>
      <name>Appendix 1 [REPLACE/DELETE]</name>
      <t>This becomes an Appendix [REPLACE]</t>
    </section>

    <section anchor="Acknowledgements" numbered="false">
      <name>Acknowledgements</name>
      <t>This template uses extracts from templates written by Pekka Savola, Elwyn Davies and 
        Henrik Levkowetz. [REPLACE]</t>
    </section>
    
    <section anchor="Contributors" numbered="false">
      <name>Contributors</name>
      <t>Thanks to all of the contributors. [REPLACE]</t>
    </section>
	--> 
 </back>
</rfc>
