Skapa en verifieringstjänst
För dig som ska ta fram en veriferingstjänst för att avläsa QR-koder och verifiera digitala signaturer.
Om digital verifiering
Verifieraren ska säkerställa att Innehavaren har den behörighet/rättighet som krävs för att få tillträde, enligt gällande regelverk. Kontroll av biljettintyg innebär att man som verifierare kontrollerar den CWT token och signatur som finns i 2D koden med hjälp av en verifieringstjänst. I figuren nedan presenteras den packade QR-alfanumeriska koden.
Steg för att avkoda en QR kod i ett biljettintyg:
1. Avkoda QR koden
Avläs QR koden för att få QR alfanumeriska koden.
Hcert använder sig av ett prefix (HC1), isåfall börjar den med "HC1:6BF...".
2. Base45 avkodning
Base45-avkoda delen efter "HC1:" för att få det ZLIB-komprimerade innehållet.
3. Packa upp det ZLIB komprimerade innehållet
Packa upp det ZLIB komprimerade innehållet för att få ett CBOR Object Signing and Encryption (COSE) taggat meddelande (CWT).
4. CBOR-avkoda det taggade CWT meddelandet
- skyddad header - cbor kodat
- payload - cbor-koda
- digital signatur (signerad sha256-digest
5. CBOR-avkoda header
CBOR-avkoda header för att få signeringsalgoritmen och "kid" (om det används).
6. CBOR avkoda payload
CBOR avkoda payload för att få payload claims (iss, iat, exp och intygets payload).
7. Intern verifieringsprocess
- Signaturens äkthet kontrolleras
- Innehållets integritet verifieras
- Kontroll utfärdad av en giltig utfärdare
- Giltighetstid ok
- Spärrlista kontrolleras (valbart)
- Nationella regler kontrolleras mot innehållet (valbart)
Verifieringstjänsten behöver kontrollera intygets innehåll mot nedladdad metadata för att stödja offline scenarios. Metadata distribueras till veriiferingsappen via ett Verifierbart dataregister. Förmågan är en del av de tekniska PKI tjänster som behövs i biljettsystemet.
Det finns hårdvara för streckkodsanläsning, som används exempelvis inom event och kollektivtrafik. Vilket stöd som finns för utveckling av verifieringsappar för dessa enheter och hur detta ska distribueras täcks inte in i detta avsnitt.
Tekniska ramverk
Det finns ett antal tekniska ramverk som bör utvärderas inför utveckling av en verifieringsapp till mobiltelefoner.
Native app
En native app är en app som är utvecklad specifikt för en viss plattform, till exempel Android eller iOS. Native appar är vanligtvis de mest prestandamässigt effektiva och har tillgång till alla funktioner som är specifika för den plattform de är utvecklade för, exempelvis kameran. Nackdelen är att utveckling och tester måste göras på två olika plattformar och programmeringsspråk.
Crossplatform app
En crossplattform app är en app som är utvecklad för att köras på flera plattformar, vanligtvis Android och iOS. Crossplattform appar är ofta utvecklade med hjälp av ett ramverk som gör det möjligt att använda samma kodbas för att skapa appar för olika plattformar. Crossplattform appar är vanligtvis inte lika prestandamässigt effektiva som native appar, men de är ofta enklare och billigare att utveckla. Nackdelen är att när kameran behövs så måste det ändå göras en del plattformsspecifik utveckling. Exempel på ramverk är Xamarin/MAUI, Flutter, React Native.
PWA - Progressive webapp
En PWA, eller Progressive Web App, är en webbapp som har utvecklats för att fungera som en native mobilapp. PWAs kan installeras på en användares hemskärm och kan använda offlinefunktioner, som att ladda ner innehåll i förväg. PWAs är vanligtvis snabbare och mer effektiva än vanliga webbappar, men de har inte samma tillgång till funktioner som är specifika för den plattform de är utvecklade för. I skrivande stund så får man inte tillgång till kameran på IOS mobiler, men funkar på Android telefoner.
Distribution via appbutiker
Om verifieringsappen ska installeras och användas i vanliga mobiltelefoner, så är rekommendationen att dom distribueras via appbutikerna för respektive plattform. Man kan välja att publicera appar för enstaka personer, en organisation eller publikt för alla. Förutsättning är att man registrerat sin organisation och skrivit på utvecklaravtal med appbutiken.
Krav som kommer att granskas
- Kvalitet och innehåll: Appbutikerna har riktlinjer för appkvalitet och innehåll som måste följas. Dessa riktlinjer kan inkludera krav på att appen inte bryter mot upphovsrätt, inte innehåller skadlig kod, inte innehåller olämpligt innehåll och så vidare.
- Tekniska krav: Din app måste uppfylla tekniska krav och vara
kompatibel med plattformen och operativsystemet som
appbutiken betjänar. Det innebär att appen måste fungera
korrekt och ha en användarvänlig upplevelse. - Säkerhet och integritet: Du måste se till att din app är säker och skyddar användarnas data och integritet. Appbutiker tar
säkerhet och dataskydd på stort allvar. Det behöver finnas en
integritetspolicy länkad i appen. - App ikoner, beskrivning och bilder: Du behöver skapa en
tilltalande app ikon, skriva en beskrivning och tillhandahålla
skärmbilder som visar appens funktionalitet och utseende. - Testning och godkännande: Innan du kan publicera din app
måste den gå igenom en godkännandeprocess som appbutiken utför. Under denna process granskas appen för att säkerställa att den uppfyller alla krav och riktlinjer. Det kan ta några dagar eller veckor beroende på appbutiken. - Uppdateringar och underhåll: Efter att din app har publicerats måste du fortsätta att uppdatera och underhålla den för att hålla den säker och fungerande. Appbutiken kan avlägsna appar som inte uppfyller kraven eller som inte underhålls.
Rekommendation
Den bästa typen av app beror på dina specifika behov och krav. Om du behöver en app med hög prestanda och tillgång till alla funktioner såsom kameran är en native app det bästa valet. Under Covidbevisprojektet märktes stor skillnad i hur mycket snabbare och enklare QR koder avlästes med nativeapparna.
Om du behöver en app som är snabb och effektiv och är enkel och billig att utveckla är en crossplattform app ett bra alternativ. I Sverige togs en Xamarin app fram som referensapp.
Om du behöver en app som är snabb och effektiv och har tillgång till offlinefunktioner är en PWA ett bra alternativ. Fördelen med en PWA är även att du slipper distribuera den via appbutikerna och det blir enklare att förvalta ihop med de andra tekniska tjänsterna om samtliga intygstjänster ska tas fram av samma team. Nackdelen är att IOS inte tillåter access till kameran. Samt att känsligheten i avläsning inte är lika bra som på en nativeapp
Det finns flera länder som tagit fram nativeappar för verifering av Covidbevis med stöd för revokering, certlogic business rules, som kan användas som referenskod.
Bygga en veriferingsapp
Referensprojekt
Det finns en referensapp som togs fram för Covidbevis som är byggd i crossplatform ramverket Xamarin. Xamarin är ett .NET baserat utvecklingsramverk. Uppgradera till MAUI (efter maj 2024).
Testdata
För att kunna verifiera signerade CWT tokens i QR koder krävs det en utfärdartjänst som kan skapa dessa.
Steg 1 - Sätta upp utvecklingsmiljö
För att kunna utveckla, testa, bygga och distribuera appreleaser till Apple och Google så behövs det en MAC, en Android och en IOS enhet med kamera. Man kan visserligen emulera IOS och Android enheter på MAC genom Xcode men eftersom appens kärnsyfte är att skanna QR koder med enhetens kamera, så kommer man inte långt utan att testa funktionaliteten i en fysisk enhet. Det går varken att bygga eller emulera IOS enheter på PC om man inte har en MAC ansluten i nätverket som PCn kan kommunicera med. Med anledning av detta får det ses som ett krav att förvaltningen av detta projekt använder MAC som utvecklingsmiljö.
Steg 2 - Skapa verifieringappen
- Använd Visual Studio för MAC
- Gör en fork av DGCValidator projaktet (referensapp för Covidbevis)
- Lägg till metadata manuellt från utfärdartjänst eller peka mot VDR
- Refaktorera kod
- Anslut en mobiltelefon och testa att verifiera intyg från utfärdartjänsten
Steg 3 - Lägg på fler funktioner
- Spärrlista
- Business rules (Certlogic)
Steg 4 - Distribuering av appar
Distribuering till appbutiker genom att paketera och signera paket för respektive plattform.
Läs mer
Länkar och dokumentation
Ditt svar hjälper oss att förbättra sidan
Senast uppdaterad: