<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-kohbrok-mls-single-signature-keypackages-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="sskp">Single Signature KeyPackages</title>
    <seriesInfo name="Internet-Draft" value="draft-kohbrok-mls-single-signature-keypackages-00"/>
    <author fullname="Raphael Robert">
      <organization>Phoenix R&amp;D</organization>
      <address>
        <email>ietf@raphaelrobert.com</email>
      </address>
    </author>
    <author fullname="Konrad Kohbrok">
      <organization>Phoenix R&amp;D</organization>
      <address>
        <email>konrad@ratchet.ing</email>
      </address>
    </author>
    <date year="2025" month="October" day="20"/>
    <area>Security</area>
    <workgroup>Messaging Layer Security</workgroup>
    <keyword>mls</keyword>
    <abstract>
      <?line 40?>

<t>Single Signature KeyPackages improve the overhead of creating, transmitting and
verifying MLS KeyPackages by removing one signature.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://kkohbrok.github.io/draft-kohbrok-single-signature-keypackages/draft-kohbrok-mls-single-signature-keypackages.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-kohbrok-mls-single-signature-keypackages/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Messaging Layer Security Working Group mailing list (<eref target="mailto:mls@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/mls/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/mls/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/kkohbrok/draft-kohbrok-single-signature-keypackages"/>.</t>
    </note>
  </front>
  <middle>
    <?line 45?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>MLS KeyPackages require two signatures: One over the LeafNode and one over the
KeyPackage around it. This draft introduced a LeafNode component that contains a
hash over the KeyPackage fields surrounding the LeafNode. As a consequenve,
verifying the LeafNode also verifies the KeyPackage.</t>
      <t>Saving a signature is significant, especially in the context of PQ-secure
signature schemes such as ML-DSA, where signatures are multiple orders of
magnitude larger than those of most non-PQ signature schemes.</t>
    </section>
    <section anchor="single-signature-keypackages">
      <name>Single Signature KeyPackages</name>
      <t>A SingleSignatureKeyPackage (SSKP) functions much like a regular KeyPackage with
two exceptions: It lacks the signature around the outer KeyPackage and requires
a component inside the LeafNode that contains a hash of the KeyPackage around
the inner LeafNode.</t>
      <t>Since both parsing and processing of an SSKP is different from that of a regular
KeyPackage, this document introduces a new WireFormat
<tt>mls_single_signature_key_package</tt> and extends the select statement in the
definition of MLSMessage in Section 6 of <xref target="RFC9420"/> as follows.</t>
      <sourcecode type="tls"><![CDATA[
struct {
  ...
  select (MLSMessage.wire_format) {
    ...
    case mls_single_signature_key_package:
        SingleSignatureKeyPackage key_package;
  };
} MLSMessage;

struct {
  ProtocolVersion version;
  CipherSuite cipher_suite;
  HPKEPublicKey init_key;
  Extension extensions<V>;
} KeyPackageCore

struct {
  KeyPackageCore core;
  LeafNode leaf_node;
} SingleSignatureKeyPackage
]]></sourcecode>
      <t>A SingleSignatureKeyPackage is created and processed like a regular KeyPackage
with the following exceptions.</t>
      <ul spacing="normal">
        <li>
          <t>The signature around the outer KeyPackage is omitted upon creation</t>
        </li>
        <li>
          <t>As there is no signature around the outer KeyPackage, verification is skipped
during verification</t>
        </li>
        <li>
          <t>The <tt>app_data_dictionary</tt> in the <tt>leaf_node</tt> must contain a valid
KeyPackageCoreHash as defined in <xref target="keypackage-core-hash-component"/> under the
<tt>component_id</tt> TBD.</t>
        </li>
      </ul>
      <t>The original purpose of the signature over the KeyPackage is now served by the
signature over the LeafNode, which by inclusion of the KeyPackageCoreHash
provides authenticity for both the LeafNode itself <em>and</em> the KeyPackageCore
around it.</t>
    </section>
    <section anchor="keypackage-core-hash-component">
      <name>KeyPackage core hash component</name>
      <sourcecode type="tls"><![CDATA[
struct {
  opaque key_package_core_hash;
} KeyPackageCoreHash
]]></sourcecode>
      <t>The KeyPackageCoreHashComponent can be created by hashing the TLS-serialized
<tt>core</tt> of a SingleSignatureKeyPackage using the hash function of the LeafNode's
ciphersuite.</t>
      <t>A KeyPackageCoreHash is only valid if two conditions are met.</t>
      <ul spacing="normal">
        <li>
          <t>The <tt>leaf_node_source</tt> of the LeafNode is KeyPackage</t>
        </li>
        <li>
          <t>If the LeafNode is verified in the context of a SingleSignatureKeyPackage, the
<tt>key_package_core_hash</tt> is the hash of the <tt>core</tt> of that
SingleSignatureKeyPackage.</t>
        </li>
      </ul>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Security considerations around SingleSignatureKeyPackages are the same as
regular KeyPackages, except that content of the KeyPackageCore should not be
trusted until the signature of the LeafNode was verified and the
KeyPackageCoreHash validated.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="component-type">
        <name>Component Type</name>
        <t>This document requests the addition of a new Component Type under the heading of
"Messaging Layer Security".</t>
        <ul spacing="normal">
          <li>
            <t>Value: TBD</t>
          </li>
          <li>
            <t>key_package_core_hash</t>
          </li>
          <li>
            <t>Where: LN</t>
          </li>
          <li>
            <t>Recommended: Y</t>
          </li>
          <li>
            <t>Reference: TBD</t>
          </li>
        </ul>
      </section>
      <section anchor="wireformat">
        <name>WireFormat</name>
        <t>This document requests the addition of a new WireFormat under the heading of
"Messaging Layer Security".</t>
        <t>The <tt>mls_single_signature_key_package</tt> allows saving the creation and
verification of a signature that is necessary when creating a regular
KeyPackage.</t>
        <ul spacing="normal">
          <li>
            <t>Value: TBD</t>
          </li>
          <li>
            <t>Name: mls_single_signature_key_package</t>
          </li>
          <li>
            <t>Recommended: Y</t>
          </li>
          <li>
            <t>Reference: TBD</t>
          </li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="RFC9420">
        <front>
          <title>The Messaging Layer Security (MLS) Protocol</title>
          <author fullname="R. Barnes" initials="R." surname="Barnes"/>
          <author fullname="B. Beurdouche" initials="B." surname="Beurdouche"/>
          <author fullname="R. Robert" initials="R." surname="Robert"/>
          <author fullname="J. Millican" initials="J." surname="Millican"/>
          <author fullname="E. Omara" initials="E." surname="Omara"/>
          <author fullname="K. Cohn-Gordon" initials="K." surname="Cohn-Gordon"/>
          <date month="July" year="2023"/>
          <abstract>
            <t>Messaging applications are increasingly making use of end-to-end security mechanisms to ensure that messages are only accessible to the communicating endpoints, and not to any servers involved in delivering messages. Establishing keys to provide such protections is challenging for group chat settings, in which more than two clients need to agree on a key but may not be online at the same time. In this document, we specify a key establishment protocol that provides efficient asynchronous group key establishment with forward secrecy (FS) and post-compromise security (PCS) for groups in size ranging from two to thousands.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9420"/>
        <seriesInfo name="DOI" value="10.17487/RFC9420"/>
      </reference>
    </references>
    <?line 163?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
Q44+vP5Asp8J7/4HBgSY34ASAAA=

-->

</rfc>
