diff options
author | Martin Schanzenbach <schanzen@gnunet.org> | 2024-04-08 15:28:27 +0200 |
---|---|---|
committer | Martin Schanzenbach <schanzen@gnunet.org> | 2024-04-08 15:28:27 +0200 |
commit | 0282b071b064bd1d73bcff35ab3f69ccd4e47386 (patch) | |
tree | b9b73b83e007d4abf7c1ca0e4b61949e8b7ee8ce | |
parent | ff5479db2f1a3cb735c296494b8908148d15e954 (diff) | |
download | lsd0002-master.tar.gz lsd0002-master.zip |
-rw-r--r-- | draft-schanzen-reclaimid.xml | 130 |
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[ | ||
258 | ticket = "TID.IDENTITY.zkey" | ||
259 | TID = *gnslabel | ||
260 | IDENTITY = *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[ | ||
254 | 0 8 16 24 32 40 48 56 | 282 | 0 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[ | ||
451 | CreateTid(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[ | ||
464 | CalculateTid(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> |