lsd0016

LSD0016: The GNS Split Record Set
Log | Files | Refs

commit e8df759cbca55064d919233e5249a8197612d886
Author: Martin Schanzenbach <schanzen@gnunet.org>
Date:   Mon,  2 Mar 2026 14:42:19 +0100

lsd0016

Diffstat:
A.buildbot/build.sh | 3+++
A.buildbot/firefly-x86_64-amdepyc_deploy.sh | 10++++++++++
AMakefile | 10++++++++++
Adraft-schanzen-gns-split-rrset.xml | 296+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 319 insertions(+), 0 deletions(-)

diff --git a/.buildbot/build.sh b/.buildbot/build.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +make diff --git a/.buildbot/firefly-x86_64-amdepyc_deploy.sh b/.buildbot/firefly-x86_64-amdepyc_deploy.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +# Deploy rest api from buildbot + +if [ -e index.html ]; then + rm index.html +fi +ln -s draft-schanzen-gns-split-rrset.html index.html +chmod -R ag+rX draft-schanzen-gns-split-rrset.* index.html . +rsync --exclude=".*" --exclude="Makefile" -a --delete ./ lsd@firefly.gnunet.org:~/public/lsd0016/ diff --git a/Makefile b/Makefile @@ -0,0 +1,10 @@ +NAME=draft-schanzen-gns-split-rrset + +all: txt html + +html: + xml2rfc --html --css style.css ${NAME}.xml + +txt: + xml2rfc ${NAME}.xml + diff --git a/draft-schanzen-gns-split-rrset.xml b/draft-schanzen-gns-split-rrset.xml @@ -0,0 +1,296 @@ +<?xml version='1.0' encoding='utf-8'?> +<!DOCTYPE rfc [ +<!ENTITY RFC1034 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.1034.xml"> +<!ENTITY RFC1035 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.1035.xml"> +<!ENTITY RFC2119 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml"> +<!ENTITY RFC2782 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2782.xml"> +<!ENTITY RFC3629 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3629.xml"> +<!ENTITY RFC3686 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3686.xml"> +<!ENTITY RFC3826 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3826.xml"> +<!ENTITY RFC3912 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3912.xml"> +<!ENTITY RFC5869 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5869.xml"> +<!ENTITY RFC5890 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5890.xml"> +<!ENTITY RFC5891 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5891.xml"> +<!ENTITY RFC6781 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6781.xml"> +<!ENTITY RFC6895 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6895.xml"> +<!ENTITY RFC6979 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6979.xml"> +<!ENTITY RFC7748 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7748.xml"> +<!ENTITY RFC8032 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8032.xml"> +<!ENTITY RFC8126 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8126.xml"> +]> +<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> +<?rfc strict="yes" ?> +<?rfc toc="yes" ?> +<?rfc symrefs="yes"?> +<?rfc sortrefs="yes" ?> +<?rfc compact="yes" ?> +<?rfc subcompact="no" ?> +<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="info" docName="draft-schanzen-gns-split-rrset-00" ipr="trust200902" obsoletes="" updates="" submissionType="IETF" xml:lang="en" version="3"> + <!-- xml2rfc v2v3 conversion 2.26.0 --> + <front> + <title abbrev="gns_split_rrset"> + The GNS Split Resource Record Set + </title> + <seriesInfo name="Internet-Draft" value="draft-schanzen-gns-split-rrset-00"/> + <author fullname="Martin Schanzenbach" initials="M." surname="Schanzenbach"> + <organization>GNUnet e.V.</organization> + <address> + <postal> + <street>Boltzmannstrasse 3</street> + <city>Garching</city> + <code>85748</code> + <country>DE</country> + </postal> + <email>schanzen@gnunet.org</email> + </address> + </author> + <author fullname="Thomas Bellebaum" initials="T." surname="Bellebaum"> + <organization>Fraunhofer AISEC</organization> + <address> + <postal> + <street>Lichtenbergstrasse 11</street> + <city>Garching</city> + <code>85748</code> + <country>DE</country> + </postal> + <email>thomas.bellebaum@aisec.fraunhofer.de</email> + </address> + </author> + <!-- Meta-data Declarations --> + <area>General</area> + <workgroup>Independent Stream</workgroup> + <keyword>gnu name system</keyword> + <abstract> + <t>This document contains the technical specification of the GNS Split Resource Record Set.</t> + </abstract> + </front> + <middle> + <section anchor="introduction" numbered="true" toc="default"> + <name>Introduction</name> + <t> + In GNS, resource record set sizes are limited by the underlying storage + component. + For example, in the current instantion in GNUnet on top of R<sup>5</sup>N, + Resource record sets must fit into around 64 kilobytes. + This includes all records in the set as well as signatures and encryption overhead + (e.g. the authentication tag). + This prohibits use cases that require some large records or a lot of small records, but also + makes post-quantum signature schemes more difficult to integrate. + </t> + <t> + This document defines a new record type that allows record sets to be split + across multiple record sets in GNS. + The new record type is backwards compatible with the existing GNS, + but resolver that do not conform to this specification will be unable to + fully retrieve the split record set. + In this case, the applicatin must take care and collect all entries of the record + set in the zone. + </t> + <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 anchor="gnsrecords_split" numbered="true" toc="default"> + <name>LEHO</name> + <t> + This record consists of a list of resource record types that should + exist and belong to this record set. + </t> + <t> + A LEHO resource record is expected to be found together in a single + resource record with an IPv4 or IPv6 address. + A LEHO DATA entry is illustrated in <xref target="figure_lehorecord"/>. + </t> + <figure anchor="figure_lehorecord" title="The LEHO DATA Wire Format."> + <artwork name="" type="" align="left" alt=""><![CDATA[ +0 8 16 24 32 ++-----+-----+-----+-----+ +| RECORD TYPE 0 | ++-----------------------+ +| RECORD TYPE 1 | ++-----------------------+ +/ ... / +/ / ++-----------------------+ +| RECORD TYPE N-1 | ++-----+-----+-----+-----+ + ]]></artwork> + </figure> + <dl> + <dt>RECORD TYPE X</dt> + <dd> + The 32-bit record type number (as defined in GANA) in network byte order. + </dd> + </dl> + <t> + The record types indicate to the resolve that it <bcp14>SHOULD</bcp14> try to resolve + further resource record sets of the specified type(s) if the record type is being + asked for as part of the resolution. + Otherwise, the record type can be ignored. + </t> + </section> + <section numbered="true" toc="default"> + <name>Resolver behaviour</name> + <t> + When a resolver encounters a SPLIT record in a record set for + a label L in zone Z, it <bcp14>SHOULD</bcp14> process it as follows. + For reach record type T encountered in the SPLIT record, and in the + set of record types that is currently of interest, calculate the + next label as L' := Base32-GNS(SHA-256(Z,T,L)) with: + </t> + <t> + The resolver then queries L' in Z to retrieve the next part of the + record set for this record type. + The resulting record set <bcp14>MAY</bcp14> contain other record types + than the record type indicated by the SPLIT record, but those records + should only consist of supplemental or auxiliary records. + Otherwise, efficient resolution of record types is not possible. + </t> + </section> + + <section anchor="security" numbered="true" toc="default"> + <name>Security Considerations</name> + <section anchor="resolver_loop" numbered="true" toc="default"> + <name>Loops</name> + <t> + Resolvers must take care to avoid loops. + While statistically unlikely due to the use of a collision-resistant hash function + in the derivation label, a resolver could accidentally be caught in a resolution loop. + </t> + <artwork name="" type="" align="left" alt=""><![CDATA[ +CreateTid(AUDIENCE_PK): + x := rand() + ETK := X25519 (x, AUDIENCE_PK) + dhs := X25519 (x, G) + TID := Base64 (SHA-512 (dhs)) + return (TID,ETK) + ]]></artwork> + <t> + This allows to the user to only transfer the ETK which can in turn be + used by the relying party to calculate the ticket identifier (TID) + using its private key: + </t> + <artwork name="" type="" align="left" alt=""><![CDATA[ +CalculateTid(AUDIENCE_SK,ETK): + dhs := X25519 (AUDIENCE_SK, G) + return TID := Base64 (SHA-512 (dhs)) + ]]></artwork> + </section> + </section> + <section anchor="gana" numbered="true" toc="default"> + <name>GANA Considerations</name> + <t> + GANA is requested to populate this registry as follows: + </t> + <figure anchor="figure_rrtypenums"> + <artwork name="" type="" align="left" alt=""><![CDATA[ +Number: 65549 +Name: RECLAIM_TICKET +Contact: N/A +References: [This.I-D] +Description: Ticket + +Number: 65549 +Name: RECLAIM_ATTRIBUTE +Contact: N/A +References: [This.I-D] +Description: Identity attribute + +Number: 65550 +Name: RECLAIM_ATTRIBUTE_REF +Contact: N/A +References: [This.I-D] +Description: Refrerence to identity attribute + +Number: 65551 +Name: RECLAIM_OIDC_CLIENT +Contact: N/A +References: [This.I-D] +Description: OIDC client description + +Number: 65552 +Name: RECLAIM_OIDC_REDIRECT +Contact: N/A +References: [This.I-D] +Description: OIDC client redirect(s) + +Number: 65553 +Name: RECLAIM_CREDENTIAL +Contact: N/A +References: [This.I-D] +Description: Credential + +Number: 65554 +Name: RECLAIM_PRESENTATION +Contact: N/A +References: [This.I-D] +Description: Credential presentation + ]]></artwork> + </figure> + <t> + GANA is requested to amend the "GNUnet Signature Purpose" registry + as follows: + </t> + <figure anchor="figure_purposenums"> + <artwork name="" type="" align="left" alt=""><![CDATA[ +Purpose: 27 +Name: RECLAIM_CODE_SIGN +References: [This.I-D] +Description: Signature in OIDC authorization code + ]]></artwork> + </figure> + </section> + <!-- gana --> + <section> + <name>Test Vectors</name> + </section> + </middle> + <back> + <references> + <name>Normative References</name> + + &RFC2119; + &RFC3629; + + <reference anchor="GNS" target="https://lsd.gnunet.org/lsd0001"> + <front> + <title>The GNU Name System</title> + <author initials="M." surname="Schanzenbach" fullname="Martin Schanzenbach"> + <organization>GNUnet e.V.</organization> + </author> + + <author initials="C." surname="Grothoff" fullname="Christian Grothoff"> + <organization>GNUnet e.V.</organization> + </author> + + <author initials="B." surname="Fix" + fullname="Bernd Fix"> + <organization>GNUnet e.V.</organization> + </author> + <date year="2020" month="March"/> + </front> + </reference> + <reference anchor="Unicode-UAX15" target="https://www.unicode.org/reports/tr15/tr15-31.html"> + <front> + <title> + Unicode Standard Annex #15: Unicode Normalization Forms + </title> + <author initials="M." surname="Davis" fullname="Mark Davis"> + <organization/> + </author> + <author initials="K." surname="Whistler" fullname="Ken Whistler"> + <organization/> + </author> + <author initials="M." surname="Dürst" fullname="Martin Dürst"> + <organization/> + </author> + <date year="2009" month="September"/> + </front> + <refcontent>Revision 31, The Unicode Consortium, Mountain View</refcontent> + </reference> + </references> + </back> + </rfc>