Kort fortalt
- Ingen vei ut. Programmet har ingen TLS, kan ikke slå opp et navn på nettet og lytter ikke på noen port.
- Alt ligger i pakken. Ingenting lastes ned etter installasjonen. Ingen oppdaterer, ingen bruksstatistikk, ingen feilrapporter.
- Dere kan stenge den. Blokker all utgående trafikk for Klart. Programmet virker like godt.
- Dere kan styre den. Én fil bestemmer hva brukerne får velge selv.
Hvilket system sjekker du?
1Er dette vår fil?
shasum -a 256 ~/Downloads/Klart*.dmg
Get-FileHash "$HOME\Downloads\Klart*.exe"
Fasit: den lange rekken med tall og bokstaver er lik sjekksummen vi har publisert for utgivelsen.
[Sjekksummene publiseres sammen med nedlastingen når den åpner.]
Beviser: at filen er den vi ga ut. Ikke noe mer. En sjekksum sier ingenting om hva programmet gjør.
2Er den signert av oss, og urørt?
codesign -dv --verbose=4 /Applications/Klart.app 2>&1 | grep -E "Format|TeamIdentifier|flags|Notarization"
Fasit: Format=app bundle with Mach-O universal (x86_64 arm64),
flags=0x10000(runtime), Notarization Ticket=stapled og
TeamIdentifier=N5BKVM258S.
spctl -a -vv /Applications/Klart.app
Fasit: accepted og source=Notarized Developer ID.
Pakken har to kjørbare filer til: hjelperen som passer på nøkkelen, og PDF-biblioteket. Sjekk dem også:
codesign -dv /Applications/Klart.app/Contents/MacOS/klart-hvelv 2>&1 | grep TeamIdentifier codesign -dv /Applications/Klart.app/Contents/Resources/bundled/engine/pdfium/libpdfium.dylib 2>&1 | grep TeamIdentifier
Fasit: samme TeamIdentifier=N5BKVM258S på begge.
Windows-utgaven er ikke signert ennå. Til den er det, svarer kommandoen NotSigned, og da er sjekksummen i punkt 1 det som knytter filen til oss.
Get-AuthenticodeSignature "$HOME\Downloads\Klart*.exe" | Format-List Status, SignerCertificate
Fasit, når den er signert: Valid, og vårt navn i SignerCertificate.
Beviser: at koden er vår og ikke endret etterpå. Dette er testen mot en ombygd kopi. En kopi med en nettforbindelse lagt inn er et annet program, og det er signaturen som avslører den.
3Hva har den lov til?
codesign -d --entitlements - --xml /Applications/Klart.app 2>/dev/null | plutil -p -
Fasit: fem linjer, alle false: automation.apple-events,
cs.allow-dyld-environment-variables, cs.allow-jit,
cs.allow-unsigned-executable-memory og cs.disable-library-validation.
Ingen iCloud-rettigheter, og verken network.client eller network.server.
Men les dette: Klart kjører ikke i App Sandbox. Da er det at nettrettighetene mangler, bare en opplysning. macOS håndhever dem ikke uten sandkassen, og et program med Hardened Runtime kan i prinsippet åpne en forbindelse likevel. Vi sier det heller enn at dere finner det selv. Det som faktisk avgjør saken, er punkt 4 og 5, og regelen dere setter selv.
Beviser: at programmet ikke kan styre andre programmer, ikke kan laste inn fremmed kode, og ikke har tilgang til iCloud. Om nett beviser det ingenting alene.
Windows har ingen tilsvarende rettigheter for vanlige skrivebordsprogrammer. Et program installert med en .exe ber ikke om lov til nett. Det har det. Derfor er det ingen kommando her.
Beviser: ingenting på Windows. Sperren er brannmurregelen lenger ned, og beviset for at programmet er stille, er punkt 4.
4Snakker den med noen?
Start Klart, åpne en mappe og la den lese. Kjør kommandoen mens den står på.
pgrep -lx klart; lsof +c 0 -nP -a -i -c klart -c com.apple.WebKit.Networking
Fasit: én linje med prosessnummeret og klart, og ingenting etter den. Klart har ikke en eneste TCP- eller UDP-socket.
Vinduet i Klart tegnes av WebKit, som følger med macOS. WebKit starter sine egne hjelpeprosesser,
og én av dem heter com.apple.WebKit.Networking. Den er med i kommandoen, for det er den
som ville hentet noe hvis vinduet prøvde. Den skal også være tom.
Kommer det rader likevel, har du trolig Safari, Mail eller et annet program med WebKit åpent. De deler navn på hjelpeprosessen. Lukk dem og kjør på nytt, eller se på prosessnumrene: Klarts hjelpere har numrene rett etter Klart.
Pass på -a. Uten den leser lsof valgene som «eller», og du får hele
maskinens trafikk i listen. LuLu eller Little Snitch gir samme svar, hvis dere heller vil se det slik.
Get-Process klart, tesseract -ErrorAction SilentlyContinue |
ForEach-Object {
"$($_.ProcessName) kjører (prosess $($_.Id))"
Get-NetTCPConnection -OwningProcess $_.Id -ErrorAction SilentlyContinue
Get-NetUDPEndpoint -OwningProcess $_.Id -ErrorAction SilentlyContinue
}Fasit: bare linjene som sier at klart kjører, og tesseract mens Klart leser et bilde. Ingen tabeller med adresser og porter.
Vinduet i Klart tegnes av WebView2, som er Microsofts og følger med Windows. Det kjører som
egne prosesser, msedgewebview2.exe. Innholdet i vinduet får ikke hente noe:
reglene i punkt 5 stenger det. Men WebView2 kan selv snakke med Microsoft, for eksempel om sine
egne oppdateringer. Det er Microsofts trafikk, og den inneholder ingenting fra Klart eller dokumentene.
Vil dere ha det helt stille, stenger dere begge i brannmuren.
Ressursovervåking (resmon), fanen Nettverk, gir samme svar hvis dere heller vil se det slik.
Beviser: at programmet slik det kjører hos dere, ikke har en vei ut. Dette er sjekken vi selv stoler mest på.
5Hva er den laget av?
Hele pakken på Mac er 286 MB. Dette er alt som ligger i den:
MacOS/klart- Programmet. 104 MB, for både Intel og Apple-prosessor. Skallet er Rust (Tauri 2), vinduet er TypeScript.
MacOS/klart-hvelv- En liten hjelper (0,2 MB) som pakker nøkkelen inn og ut med nøkkelringen og Secure Enclave.
setning/norbert3-small.onnx- Setningsmodellen: NorBERT 3 small fra Universitetet i Oslo, 177 MB. Kjøres på prosessoren, i programmet selv. Den er ikke en egen prosess.
setning/tokenizer.json- Ordlisten til modellen, 1,3 MB.
pdfium/libpdfium.dylib- PDFium, biblioteket som leser og tegner PDF-er. 15 MB.
find /Applications/Klart.app/Contents -type f -size +100k -exec ls -lh {} \;Fasit: de fem filene over og appikonet. Ingen llama-server, ingen .gguf, ingen andre modeller.
Programmet har ingen TLS og ingen HTTP-klient som kan nå en vert. Det kan ikke lytte på en port, og det kan ikke slå opp et navn på nettet. Det ser dere i selve filen:
otool -L /Applications/Klart.app/Contents/MacOS/klart | grep -iE 'curl|CFNetwork|Network\.framework|ssl' nm -u /Applications/Klart.app/Contents/MacOS/klart | grep -E '_(bind|listen|accept|getaddrinfo)$'
Fasit: ingen linjer fra noen av dem.
Det dere vil finne, og hva det er: filen har socket og connect, og ordet
llama-server står i den. Det er rester etter den lokale språkmodellen, som ble tatt ut
4. november 2026. Koden som snakket med den over en filsocket, ligger igjen, men pakken har ingen modell
å starte. Ved oppstart ser Klart etter en gammel modellprosess som kan ha blitt stående, med pgrep.
Det vil et overvåkingsverktøy legge merke til.
Filen er også lenket mot CloudKit og CoreData. Det kommer fra vindusbiblioteket,
ikke fra oss. Klart bruker ingen av dem, og har ingen iCloud-rettigheter (punkt 3).
Har dere kildekoden, er dette stedene å se:
src-tauri/Cargo.toml- Ingen reqwest, hyper, rustls, native-tls eller openssl.
tokiobygges utennet. Noen av navnene står iCargo.locklikevel, fordi et bibliotek har dem for mobil. De bygges aldri inn. Derfor er detcargo treesom gjelder, ikke et søk i låsefilen. tauri.conf.json- CSP for vinduet:
default-src 'self'ogconnect-src ipc: http://ipc.localhost. Vinduet får bare snakke med programmet det ligger i. Ingen rammer, ingen innbygde objekter, ingen skjema ut. I tillegg stopper programmet enhver navigering bort fra seg selv. capabilities/default.json- Vinduet er nektet å åpne adresser og stier:
opener:deny-open-url,deny-open-pathogdeny-reveal-item-in-dir. Ingen http-tillegg, ingen oppdaterer. scripts/sjekk-nett.sh- Kjøres før hvert bygg. Leser den kompilerte avhengighetsgrafen, leter etter adresser og etter
std::neti Rust-koden, og stopper bygget hvis noe av dette kommer tilbake.
cd src-tauri && cargo tree -e normal | grep -E 'reqwest|hyper|rustls|native-tls|openssl'
Fasit: ingen treff.
Ett sted åpner Klart en nettadresse: trykker brukeren «Kjøp lisens», ber programmet systemet
åpne https://esbjugconsult.com/klart/aktiver?hva=kjop&maskin=… i brukerens egen nettleser.
Klart kobler seg ikke dit selv. Maskinkoden i adressen er en SHA-256 av maskinens ID, og sier ingenting
om brukeren eller dokumentene.
Bibliotekene som leser dokumentene
Disse tar imot filer dere ikke har laget selv, så dem vil dere kjenne til:
- PDFium 158, pdf.js 4.10.38 og pdf-lib 1.17.1. pdf.js kjører uten
eval. - Word
- JSZip 3.10.1 og docx-preview 0.4.1.
- Excel
- SheetJS (xlsx) 0.18.5.
- Bilder
- Apple Vision på Mac. Windows sin egen tekstgjenkjenning og Tesseract 5 på Windows.
- Setninger
- NorBERT 3 small, kjørt med tract-onnx 0.23.
Beviser: at det ikke finnes kode i programmet som kan sende noe. Med kilden åpen for dere kan dere bygge den selv og sammenligne.
Steng den selv
Stol ikke på oss. Steng utgående trafikk for Klart i brannmuren eller med MDM. Programmet virker like godt. Det er hele poenget med å bygge det slik.
Brannmuren som følger med macOS, stopper bare innkommende trafikk. Legg stien inn i en regel i MDM-ens nettverksfilter, eller i LuLu eller Little Snitch:
/Applications/Klart.app/Contents/MacOS/klart
Installasjonsprogrammet (.exe) prøver å legge inn regelen selv. .msi-pakken gjør det ikke. Slik ser dere om den ligger der:
Get-NetFirewallRule -DisplayName "Klart*" | Get-NetFirewallApplicationFilter
Fasit: en regel som heter «Klart - blokker utgående», med stien til Klart.exe.
Mangler den, legger dere den inn slik, i PowerShell som administrator:
New-NetFirewallRule -DisplayName "Klart - blokker utgående" ` -Direction Outbound -Action Block -Profile Any ` -Program (Get-Process klart).Path
Kjør den mens Klart står åpent, så finner kommandoen stien selv. Ta også med tesseract.exe,
som ligger i mappen bundled under Klart. Den er en egen kjørbar fil.
Via Intune: lag de samme reglene i en brannmurpolicy under Endpoint security.
Når regelen er deres, trenger dere ikke ta vårt ord for noe av det over.
Det som ligger på disken
Klart lagrer alt sitt i én mappe per bruker. På Mac er det
~/Library/Application Support/no.klart.app/, på Windows
%APPDATA%\no.klart.app\.
prosjekter/- Det brukeren har bestemt i hver mappe, og teksten Klart har lest fra filene. Det siste er personopplysninger. Alt er kryptert med AES-256-GCM, og mappene har navn som ikke kan leses tilbake til stien. Et prosjekt som ikke brukes, glemmes etter 30 dager.
pseudonym/- Nøkkelen (
nokkel.nokkelringpå Mac,nokkel.dpapipå Windows), tidligere nøkler som er lagt til side, og nummerboken. Nummerboken knytter koder til numre og har ingen navn. secure-enclave.nokkel- På Mac-er med Secure Enclave: en referanse til en nøkkel i brikken. Den er ubrukelig på en annen maskin.
ror/- Brukerens egne merkinger og tekstene fra Tekstverktøy. Kryptert.
sikkerhetskopier/- Kopier av originalene, tatt før skanningen når brukeren ber om det. Innholdet i hver fil er kryptert med AES-256-GCM. Fil- og mappenavnene står i klartekst. Kopiene slettes ikke av seg selv. Klart minner om dem etter 30 dager.
revisjon/- Revisjonsloggen, når den er slått på. Én fil per måned, de siste 13 månedene.
- Tre små filer
aktivering.json(lisenskoden),innstillinger.jsonogvindu.json. Ikke kryptert, og uten noe fra dokumentene.
Hvordan nøklene er beskyttet
På Mac er nøkkelen pakket inn med en annen nøkkel som ligger i nøkkelringen (tjenesten
no.klart.pseudonym), og med Secure Enclave der den finnes. På Windows brukes DPAPI for brukeren.
Det beskytter mot en annen bruker og mot en disk på avveie. Det beskytter ikke mot et program som
kjører som samme bruker. Det er grensen for både nøkkelringen og DPAPI, og dere skal vite om den.
Sikkerhetskopi og søk
prosjekter/, sikkerhetskopier/ og revisjon/ holdes utenfor Spotlight og
Time Machine (og Windows-søk). ror/ og pseudonym/ blir med i Time Machine. De er
kryptert, og nøkkelfilen kan bare åpnes med nøkkelringen på maskinen den kom fra.
Det Klart legger inn i systemet
- Tjenester i Finder
- På Mac skriver Klart fire tjenester til
~/Library/Services/ved oppstart: «Rens med Klart», «Tilbakefør med Klart», «Rens tekst med Klart» og «Tilbakefør tekst med Klart». De to siste tar imot merket tekst fra andre programmer. Med"kommandolinje": falsei retningslinjene fjernes alle fire. - Adresser og filtyper
- Klart tar imot
klart://-lenker, og filtypene.klartlisensog.klartord. En lenke kan foreslå en lisens. Brukeren blir alltid spurt, og en nøkkelpakke trenger fortsatt koden sin. - Ingenting i bakgrunnen
- Ingen tjeneste, ingen oppstartsoppføring og ingen prosess som blir stående når vinduet lukkes.
- Det overvåkingen vil se
- Klart starter noen korte hjelpere fra systemet:
klart-hvelv(nøkkelen),ioreg(maskinkoden),idogscutil(bruker- og maskinnavn til endringslisten),tmutil(holde mapper utenfor Time Machine),open(vise kopimappen) ogosascript(varsler).
Fjerne alt
Slett programmet, og så dette:
rm -rf ~/Library/Application\ Support/no.klart.app ~/Library/WebKit/no.klart.app ~/Library/Caches/no.klart.app rm -f ~/Library/Preferences/no.klart.app.plist rm -rf ~/Library/Services/*Klart.workflow security delete-generic-password -s no.klart.pseudonym
Avinstaller programmet, og slett så %APPDATA%\no.klart.app\, %LOCALAPPDATA%\no.klart.app\ og %ProgramData%\Klart\.
Ta vare på nøkkelen først. Slettes datamappen uten at nøkkelen er skrevet ned eller lagret som nøkkelfil, kan ingen kopi med koder føres tilbake igjen.
Styr Klart sentralt
Én fil bestemmer det brukeren ellers velger selv. Legg den ut med MDM, Intune, gruppepolicy eller et skript. Begge stedene krever administrator for å skrive, så brukeren kan ikke løse opp det dere har låst.
- Mac
/Library/Application Support/Klart/retningslinjer.json- Windows
%ProgramData%\Klart\retningslinjer.json
{
"versjon": 1,
"virksomhet": "Acme AS",
"alltidSkjult": ["navn", "fnr", "helse"],
"kodeform": "kort",
"ansikterAlltid": true,
"utenSkanning": false,
"glemEtterDager": 30,
"revisjonslogg": true,
"nokkelEksport": false
}versjon- Må stå. Bare
1finnes. virksomhet- Navnet som står ved det som er låst: «Satt av Acme AS».
alltidSkjult- Gruppene som alltid skjules. De kan ikke slås av, og ingenting i dem kan settes til å stå. Gruppene heter
navn,fnr,kontakt,helse,setninger,skilt,penger,hemmelig,sted,dato,orgogsak. standardGrupper- Gruppene som er på når en mappe åpnes første gang. Uten: Klarts egne.
kodeformlapp,kortellerfull. Uten: brukeren velger.ansikterAlltid- Ansikter pikseleres alltid, og ingen kan settes til å stå.
utenSkanningfalsekrever at Klart alltid leser filene. Standard er at brukeren også kan merke alt selv.prosjekterfalse: Klart husker ingenting om mappene mellom gangene.glemEtterDager- Hvor lenge et ubrukt prosjekt blir liggende, 1–365. Standard er 30.
kommandolinjefalseslår av kommandolinjen og vaktmappen.revisjonslogg- Slår på loggen.
revisjonsmappegir i tillegg en kopi på et fellesområde. rapportJson- Skriver
rapport.jsonved siden avrapport.txti hver kopimappe. nokkelEksportfalse: ingen kan ta nøkkelen ut som ord eller fil. Nye maskiner meldes inn av den nøkkelansvarlige.
Lisensen kan ligge ved siden av, i lisens.klart. Da trenger ingen bruker å lime inn noe.
Har brukeren sin egen gyldige lisens, går den foran.
Kan filen ikke leses, starter ikke Klart. En skrivefeil, et ukjent felt eller en verdi utenfor det tillatte skal ikke føre til at Klart renser med mindre enn dere bestemte. Feilmeldingen sier hvilket felt det gjelder.
Nøkkelen i en virksomhet
Kodene i kopiene kan bare gjøres om til navn med nøkkelen. I en virksomhet bør alle ha den samme, ellers får samme person ulike koder hos ulike kolleger.
- Nøkkelansvarlig
- Lager virksomhetens nøkkel, deler den og melder inn kolleger.
- Medlem
- Bruker nøkkelen. Programmet lar ikke et medlem ta den ut. Det er en regel i programmet, ikke kryptografi: maskinen har hele nøkkelen.
- Nøkkelpakke
- Nøkkelen kryptert med en nøkkelkode på tolv tegn (Argon2id og AES-256-GCM). Pakken og koden sendes hver for seg. Koden kan brukes flere ganger, så behandle den som nøkkelen.
- Innmelding uten nett
- Kollegaens maskin lager en forespørsel. Den nøkkelansvarlige svarer med en innmelding som bare den maskinen kan åpne (X25519). En kontrollkode på seks sifre leses opp, så begge vet at de snakker med rett maskin.
- Reserve
- 24 norske ord på papir, eller en nøkkelfil låst med en passordfrase (Argon2id og AES-256-GCM).
Stille utrulling har en pris. Dere kan legge nøkkelpakken ved siden av retningslinjer.json
og skrive nøkkelkoden i filen (nokkelkode). Da tar Klart nøkkelen i bruk uten at brukeren gjør noe.
Men da er nøkkelen ikke sikrere enn mappen: den som kan lese begge filene, har virksomhetens nøkkel.
Revisjonslogg
Loggen sier hva Klart har gjort, når og av hvem. Den har ingenting fra dokumentene:
ingen filnavn, ingen stier og ingen verdier. Den er av til dere slår den på med
"revisjonslogg": true.
{"format":1,"tid":"2026-11-05T11:50:25.332Z","hendelse":"rens","via":"kommandolinjen",
"kilde":"DXmRKTRw4ZJMiUixyVeUYA","filer":18,"skrevet":14,"ikkeLevert":4,"steder":193,
"skjult":{"person":140,"fnr":19,"health":25},"kodeform":"kort","grupper":["helse","navn","fnr"],
"ansikter":true,"gjennomgått":false,"bruker":"ola","maskin":"OLA-MAC","klart":"0.1.0"}hendelserens,prøve,skann,glem,tilbakeellerlogg(endringslisten er tatt ut).viaappen,kommandolinjenellervaktmappen.kilde- Et avtrykk av mappen, regnet ut med en nøkkel på maskinen. Samme sak har samme verdi i hver linje på den maskinen, men stien kan ikke leses ut. En annen maskin gir en annen verdi for samme mappe.
bruker,maskin,tid- Settes av programmet selv, ikke av vinduet.
- Hvor
revisjon/ÅÅÅÅ-MM.jsonli datamappen. Medrevisjonsmappeogså<maskin>-<bruker>.jsonlpå et fellesområde. Klart oppretter ikke den mappen. Er området ikke koblet til, står det i den lokale loggen.
Loggen er en vanlig tekstfil. Brukeren kan endre den. Trenger dere en logg som ikke kan røres,
pek revisjonsmappe til et område der brukeren bare kan legge til.
Kommandolinje og vaktmappe
Samme program, uten vindu. Kanalen inn er kommandolinjen. Kanalen ut er stdout, stderr og filene dere peker ut. Ingenting åpner en port.
KLART=/Applications/Klart.app/Contents/MacOS/klart $KLART skann ~/Saker/2026-114 # les på forhånd $KLART rens ~/Saker/2026-114 --ut ~/Til-KI # lag rensede kopier $KLART rens ~/Saker/2026-114 --ut ~/Til-KI --bare-endrede $KLART vakt ~/Innboks --ut ~/Til-KI # vaktmappe $KLART tilbake ~/Til-KI/2026-114-klar # før tilbake med nøkkelen $KLART glem ~/Saker/2026-114 # glem alt om saken
--kodeformlapp,kort,fullellersvart.--grupper- Det som skal byttes ut, som
navn,fnr,helse. --prove- Gjør alt, også kontrollen av hver kopi, men skriver ingenting.
--uten-prosjekt- Husker ingenting, og bruker ikke det som er bestemt i vinduet.
- Svaret
- Én JSON-linje på stdout, med
format: 1. Fremdriften går til stderr, bare som tall. - Avslutningskode
0: alt er levert.2: noe ble holdt tilbake, fordi en kopi ikke besto kontrollen eller en fil ikke kunne leses.1: feil.
Kryptografi
- Nøkkelen
- 32 tilfeldige byte fra operativsystemet. Undernøkler med HKDF-SHA256.
- Kodene
- Hvem det er: HMAC-SHA256. Teksten som sto der: AES-SIV (RFC 5297), som er deterministisk og autentisert.
- Nøkkelen på disk
- Mac: nøkkelringen og Secure Enclave. Windows: DPAPI.
- Nøkkelfil
- Argon2id (64 MiB, 3 runder) og AES-256-GCM.
- De 24 ordene
- 256 bit nøkkel og 8 bit sjekksum, 11 bit per ord, fra en liste på 2048 norske ord.
- Innmelding
- X25519.
- Prosjekter, egne merkinger og tekster
- AES-256-GCM, med nøkler fra HKDF-SHA256. Filnavnene er HMAC-avtrykk.
- Sikkerhetskopier, og bildepunktene under feltene i en kopi
- AES-256-GCM.
- Lisenskoden
- Ed25519. Signaturen sjekkes på maskinen.
Alt er kjente algoritmer fra åpne bibliotek (RustCrypto og dalek). Vi har ikke laget noe eget.
Systemkrav
- Mac
- macOS 13 eller nyere. Intel og Apple-prosessor i samme pakke.
- Windows
- Windows 10 eller 11, 64-bit med Intel eller AMD. Installeres for alle brukere, med .exe eller .msi.
- Minne
- Klart bruker rundt en halv gigabyte når setningsmodellen er lastet. Vi anbefaler 8 GB i maskinen.
- Disk
- 286 MB installert på Mac. I tillegg kommer sikkerhetskopier og det Klart husker om mappene.
- Grafikkort
- Trengs ikke. Alt kjører på prosessoren.
- Nett
- Trengs ikke, verken ved installasjon, aktivering eller bruk.
Første gang Klart leser bilder på en Mac, kan macOS bruke noen minutter på å gjøre klar sin egen tekstgjenkjenning. Det skjer én gang.
Svart sladd som PDF, tjenestene i Finder og lisenslenker finnes foreløpig bare på Mac.
En oppdatering er en ny installasjonsfil dere henter selv, når dere vil. Klart ser ikke etter nye versjoner.
Fant du noe?
Skriv til tidemann@esbjugconsult.com. Vi svarer personlig, og vil heller høre det fra deg enn fra en kunde. Se også security.txt.
Sist endret 11. november 2026. Mac-fasitene er kjørt mot bygget fra 10. november 2026.