lsd0002

LSD0002: re:claimID
Log | Files | Refs | README

commit 0282b071b064bd1d73bcff35ab3f69ccd4e47386
parent ff5479db2f1a3cb735c296494b8908148d15e954
Author: Martin Schanzenbach <schanzen@gnunet.org>
Date:   Mon,  8 Apr 2024 15:28:27 +0200

Start updating and improving reclaimID protocol.

Diffstat:
Mdraft-schanzen-reclaimid.xml | 130+++++++++++++++++++++++++++++++++++++++++++++++--------------------------------
1 file changed, 78 insertions(+), 52 deletions(-)

diff --git a/draft-schanzen-reclaimid.xml b/draft-schanzen-reclaimid.xml @@ -247,67 +247,59 @@ issued by a user for an identity to a relying party. The Ticket may then be used by the relying party to retrieve the shared attributes from the name system. - The record wire format of a Ticket is as follows: </t> - <figure anchor="figure_ticket"> - <artwork name="" type="" align="left" alt=""><![CDATA[ + <t> + A ticket is a GNS name that points to information pertaining to + the authorization given to the relying party. + The ticket has the format: + </t> + <figure> + <artwork type="abnf"><![CDATA[ +ticket = "TID.IDENTITY.zkey" +TID = *gnslabel +IDENTITY = *gnslabel +]]> + </artwork> + </figure> + <t> + The TID essentially serves as a shared secret between user and + relying party. knowledge of the IDENTITY key and the TID allows + the relying party to iteratively query attribute data in GNS. + The record set under the TID label contains references to the shared attributes as + well as any credential presentations which attest attribute values. + The record set also includes the AUDIENCE key. + </t> + <section anchor="rp_rr" numbered="true" toc="default"> + <name>Relying party reference</name> + <t> + A RP resource record is stored in GNS under records + of type "RECLAIM_RP". An RP reference + is stored in GNS under the TID. + The record format of a RECLAIM_RP is as follows: + </t> + <figure anchor="figure_gnsrp"> + <artwork name="" type="" align="left" alt=""><![CDATA[ 0 8 16 24 32 40 48 56 +-----+-----+-----+-----+-----+-----+-----+-----+ -| IDENTITY TYPE | IDENTITY | -+-----------------------+ | -| +-----------------------| -| | AUDIENCE TYPE | -+-----+-----+-----+-----+-----+-----+-----+-----+ -| AUDIENCE | -| | -| | -| | -+-----+-----+-----+-----+-----+-----+-----+-----+ -| TID | +| AUDIENCE KEY | | | | | | | +-----+-----+-----+-----+-----+-----+-----+-----+ ]]></artwork> <!-- <postamble>which is a very simple example.</postamble>--> - </figure> - <t> - where: - </t> - <dl> - <dt>IDENTITY TYPE</dt> - <dd> - Is the 32 bit identity type as defined in GANA for GNS - identity zone types (e.g. PKEY). - </dd> - <dt>IDENTITY</dt> - <dd> - Is the 256 bit identity public zone key of the user. - </dd> - <dt>AUDIENCE TYPE</dt> - <dd> - Is the 32 bit audience type as defined in GANA for GNS - identity zone types (e.g. PKEY). - </dd> - <dt>AUDIENCE</dt> - <dd> - Is the 256 bit audience public zone key of the relying party. - </dd> - <dt>TID</dt> - <dd> - Is a 256 bit ticket identifier. - </dd> - </dl> - <t> - The TID essentially serves as a shared secret between user and - relying party. knowledge of the IDENTITY key and the TID allows - the relying party to iteratively query attribute data in GNS. - Tickets are stored as RECLAIM_TICKET records under a label derived - from the TID by applying a Base64-encoding. In addition to the ticket, - the record set also contains references to the shared attributes as - well as any credential presentations which attest attribute values. - </t> - <section anchor="attrrefs" numbered="true" toc="default"> + </figure> + <t> + where: + </t> + <dl> + <dt>AUDIENCE KEY</dt> + <dd> + Is the audience zone key. + </dd> + </dl> + </section> + <section anchor="attrrefs" numbered="true" toc="default"> <name>Attribute References</name> <t> An attribute reference is stored in GNS under records @@ -440,6 +432,40 @@ <section anchor="security" numbered="true" toc="default"> <name>Security Considerations</name> + <section anchor="tickets_generation" numbered="true" toc="default"> + <name>Ticket generation</name> + <t> + The TID in a Ticket <bcp14>SHOULD</bcp14> have at least 256 bits of entropy. + The TID could be generated by simply sampling 32 bytes of random data and + encoding it using a suitable text encoding compatible with GNS labels such as + Base64. + </t> + <t> + The TID <bcp14>MAY</bcp14> be derived using more sophisticated means in order to + be able to relax security requirements on the exchange or storage of authorization metadata. + One option is to derive the TID using ephemeral Diffie-Hellman. + The user would first create an ephemeral key pair and calculate the TID in order to + populate the GNS resource records: + </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>