<?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-mls-kohbrok-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-mls-kohbrok-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-mls-kohbrok-single-signature-keypackages.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-mls-kohbrok-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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
IUcfXn8g2c+Ed/8DHBplBoASAAA=

-->

</rfc>
