Insinööri-lehti tekniikka

Koronapassin qr-koodi purkautuu kuin sipuli

Mustavalkoiset pisteet saadaan muokattua kerros kerrokselta ihmisen ymmärtämään muotoon.

Kuka tahansa voi ladata Suomen koronapassin lukijasovelluksen. Sovellus on käyttäjäystävällinen ja noudattaa tietosuojaa, joten se ei näytä käyttäjälleen tiedonkäsittelyn välivaiheita. Insinööri-lehti avaa, mitä rokotetodistuksen qr-koodi pitää sisällään ja kuinka sen sisältö puretaan sovelluksella. Esimerkkinä on Githubissa avoimesti saatavilla oleva mallikoodi, joka ei sisällä kenenkään todellisen henkilön henkilötietoja.

Tämä artikkeli liittyy printtilehdessä 1/2022 julkaistuun artikkeliin qr-koodin tekniikasta ja tulevaisuudesta. Koronapassi on yksi sovellus, jossa ruutukoodia käytetään.

Alla näkyy esimerkki qr-koodista, jonka portinvartija lukee asiakkaan koronapassista esimerkiksi ravintolan tai teatterin ovella:

VAC3 - koronapassin lukijasovelluksen malli qr-koodista

Ensimmäisenä lukijasovellus muuttaa ruutukoodin pisteet merkkijonoksi. Se näyttää tältä:

hc1:NCFOXN%TSMAHN-H*TK./CGXS32SEKH:D4I 9-366KNAOMPW4W*NK8Q:.I47WPBLNO4*J8OX4W$C2VLWLISN5HI8J.V J8$XJK*L5R1+$RD.LLD43+P/I8+*H9E46UG1+H5$FVPOY.HX-FEN1T%INTICZU2*8X/KS96/-KKTCY73JC3DG3LWT+LJ3ZCB2BA5H-XK+R07:4D-4A55-3TN4JRZ49Y4NLG+X47Y4+X4AOVJH1PCD8:DSEF3HH*95MKN4NN3F85QNCY0O%0D0H0 2IE9WT0K3M9UVZSVV*001HB*0UE9ZC55B9-NT0 2$$0X4PCY0+-CVYCRMTB*05*9O%0HJP7NVDEBU1JV/I4WN WUQRELS400TQYGN%2TP44-C%*4R9TYXVS1J$TCO8FI$2KF5I$23W3ANID9FOKEH-BB-89QDECHTUKXPC6LFAE9Y7MS7988LC8N-CICZ9PCI4VK78KBQDUDBQEAJJKKKMWC8AWO2-M+EE–P6/PGA5N2JWD3O+DTXQ7GE.OSDRF-.AHQHO77RTJZNSMUIF/P/8MATMTZI8-6R%N6:F 1SL3V5*N1%57YVVX6%AQ*JN79T7:R/2I

Alun prefiksi “hc1:” kertoo, että kysymys on koronatodistuksesta. Loppuosa sisältää varsinaisen koronatodistuksen sisällön. Se ei ole selkokielistä, koska se on moneen kertaan käsitelty erilaisilla pakkausmenetelmillä. Kryptisten lyhenteiden, kuten COSE ja CBOR, avulla pakatun tiedon aitous voidaan varmentaa ja se saadaan pakattua mahdollisimman pieneen tilaan. Niiden sisältä paljastuu lopulta todistuksen varsinainen sisältö:

{

    “dob” : “1999-07-14”,

    “nam” : {

        “fnt” : “TESTAAJA”,

        “fn” : “Testaaja”,

        “gnt” : “MATTI<KARI<YRJAENAE”,

        “gn” : “Matti Kari Yrjänä”

    },

    “ver” : “1.3.0”,

    “v” : [

        {

        “ci” : “URN:UVCI:01:FI:2XP66UC2LYYRG2SM8VE3OMN0Q#9”,

        “co” : “FI”,

        “dn” : 3,

        “ma” : “ORG-100031184”,

        “is” : “The Social Insurance Institution of Finland”,

        “tg” : “840539006”,

        “sd” : 3,

        “mp” : “EU/1/20/1507”,

        “vp” : “J07BX03”,

        “dt” : “2021-07-14”

        }

    ]

}

Yllä olevat tiedot ovat ihmisen jo helpompi hahmottaa, mutta lyhyiden kirjainyhdistelmien merkitykset eivät vielä tässä json-muodossakaan aukea. Kirjainyhdistelmät ovat lyhyitä, jotta ne veisivät mahdollisimman vähän tilaa. Jotta tämä tieto saadaan ihmisen ymmärtämään muotoon, kirjainyhdistelmät on korvattava pidemmillä kuvauksilla, jotka saadaan koronatodistuksen taustajärjestelmästä.

Kun lyhennykset kirjoitetaan auki, saadaan esimerkiksi seuraavia tietoja:

header: “Certificate Type”, content: “Vaccination 3 of 3”

header: “Date of Birth”, content: “7/14/99”

header: “Standardised Family Name”, content: “TESTAAJA”

header: “Standardised Given Name”, content: “MATTI<KARI<YRJAENAE”

header: “Date of Vaccination”, content: “7/14/21”

header: “Targeted Disease”, content: “COVID-19”

header: “Authorization Holder / Manufacturer”, content: “Moderna Biotech Spain S.L.”

header: “Medical Product”, content: “COVID-19 Vaccine Moderna”

header: “Vaccine or Prophylaxis”, content: “covid-19 vaccines”

header: “Country of Vaccination”, content: “Finland”

header: “Certificate Issuer”, content: “The Social Insurance Institution of Finland”

header: “Certificate Expiration”, content: “7/15/22 klo 8.59.59 ip.”

header: “Unique Certificate Identifier”, content: “URN:UVCI:01:FI:2XP66UC2LYYRG2SM8VE3OMN0Q#9”

Julkiset avaimet ja nämä puuttuvat tiedot liikkuvat lukijasovelluksen ja taustajärjestelmän välillä verkon kautta. Vaikka lukijasovellus saa kaiken ylläolevan tiedon käyttöönsä, se näyttää siitä vain osan. Viranomaisten määrittelemien sääntöjen perusteella sovellus päättelee, onko passi voimassa. Jos on, lukija kertoo passin haltijan nimen.

Jokaisella EU-maalla on oma koronapassin lukusovelluksensa. Suomen sovelluksen on toteuttanut Solita.

Teksti ja kuva: Janne Luotola