Slik virker låsen
Ingen kan lese et tilbud før fristen. Kjøperen kan ikke, og vi kan ikke. Vi kan heller ikke lese dem etterpå.
Steg for steg
- Kjøperen publiserer og får en åpningskode. Den finnes bare hos kjøperen. Vi ser den aldri.
- Leverandøren leverer. Tilbudet låses på leverandørens egen maskin før det sendes. Det som kommer til oss, er uleselig, også navnet på den som leverer.
- Leverandøren får kvittering med klokkeslett og et fingeravtrykk av det som ble levert.
- Fristen avgjøres av vår klokke, på sekundet. Etter fristen tas ingenting imot. Før fristen gis ingenting ut, heller ikke til kjøperen.
- Kjøperen åpner med åpningskoden etter fristen. Tilbudene låses opp på kjøperens maskin, ikke hos oss.
Hvem vet hva, og når
| Før fristen | Etter åpning | |
|---|---|---|
| Kjøperen | Ser spørsmål uten avsender. Ser ikke tilbud, ikke hvem som har levert, og ikke hvor mange. | Leser tilbudene i egen nettleser. |
| Anbudene.no | Har chiffertekst og tidspunkter. Kan ikke lese innhold eller avsender. | Det samme. Vi får aldri nøkkelen. |
| Andre leverandører | Ser utlysning, krav, spørsmål og svar. Ingenting om tilbud eller om hvem som har konto. | Det kjøperen kunngjør. |
Bedrifts- og privatmarkedet
Tilbudene forsegles på samme måte i alle markedene, så vi kan aldri lese dem. To ting er annerledes når en bedrift eller privatperson ber om tilbud:
- Kjøperen kan være skjult. En privatperson er det alltid: bedriftene får ikke navn, e-post eller telefon, og kan bare svare her. Kunden tar selv kontakt med den hen velger.
- Kjøperen kan velge å lese tilbud etter hvert som de kommer. Det er kjøperens valg, og det står på forespørselen. Offentlige anbud og minikonkurranser under en rammeavtale åpnes alltid først ved fristen.
En privatperson må bekrefte både e-post og mobilnummer før forespørselen går ut. Vi lagrer ikke mobilnummeret, bare et fingeravtrykk av det.
Tidsstempel og logg
Hver hendelse i en konkurranse skrives til en logg: publisering, rettelser, spørsmål, svar, mottatte tilbud, avviste forsøk og åpning. Hver rad bærer hashen av raden før, så en rad ikke kan endres eller fjernes uten at kjeden ryker. Loggen er åpen for alle, og kan kontrolleres maskinelt gjennom API-et. Rader om tilbud vises først når fristen er ute, fordi også antall tilbud er konkurransesensitivt.
Hvem som er på plattformen, røpes ikke
- Innloggingen svarer likt enten adressen har konto eller ikke.
- Spørsmål lagres uten avsender.
- Et tilbud peker ikke på en bruker i databasen. Leverandøren finner sitt eget igjen med et merke som bare kan regnes ut for den som er innlogget.
- Ingen side og ingen API-svar teller tilbud, lesere eller brukere.
Det låsen ikke verner mot
- En mistet åpningskode. Da kan ingen åpne tilbudene, og konkurransen må lyses ut på nytt. Koden bør ligge hos to personer.
- At vi serverer en annen kode enn den vi beskriver. Krypteringen skjer i nettleseren, med kode vi leverer. Derfor er forseglingen én liten fil uten avhengigheter som alle kan lese, og en uavhengig gjennomgang står på lista før plattformen tas i bruk for større konkurranser.
- Sammenstilling av tidspunkter. Databasen viser ikke hvem som har levert. Men den som har både databasen og serverloggene, kan sammenholde klokkeslett. Vernet gjelder alt som vises og alt som ligger i tabellene, ikke en driftsperson med full servertilgang.
- Kvalifisert tidsstempel. Tidsstempelet er serverens eget. Et eksternt, kvalifisert tidsstempel er ikke på plass ennå.
Tekniske detaljer: algoritmer og nøkler
Alt under skjer i nettleseren (Web Crypto). Koden er én fil uten avhengigheter.
- Publisering. Kjøperens nettleser lager et nøkkelpar (RSA-OAEP, 3072 bit). Den private nøkkelen pakkes inn med AES-256-GCM, under en nøkkel avledet av en åpningskode på 25 tegn (PBKDF2-SHA-256, 600 000 runder). Vi får den offentlige nøkkelen og den innpakkede private. Åpningskoden sendes aldri til oss.
- Innlevering. Leverandørens nettleser lager en egen AES-256-GCM-nøkkel for tilbudet, krypterer tilbudet og vedleggene, og pakker nøkkelen med kjøperens offentlige nøkkel. Det som kommer til oss, er chiffertekst. Også hvem som leverer, ligger inne i chifferteksten.
- Kvittering. Serveren stempler mottaket med sin klokke, regner sha256 av chifferteksten, og gir leverandøren en signert kvittering. Nettleseren kontrollerer at sjekksummen er den samme som den sendte.
- Fristen. Serverens klokke avgjør, på sekundet. Etter fristen tas ingen tilbud imot. Før fristen utleveres ingen tilbud, heller ikke til kjøperen. Forsøk på begge deler står i loggen.
- Åpning. Etter fristen henter kjøperen chifferteksten og skriver åpningskoden. Tilbudene dekrypteres i kjøperens nettleser. Åpningen logges med klokkeslett og sjekksummene som ble utlevert.
Regelverket bak, punkt for punkt: Regelverk.