aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Schanzenbach <schanzen@gnunet.org>2024-04-08 15:28:27 +0200
committerMartin Schanzenbach <schanzen@gnunet.org>2024-04-08 15:28:27 +0200
commit0282b071b064bd1d73bcff35ab3f69ccd4e47386 (patch)
treeb9b73b83e007d4abf7c1ca0e4b61949e8b7ee8ce
parentff5479db2f1a3cb735c296494b8908148d15e954 (diff)
downloadlsd0002-master.tar.gz
lsd0002-master.zip
Start updating and improving reclaimID protocol.HEADmaster
-rw-r--r--draft-schanzen-reclaimid.xml130
1 files changed, 78 insertions, 52 deletions
diff --git a/draft-schanzen-reclaimid.xml b/draft-schanzen-reclaimid.xml
index 4776d46..3698e5b 100644
--- a/draft-schanzen-reclaimid.xml
+++ b/draft-schanzen-reclaimid.xml
@@ -247,67 +247,59 @@
247 issued by a user for an identity to a relying party. 247 issued by a user for an identity to a relying party.
248 The Ticket may then be used by the relying party to retrieve the 248 The Ticket may then be used by the relying party to retrieve the
249 shared attributes from the name system. 249 shared attributes from the name system.
250 The record wire format of a Ticket is as follows:
251 </t> 250 </t>
252 <figure anchor="figure_ticket"> 251 <t>
253 <artwork name="" type="" align="left" alt=""><![CDATA[ 252 A ticket is a GNS name that points to information pertaining to
253 the authorization given to the relying party.
254 The ticket has the format:
255 </t>
256 <figure>
257 <artwork type="abnf"><![CDATA[
258ticket = "TID.IDENTITY.zkey"
259TID = *gnslabel
260IDENTITY = *gnslabel
261]]>
262 </artwork>
263 </figure>
264 <t>
265 The TID essentially serves as a shared secret between user and
266 relying party. knowledge of the IDENTITY key and the TID allows
267 the relying party to iteratively query attribute data in GNS.
268 The record set under the TID label contains references to the shared attributes as
269 well as any credential presentations which attest attribute values.
270 The record set also includes the AUDIENCE key.
271 </t>
272 <section anchor="rp_rr" numbered="true" toc="default">
273 <name>Relying party reference</name>
274 <t>
275 A RP resource record is stored in GNS under records
276 of type "RECLAIM_RP". An RP reference
277 is stored in GNS under the TID.
278 The record format of a RECLAIM_RP is as follows:
279 </t>
280 <figure anchor="figure_gnsrp">
281 <artwork name="" type="" align="left" alt=""><![CDATA[
2540 8 16 24 32 40 48 56 2820 8 16 24 32 40 48 56
255+-----+-----+-----+-----+-----+-----+-----+-----+ 283+-----+-----+-----+-----+-----+-----+-----+-----+
256| IDENTITY TYPE | IDENTITY | 284| AUDIENCE KEY |
257+-----------------------+ |
258| +-----------------------|
259| | AUDIENCE TYPE |
260+-----+-----+-----+-----+-----+-----+-----+-----+
261| AUDIENCE |
262| |
263| |
264| |
265+-----+-----+-----+-----+-----+-----+-----+-----+
266| TID |
267| | 285| |
268| | 286| |
269| | 287| |
270+-----+-----+-----+-----+-----+-----+-----+-----+ 288+-----+-----+-----+-----+-----+-----+-----+-----+
271 ]]></artwork> 289 ]]></artwork>
272 <!-- <postamble>which is a very simple example.</postamble>--> 290 <!-- <postamble>which is a very simple example.</postamble>-->
273 </figure> 291 </figure>
274 <t> 292 <t>
275 where: 293 where:
276 </t> 294 </t>
277 <dl> 295 <dl>
278 <dt>IDENTITY TYPE</dt> 296 <dt>AUDIENCE KEY</dt>
279 <dd> 297 <dd>
280 Is the 32 bit identity type as defined in GANA for GNS 298 Is the audience zone key.
281 identity zone types (e.g. PKEY). 299 </dd>
282 </dd> 300 </dl>
283 <dt>IDENTITY</dt> 301 </section>
284 <dd> 302 <section anchor="attrrefs" numbered="true" toc="default">
285 Is the 256 bit identity public zone key of the user.
286 </dd>
287 <dt>AUDIENCE TYPE</dt>
288 <dd>
289 Is the 32 bit audience type as defined in GANA for GNS
290 identity zone types (e.g. PKEY).
291 </dd>
292 <dt>AUDIENCE</dt>
293 <dd>
294 Is the 256 bit audience public zone key of the relying party.
295 </dd>
296 <dt>TID</dt>
297 <dd>
298 Is a 256 bit ticket identifier.
299 </dd>
300 </dl>
301 <t>
302 The TID essentially serves as a shared secret between user and
303 relying party. knowledge of the IDENTITY key and the TID allows
304 the relying party to iteratively query attribute data in GNS.
305 Tickets are stored as RECLAIM_TICKET records under a label derived
306 from the TID by applying a Base64-encoding. In addition to the ticket,
307 the record set also contains references to the shared attributes as
308 well as any credential presentations which attest attribute values.
309 </t>
310 <section anchor="attrrefs" numbered="true" toc="default">
311 <name>Attribute References</name> 303 <name>Attribute References</name>
312 <t> 304 <t>
313 An attribute reference is stored in GNS under records 305 An attribute reference is stored in GNS under records
@@ -440,6 +432,40 @@
440 432
441 <section anchor="security" numbered="true" toc="default"> 433 <section anchor="security" numbered="true" toc="default">
442 <name>Security Considerations</name> 434 <name>Security Considerations</name>
435 <section anchor="tickets_generation" numbered="true" toc="default">
436 <name>Ticket generation</name>
437 <t>
438 The TID in a Ticket <bcp14>SHOULD</bcp14> have at least 256 bits of entropy.
439 The TID could be generated by simply sampling 32 bytes of random data and
440 encoding it using a suitable text encoding compatible with GNS labels such as
441 Base64.
442 </t>
443 <t>
444 The TID <bcp14>MAY</bcp14> be derived using more sophisticated means in order to
445 be able to relax security requirements on the exchange or storage of authorization metadata.
446 One option is to derive the TID using ephemeral Diffie-Hellman.
447 The user would first create an ephemeral key pair and calculate the TID in order to
448 populate the GNS resource records:
449 </t>
450 <artwork name="" type="" align="left" alt=""><![CDATA[
451CreateTid(AUDIENCE_PK):
452 x := rand()
453 ETK := X25519 (x, AUDIENCE_PK)
454 dhs := X25519 (x, G)
455 TID := Base64 (SHA-512 (dhs))
456 return (TID,ETK)
457 ]]></artwork>
458 <t>
459 This allows to the user to only transfer the ETK which can in turn be
460 used by the relying party to calculate the ticket identifier (TID)
461 using its private key:
462 </t>
463 <artwork name="" type="" align="left" alt=""><![CDATA[
464CalculateTid(AUDIENCE_SK,ETK):
465 dhs := X25519 (AUDIENCE_SK, G)
466 return TID := Base64 (SHA-512 (dhs))
467 ]]></artwork>
468 </section>
443 </section> 469 </section>
444 <section anchor="gana" numbered="true" toc="default"> 470 <section anchor="gana" numbered="true" toc="default">
445 <name>GANA Considerations</name> 471 <name>GANA Considerations</name>