Utvalgt arbeid

Chatnor

Oversikt

En norsk AI-assistent der nettleseren har nøklene og serverne har kryptert tekst.

Detaljer

At a glance

Type prosjekt
Kryptert assistent, driftet i EU
Min rolle
Satte personvernarkitekturen og invariantene, og bygget fundamentet resten holdes til.
Kategori
Systemer
Status
Under utvikling2026

Hva jeg gjorde

  • Delte systemet i tre plan og bestemte hva hvert av dem har lov til å inneholde
  • Skrev femten bindende invarianter, og regelen for hva som skjer når en funksjon kolliderer med en
  • Bygget vaktene: én sladdende logger, lintregler som feiler bygget, og tester som beviser at hver regel slår ut
  • Skrev ned grensene produktet aldri får snakke seg forbi

Bygget med

  • TypeScript: Hele systemet, med typede grenser
  • libsodium: Kryptering utført i nettleseren, før noe sendes
  • PostgreSQL with pgvector: Kryptert tekst, metadata og vektorer, med rad-nivå isolasjon mellom leietakere
  • Zod: Hver grense validert, og en vakt som avviser en forespørsel som bærer en nøkkel
  • vLLM: Inferens på privat EU-maskinvare, aldri eksponert mot internett
  • Terraform and Ansible: Infrastrukturen, beskrevet i stedet for klikket

Neste prosjekt

Virksom
Et diagram av Chatnors tre plan: et kontrollplan og et lagringsplan i Norge tegnet som lukkede bokser, og mellom dem et konfidensielt behandlingsplan i Frankrike tegnet åpent i bunnen, fordi klarteksten der bare holdes i minnet så lenge én forespørsel varer

Behovet

En norsk virksomhet som vil bruke en AI-assistent på sitt eget arbeid har ett spørsmål før alle andre: hvor havner det vi skriver, og hvem kan lese det.

For de fleste assistenter er det ærlige svaret at innholdet ligger i klartekst på noen andres servere, i en annen jurisdiksjon, under vilkår som kan endres. For et advokatkontor, en klinikk eller en kommune avslutter det svaret samtalen.

Tre plan

Samtaler, prosjekter, filer og notater krypteres i nettleseren, før noe sendes. Kontrollplanet i Norge holder autentisering, metadata, kryptert tekst og vektorer. Lagringen holder kryptert tekst. Ingen av dem holder noen gang en lesbar melding, og det finnes ingen vei som ville latt dem gjøre det: å legge til en rute som lagrer meldinger i klartekst er en navngitt, forbudt endring.

Det midterste planet er det interessante. Et svar må regnes ut på noe, så under en forespørsel behandles det minste av klartekst som trengs på privat maskinvare i EU, holdt i minnet, aldri skrevet ned og aldri logget. Det er hele eksponeringen, den varer én forespørsel, og arkitekturen er tegnet slik at den er synlig i stedet for gjemt.

Beslutning

Skriv ned hva det ikke er

Bakgrunn
Alle produkter i denne kategorien selges med ordene ende-til-ende-kryptert. For dette ville det vært nesten sant, og nesten sant er den farligste typen sikkerhetspåstand: det er setningen en kunde tar en juridisk beslutning på.
Hva jeg bestemte
Prosjektet holder en kort del som heter kjente begrensninger, sagt rett ut, og den sier de ubehagelige tingene høyt. Kryptografi levert gjennom nettleseren overlever ikke en ondsinnet frontend-utrulling. Klarteksten som finnes kort under en forespørsel er ikke ende-til-ende-kryptering og må aldri beskrives slik. Embedding-vektorer lagres ukryptert og kan avsløre mening, så de opplyses som personvernsensitive. Noen som lovlig dekrypterte data før de ble fjernet kan allerede ha kopier, og å rotere en nøkkel kan ikke trekke tilbake det et menneske allerede vet.
Avveining
Det gjør markedsføringen vanskeligere og gir en konkurrent fire setninger å sitere. Det betyr også at kundens egen sikkerhetsgjennomgang ikke finner noe produktet ikke allerede hadde fortalt dem, og det er den eneste versjonen av dette som overlever møtet med en personvernombud.
The Chatnor sign-in screen: a single email field under the heading "Logg inn" and the line "Vi sender deg en lenke. Ingen passord her."
Slik fungerer det
  • Femten invarianter er bindende for alle, også for enhver kodeassistent som jobber i repoet. Når en ønsket funksjon kolliderer med en av dem, er regelen å stoppe og skrive et beslutningsnotat, aldri å svekke invarianten.
  • Det finnes én logger, og den jobber fra en tillatelsesliste både på feltnavn og på verdiform. Tester beviser at ingen plantet hemmelighet kan nå en loggelinje.
  • Lintregler feiler bygget på konsollogging, logging av forespørselskropper, weblagring, eval, hjemmelaget kryptografi og tredjeparts loggere. Hver regel har en test som beviser at regelen selv slår ut.
  • En vakt på grensen avviser enhver forespørsel som bærer et hvelvpassord, en gjenopprettingskode eller en hovednøkkel, slik at en feil lenger oppe avvises i stedet for å tas imot.
  • Identifikatorer har typeprefiks, slik at en forvekslet objekttype feiler i dekrypteringen i stedet for å lykkes stille.
  • Rad-nivå sikkerhet er lukket som standard, og suiten for isolasjon mellom leietakere kjører mot en ekte database og ikke en attrapp.
  • Migrasjoner er rå SQL med sjekksummer og rådgivende låsing. Fire miljøer er adskilt, validert ved oppstart, og en prosess avslutter heller enn å kjøre på feil miljø.
  • Innloggingslenken som hopper over e-post finnes bare når miljøet er nøyaktig lokalt, og nekter å registrere seg noe annet sted.
  • Alt som berører kryptografi, autentisering, autorisasjon mellom leietakere, inferensporten eller filopplasting krever egne tester og en menneskelig gjennomgang.

Hvor det står

Fundamentet er bygget og bevist: vaktene, kontraktene, migrasjonene og isolasjonstestene; kryptografien i nettleseren med sine egne testvektorer; og innlogging med passnøkler og hvelvlåsen, der stoppbetingelsen ble demonstrert og ikke antatt.

Resten av produktet er ikke bygget. Den uavhengige gjennomgangen av kryptografien er utsatt til før den første betalende kunden, og den utsettelsen er skrevet ned som en datert beslutning med sin begrunnelse, ikke etterlatt som et hull noen kanskje ikke oppdager.

Det prosjektet egentlig argumenterer for er at i et produkt som dette kommer invariantene først, og funksjonene er det som kan bygges uten å bryte dem.