System · InfoFrame
Digital NDA-signering
I drift
De fleste billige signeringsløsninger beviser at noe ble signert. Denne beviser hva som ble signert, og lar motparten kontrollere det selv uten å stole på meg.
Fakta
- Status
- I drift siden juli 2026
- Stack
- Statisk HTML · Python · PyRunner · ReportLab · Pillow
- Omfang
- To filer, null rammeverk, null byggesteg
- Avtalen
- 16 punkter, bokmål og engelsk side om side
- Lagring
- Felter, kanonisk tekst, signatur og PDF i datalager
- Bevis
- infoframe.no/nda
Ideen
En signatur på et dokument er lite verdt hvis partene senere er uenige om hva dokumentet sa. Vanlig e-signering løser identitet og tidspunkt, men lar innholdet være noe du må stole på at leverandøren har tatt vare på.
Her bygger nettleseren og serveren den samme avtaleteksten hver for seg, tegn for tegn, og regner ut hver sin sjekksum. Klienten sender sin sum med innsendingen. Serveren regner ut sin egen. Begge trykkes i vedlegget bakerst i PDF-en, med en linje som sier om de stemmer.
Motparten sitter da med et dokument som inneholder sin egen kvittering. Påstår noen senere at ordlyden var en annen, avgjør sjekksummen i deres eget eksemplar saken.
Duplisering med vilje, og en test som passer på den
To implementasjoner av samme tekst er normalt en tabbe. Her er det poenget: skal to parter kunne komme fram til samme sum uavhengig av hverandre, må de faktisk regne uavhengig av hverandre. Fronten er dessuten en enkelt statisk fil uten byggesteg, så den kan ikke dele kode med serveren.
Risikoen er at de to sklir fra hverandre uten at noen merker det, og at hver eneste PDF etterpå får et avvik. Så det finnes en test som klipper ut funksjonene fra HTML-fila, kjører dem gjennom node, kjører den samme inndataen gjennom Python, og sammenligner både teksten og summen. Er de ulike, feiler den.
Detaljene som kom fra å bli brent
Innsendingen går som text/plain med vilje. Det er en av innholdstypene nettleseren slipper igjennom uten en forespørsel i forkant, og verten svarer ikke på slike forespørsler. Kroppen er fortsatt JSON.
En tidligere versjon fanget avvisningen som likevel kom, og prøvde på nytt. Resultatet var at hver avtale ble sendt to ganger. Nå står det en kommentar i koden om at det ikke skal legges inn et nytt forsøk her, og serveren hopper over en innsending den har sett før.
Signaturfeltet er et lerret som eksporteres med gjennomsiktig bakgrunn. PDF-biblioteket tegner det som en svart firkant hvis man sender det rett inn, så bildet flates mot hvitt først.
Mangler organisasjonsnummer eller adresse, nekter tjenesten å utstede avtalen i det hele tatt. En taushetserklæring uten en identifiserbar part er lite verdt hvis den først blir omstridt.
Hva dette ikke er
Dette er en enkel elektronisk signatur. Gyldig og førbar som bevis for en taushetserklæring, på linje med det de store leverandørene tilbyr i sitt rimeligste nivå, men det er ikke BankID og beviser ikke hvem som holdt musa. Til avtaler der identitetssvindel er en reell risiko, er det feil verktøy.
Tjenesten ser ikke IP-adressen til den som signerer, så to av tre grenser mot misbruk er i praksis pynt. Det er det samlede døgntaket som gjør jobben, og det står slik i dokumentasjonen i stedet for å bli fremstilt som tre lag med sikring.
Tidsstempelet for Oslo står fast på sommertid, så fra oktober til mars viser det en time feil. Tidsstempelet i UTC er alltid riktig, og det er det som gjelder.