Token Factory API - a way to issue tokens for ID-based travelling

Background

The project for Sydlänen/Lynx will launch a solution for ID-based travelling and needed therefore a secure way to issue tokens to travel documents, in this case travel cards where in this case Areff is the provider.

For this project Kirei was responsible to bring up a solution with the Token Factory API as the result which is one possible way of doing this.

  

Purpose

To highlight one way of issuing tokens to travel documents to enable ID-based travelling.

Related documentation 

MTS 7 - Travel card application

Token API - ID-based travelling

Definitions

ConceptDefinition
PersonalizationPersonalization is the operation that transforms a generic smart card (or other type of bearer) into an individually specific card that can be used for one or more applications.
Provisioning

Is the operation that feeds the chip of a Travel Document with a service of some kind.
This definition of this concept has in principal the same meaning as "personalization" - used by some actors. 

PICC

Abbrevation for "Proximity Integrated Circuit Card". A "contactless" smart card which can be read without inserting it into a reader device. Even if part of the definition of PICC is “card” the travel document can be of other form than a card such as watch, dongle or other.
PICC is requested in a travel document for ID based travel, refer to MTS 7

Travel document

Definition from BoB Token API:

An object (plastic card, wearable, app in mobile phone etc.) that carries a physical or emulated PICC (Proximity Integrated Circuit Card) in which a Travel Card Application is run which consists of a so called Travel Document also referred to as MTB (Mobile Ticket Bundle) is in its total the physical bearer for which the validity to travel is formed.

When the concept Travel Document is used it is the above distinction that is referred to.


Sequence diagram

Sequence steps

  1. A Travel Document with an empty PICC (proximity integrated circuit card) is exposed to the personalization/provisioning device.
  2. A request with POST/token towards the Token factory API by the token issuer is made to create a new token container with a unique serial number. 
  3. The token container with serial number is sent to the personalization/provisioning device.  
  4. The personalization/provisioning device creates the BoB application ("Travel Card Application" according to MTS7) on the exposed Travel Document.
  5. The personalization/provisioning device requests the Travel card application (on the Travel Document) to generate a token (public/private key).
  6. The personalization/provisioning device requests the Travel card application (on the Travel Document) to get the token public key.
  7. The token public key is sent to the personalization device.
  8. The personalization/provisioning device sends request by PUT/token/{serial}/public key for registration of the generated token public key on the token issuer side.
  9. Response of registration from token issuer is sent back to the personalization/provisioning device.
  10. The personalization/provisioning device sends request by GET/token/{serial}/mtb to fetch a signed MTB for the generated token from token issuer.
  11. A signed MTB is sent back to the personalization/provisioning device.
  12. The signed MTB is written on the exposed Travel document.

The travel document is now prepared with the MTB and BoB application to be able to tie tickets for travel to, see sequence for TokenAPI.

 Expand for sequence diagram code

For editing of sequence diagram - Use below code in: https://sequencediagram.org/


Title Token Factory - personalization of a travel document

participant "Travel document \n " as v_a#C2EDFE
participant "Personalization device \n " as tdi
participant "Token factory API\n (Token Issuer)" as t_s#C2EDFE


autonumber
entryspacing 0.9
== Token container creation ==

v_a->tdi:Expose travel document with empty PICC
tdi->t_s:Request of new serial number\nPOST/tokenfactory
tdi<--t_s:Token container with serial number

== BoB application generation ==
v_a<-tdi:Write BoB application
v_a<-tdi:Request token key (public/private) generation
v_a<-tdi:Request token public key
v_a-->tdi:Token public key

== Public key registration ==
tdi->t_s:Register token public key\nPUT/tokenfactory/{serial}/public key
tdi<--t_s:Public key registered

== Signed MTB generation ==


tdi->t_s:Request BoB MTB for token\nGET/tokenfactory/{serial}/mtb
tdi<--t_s:Signed MTB
v_a<-tdi:Write MTB