Detaljert beskrivelse av digital løsning for avstemning
Valgdirektoratet har utviklet en digital løsning til bruk i folkeavstemningene i områdene som tidligere utgjorde Søgne og Songdalen kommuner.
Den digitale løsningen deles opp i fem faser: nøkkelgenerering, manntall, kontroll av stemmerett, stemmegivning og opptelling.
Nøkkelgenerering
For å holde stemmegivningene hemmelige og sikre benyttes to konsepter; kryptering og blind signering. Til dette trenger systemet to nøkkelpar: krypteringsnøkkel og signeringsnøkkel.
Hvert nøkkelpar er delt opp i en offentlig del og en privat del. Den offentlige delen kan låse ned data, slik at ingen andre enn de som har den private delen kan se data. Dette brukes til å låse ned stemmene frem til avstemningen er over. For at Valgdirektoratet ikke kan bruke den private nøkkelen før avstemningen er over, blir nøkkelen låst ned to ganger; én gang av Valgdirektoratet og én gang av eksterne nøkkelpersoner. Eksterne nøkkelholdere er i denne sammenhengen innhentet fra Institutt for samfunnsforskning (ISF) og NAV Klageinstans på bakgrunn av at disse ikke har fysisk tilgang til verken DSBs eller Valgdirektoratets lokaler. Dette sikrer at ingen kan bruke nøkkelen på egenhånd.
I tillegg til å kryptere stemmene, må systemet kunne verifisere at en stemme er avlagt av en velger med stemmerett. Til dette brukes nøklene den andre veien; den private delen signerer stemmen, og valideres av den offentlige nøkkelen.
Manntall
På skjæringsdatoen 31. desember 2023 ble folkeregisteret for Kristiansand kommune hentet ned fra Skatteetaten. Alle personer ble sjekket opp mot stemmerettskriteriene (bosted og alder) og ble en del av manntallet for den spesifikke folkeavstemningen dersom de oppfylte kriteriene.
Kontroll av stemmerett
Når velgeren logger seg på folkeavstemning.valg.no med ID-porten, blir personidentifikatoren (fødselsnummer eller d-nummer) brukt til å sjekke om velgeren har stemmerett i en av folkeavstemningene. Dersom velgeren har stemmerett i en folkeavstemning, blir velgeren sendt videre til stemmegivningssiden der det er mulig å avgi stemme.
Stemmegivning
Dersom en velger ønsker å avlegge stemme; må hen først velge et svaralternativ. Velger får opp et skjermbilde og blir bedt om å bekrefte valget sitt. Når velgeren bekrefter valget, skjer følgende:
- Offentlig del av krypterings- og signeringsnøkkel hentes fra Valgdirektoratet.
- Stemmen blir kryptert med den offentlige delen av krypteringsnøkkelen.
- Den krypterte stemmen blir så sendt gjennom en algoritme som heter Blind Signatur, som maskerer den krypterte stemmen for Valgdirektoratet.
- Den maskerte stemmen blir sendt til Valgdirektoratet, sammen med velgerens personlige identifikasjon. Hvis velgeren har stemmerett og ikke har avlagt stemme, blir den maskerte stemmen signert og signaturen sendes tilbake til nettleseren. Signaturen er kun gyldig for den maskerte stemmene.
- Signaturen går gjennom den motsatte prosessen som den krypterte stemmen gikk gjennom, og blir nå en gyldig signatur for den krypterte stemmen.
- Signatur og kryptert stemme blir så sendt til Valgdirektoratet uten personopplysninger. Signaturen blir validert, og stemmen blir lagret. Ingen informasjon som kan knytte stemme og velger sammen, lagres av løsningen i dette steget.
Les mer om blind signatur på Wikipedia
Opptelling
Når avstemningen er over, åpner løsningen for at stemmer kan låses opp og telles.
For å kunne låse opp stemmer, må (eksterne og interne – se nøkkelgenerering) nøkkelpersoner låse opp den private delen av krypteringsnøkkelen sammen. Den private delen av krypteringsnøkkelen sendes inn til opptellingsmodulen som låser opp stemmer, som da telles opp.
Arkitektur
Oppbygning av løsningen
Løsningen er delt inn i to hovedsystemer - Folkeavstemning og Stemmemottak, som videre er inndelt i fem tjenester. Denne oppdelingen muliggjør implementeringen av blind signering, der Folkeavstemning fungerer som signerer og Stemmemottak som validator.
structurizr-1-Oversikt
Folkeavstemning
Folkeavstemning er systemet som leverer informasjon om folkeavstemninger til velgeren, og håndterer innlogging og stemmerett. Denne delen håndterer personopplysninger, men ikke stemmedata.
Folkeavstemning.Manntall
Tjeneste for å gjøre uttrekk mot folkeregisteret og lage manntall. Eksponerer API som Folkeavstemning.Backend kan bruke for å sjekke stemmerett, og har funksjon for å laste ned manntallet. Denne tjenesten er ikke eksponert over nettet. Kun drift og avstemningsansvarlig har tilgang til denne tjenesten, ved behov. Behov kan oppstå ved opprettelse og nedlastning av manntall, henting av data fra Kontakt- og reservasjonsregisteret (KRR), oppgradering av system, og feilsøking.
Folkeavstemning.Backend
Tjeneste for å bestemme stemmerett, signere stemmepakker, og oppdatere kryss i manntallet. Tjenesten består av følgende endepunkter:
- Folkeavstemning – leverer data om hvilke folkeavstemninger som er aktive, og informasjon og spørsmål i hver folkeavstemning.
- Eksport av kryss i manntall – henter informasjon om ulike manntallsnummer som har avlagt stemme. Inneholder ikke persondata – dette må settes sammen i ettertid sammen med eksport av manntall.
- Stemmerett – angir om velger har stemmerett i en folkeavstemning. Dette sjekkes ved å kalle Manntall.Backend med personidentifikatoren på den innloggede brukeren.
- Stemmegivning – signerer en blendet stemmepakke om velgeren har stemmerett.
Tjenesten har kun en databasetabell, stemmegivning, som betegner et kryss i manntall. En unique index på folkeavstemning_id og manntallsnummer sørger for at en velger kun kan avlegge én stemme.
Denne tjenesten er ikke eksponert over nettet. Kun drift og avstemningsansvarlig har tilgang til denne tjenesten, ved behov. Behov kan oppstå ved oppgradering av system og feilsøking.
Folkeavstemning.Frontend
Tjeneste som møter velgeren når velger går inn på folkeavstemning.valg.no. Her gjør velgeren sine handlinger og avgir stemme.
Tjenesten leverer SPA (en Vue.js applikasjon) til velgeren. Den fungerer som en BFF beskrevet i OAuth 2.0 for Browser-Based Apps Section 6.1, og håndterer autentiserings-tokens i stedet for å la dette gjøres på klienten. Ved flere instanser blir dette lagt bak en proxy med sticky sessions, slik at hver request går til samme server. Tjenesten består av følgende:
- SPA frontend
- Duende.BFF sørger for korrekt håndtering av tokens
- YARP proxy-er requests til Folkeavstemning.Backend med autentiseringstoken
- Driftsmeldinger til brukere i tilfelle Valgdirektoratet opplever ustabilitet eller nedetid.
Denne tjenesten er eksponert over nettet.
Stemmemottak
Stemmemottak er systemet som mottar og lagrer stemmer, og leverer resultat. Denne delen håndterer stemmedata, men ikke personopplysninger. Løsningen hostes på et eget domene for å unngå å sende identifiserbar data som cookies.
Stemmemottak.Frontend
Tar imot stemmer og videresender til Stemmemottak.Backend for å unngå å eksponere tjenesten på internett.
Stemmemottak.Backend
Tar imot stemmer, verifiserer gyldighet av signatur, lagrer stemmer, utfører opptelling.
Kommunikasjon mellom tjenester
All kommunikasjon mellom tjenestene gjøres via HTTPS.
Prinsipielle avveininger i løsningen
Ved utvikling av den digitale løsningen, har det blitt tatt noen prinsipielle avveininger. Avveiningene er preget av at det er rådgivende folkeavstemning som skal gjennomføres – som ikke har samme kravene som ordinære valg. Det er også gjort avveininger av praktiske hensyn ut i fra hvor mye tid og ressurser det er rimelig og mulig å bruke, sett opp mot at det er en rådgivende folkeavstemning og Valgdirektoratets øvrige oppgaver.
Mulighet til å stemme flere ganger
En avveining underveis i utviklingen har vært om velgeren skal ha mulighet til å stemme flere ganger frem til siste mulighet for å stemme. En slik funksjonalitet ville fulgt forventninger til lignende digitale løsninger, hvor det oftere enn ikke er mulig å endre/levere stemme flere ganger.
Et prinsipp for folkeavstemning er at det velgeren stemmer, skal være hemmelig. For å ivareta dette har løsningen blitt bygget slik at velgers informasjon er helt adskilt stemmen som avgis. For å ivareta muligheten til å stemme flere ganger, måtte en mulighet for å knytte stemme til velger være sterkere. Ved fysisk stemmegivning og ordinære valg legges stemmeseddelen rett i urne etter at velgeren har legitimert seg for stemmemottaker og fått stempel på stemmeseddelen. Prosessen gjør at velgers identitet og det velgeren stemmer er adskilt og ivaretar retten til hemmelig valg.
Vurderingen er følgelig at funksjonalitet med å kunne stemme flere ganger eller endre stemmen ikke kan implementeres uten at det ville påvirket prinsippet om hemmelig valg. En slik vurdering legger opp til prosess fra stemmegivning ved ordinære valg, og vil være en velkjent prosess med én stemme fra ordinære valg.
En ulempe med dette er at det kan oppstå tilfeller hvor velger blir utsatt for utilbørlig press og stemmer mot egen overbevisning, uten mulighet til å endre stemmen senere. En mulighet for å omgå dette problemet, er muligheten for at en stemme avgitt i kontrollerte omgivelser, som et valglokale, overstyrer den elektroniske stemmen. Den muligheten har vi ikke, siden det er forskriftsfestet at den elektroniske stemmen skal være tellende – av hensyn til at stemmegivning er mulig lengre enn det er mulig å brevstemme (2. februar kl. 21 for elektronisk, 26. januar kl. 15 for brevstemmer). Siden det er snakk om en rådgivende folkeavstemning, og at Valgdirektoratet er tilgjengelige for velgere, samt at det er usikkert i hvor stort omfang utilbørlig press vil utøves, vurderes det som akseptabelt å gjennomføre slik.
En annen ulempe med at velger kan stemme kun én gang, er at velgeren ikke kan ombestemme seg. For å bøte på dette, får velger tydelig informasjon i løsningen om at man kun kan stemme én gang, slik at velgeren ikke stemmer før hen har bestemt seg.
Bekreftelse av stemme
Under utvikling av løsningen har det blitt forsøkt å implementere en kontrollkode som velger får ved avgitt stemme i løsningen. Slik ville man sørget for at hver enkelt velger kunne se at deres stemme var med i valgoppgjøret, og sikret etterprøvbarhet.
Funksjonalitet for kontrollkode ble utviklet og brukertestet. Den var den synlig for velger kun i boksen som bekrefter at stemmen er avgitt. Andre løsninger med at koden kunne sendes på e-post, lastes ned, eller senere vises i løsningen, ville skape en knytning mellom velger og det velgeren har stemt, og ville derfor vært utfordrende satt opp mot prinsippet om hemmelig valg. Velger måtte derfor ta skjermbilde eller skrive ned koden.
Brukertesting viste at brukerne stilte spørsmålstegn ved kontrollkodens funksjon, gitt at de uansett fikk melding om at stemmen er avgitt – en melding som senere er synlig i løsningen ved innlogging. Brukerne etterlyste informasjon om hva koden er, og hvordan de skulle bruke denne senere.
Av hensyn til brukervennligheten ved implementering av slik funksjonalitet, og tids- og ressursaspektet ved å utvikle en tilfredsstillende løsning, er det vurdert at kontrollkoden ikke implementeres, og at bekreftelse om avgitt stemme stort sett ivaretar velgers behov for bekreftelse.
Innloggingsmuligheter
Ved digitale løsninger skal fellesløsninger benyttes så langt som praktisk mulig. I denne løsningen benyttes ID-porten. Det prinsipielle står her på hvilket sikkerhetsnivå av ID-porten som velges.
Gjennomføring av en folkeavstemning med bruk av digital løsning setter store krav til tilgjengelighet og at brukerne kan logge inn i løsningen. Valget av sikkerhetsnivå står mellom nivå 3 (betydelig sikkerhetsnivå) og nivå 4 ( høyeste sikkerhetsnivå).
Les mer om de ulike sikkerhetsnivåene på Difis nettsider.
Vi antar at velgerne har stor variasjon i hvilke elektroniske ID-er de har, for eksempel med at yngre velgere potensielt kun har tilgang til MinID. I den digitale løsningen har vi følgelig valgt sikkerhetsnivå 3 av ID-porten. Nivået tilbyr flere innloggingsmuligheter sammenlignet med sikkerhetsnivå 4, samtidig som det er en to-faktors sikkerhetsløsning.
Krav til tilgjengelighet
Et mål med den digitale løsningen er at alle med stemmerett skal kunne logge inn i løsningen og avgi elektronisk stemme gjennom denne, uavhengig av forutsetninger man måtte ha. Det er en rekke krav til tilgjengelighet som omtales i WCAG-standarden, som er førende for hvordan vi utvikler en slik løsning.
Les mer om WCAG-standarden på uutilsynet.no.
For å ivareta tilgjengeligheten i løsningen har det blitt gjennomført brukertester og tilgjengelighetsgjennomganger av ekstern part i flere omganger.
Brukertestene har blitt gjennomført etter metoden Moderated Remote Usability Testing, CTA – Concurrent Think-aloud. Totalt åtte deltakere har vært involvert – fire kvinner og fire menn med spredning i alder og tekniske ferdigheter. To deltakere bruker leselist og talesyntese. En av deltakerne bruker talesyntese og zoom/lupe.
Tilgjengelighetsgjennomgangene har blitt gjennomført i to omganger – én i november og én i desember. Formålet har vært å tidlig identifisere fokusområder og rette ev. funn. Siste tilgjengelighetsgjennomgang danner grunnlaget for tilgjengelighetserklæringen.
Les mer om tilgjengelighetserklæring hos uutilsynet.no.
Lenker