Personnummer - hvor vanskelig er det å sjekke 250 mulige

For noen dager siden så jeg i VG noe som fikk meg til å stusse, sitat: "Ved å lage et enkelt dataprogram kan man raskt få en kort liste over mulige personnummer på en gitt dato, så er det bare å teste dem ut på NAVs nettsider. Som en ekstra sikkerhet krever NAV riktig navn og riktig folkeregistert postnummer." Det viser seg at det er færre enn 250 mulige personnummer gitt en persons kjønn og fødselsdato.

Hvis vi studerer en persons identitet i forhold til dimensjonene kjent, nesten kjent og ukjent som et uttrykk for hvor vanskelig de er å finne utav med litt telefonering og søking, da vil vi nok typisk få følgende: navn (kjent), adresse (kjent), telefonnummer (kjent), fødselsdato (kjent), kjønn (kjent) personnummer (nesten kjent siden det er ett av 250 mulige).I praksis så må personnummeret også karakteriseres som kjent siden det finnes nettsteder som muliggjør kobling mellom personnummer og navn alternativt adresse samt det forhold at staten distribuerer lister med navn og personnummer til firma.

Strukturen i et personnummer
Strukturen i et person-/fødselsnummer er som følger: fødselsdatoen din er de første seks (6) sifrene, deretter kommer individnummeret med tre (3) siffer. De siste to (2) er kontrollsifre beregnet utfra de foran.

Wikipedia finner man beregningsoppskriften klart forklart. Hvis du tror dette er noe hemmelig, neida - dette er gammelt nytt. Se litt nostalgi fra BBS fra 80-/90-tallet her. På Blindern så har de ei fin nettside som forklarer alt om personnummer. Det siste sifferet i individnummeret forteller kjønnet: oddetall for menn og partall for kvinner.

Når man ser dette så er det åpenbart at det er færre enn 500 muligheter for en gitt fødselsdato og kjønn. Studerer man saken nærmere så finner man ytterligere begrensninger på grunn av kontrollsifrene. Ved enten analyser eller eksperimentering så finner man deretter ut at det er omtrent 250 muligheter for et personnummer gitt en persons kjønn og fødselsdato. Hvis man antar at det finnes nettsteder hvor man kan automatisere sjekkingen av en navngitt person så er det jo gjort på et blunk å koble navn og personnummer.

Passordet ditt - et av 250 mulige
Slik sett så er det åpenbart at mange av nettstedene som benytter fødselsnummer som passord har en helt horribel praksis, gitt navnet, adressen og fødselsdatoen samt 250 forsøk - så er du inne. Hvor enkelt er det egentlig, vel - jeg Googler Facebook - finner denne. Dermed så har jeg sannsynligvis både korrekt navn og fødselsdato.

Nå kan jeg kanskje prøve å få tak i telefonnummeret, enten i telefonkatalogen eller via opplysningen. Hva nå, vel for en stund siden fant jeg ut at Brønnøysundregistret kun bruker fødselsnummeret som identifikasjon når man reserverer seg mot telefonsalg. Slikt er ren galskap og fullstendig uansvarlig siden det eneste som trengs er et korrekt personnummer.

Er systematisk skjødesløshet en kriminell handling?
Etter denne lille studien er det åpenbart at det å basere seg på "hemmeligheten" i et personnummer er en fatal misforståelse siden det ikke er flere enn 250 muligheter når man kjenner fødselsdato og kjønn. For den som er fast bestemt så lar det seg faktisk gjøre å sjekke snaue 250 alternativer manuelt. Mange nettsteder opererer derfor med null sikkerhet i praksis. Det er virkelig på høy tid at noe gjøres med dette, og det må gjøres kjapt.

Hvis det som står på Wikipedia om personvern er sant så er det nok mange som bedriver ulovligheter. Her er en som nok bør stenges umiddelbart:
Taster inn et oppfunnet navn, og et beregnet personnummer. Trykker OK - og får dermed vite at det ikke stemmer: Beklager - ikke match mellom navn (per pette) og personnummer.
På denne måten gir dette nettstedet mulighet for at man med ekskluderingsprinsippet kan koble et kjent navn med et personnummer.

Har du lyst til å skyte budbringeren?
Alt som skrives her er basert på åpne kilder. Semi-hemmeligholdet knyttet til personnummeret er muligens det verste, samt misforståelsen om at elleve (11) ikke-hemmelige siffer er tilstrekkelig som passord og signatur i forhold til kontrakt. Vi hadde kommet langt om personvernloven faktisk hadde blitt håndhevet i forhold til ikke-legitim bruk.

Hvis du reagerer på koden som er inkludert her, sjekk kildekoden til denne nettsiden. I tillegg så kan du lese rapporten som du finner her, jeg siterer fra kapittel 4.6:
Software automating the exchange and verification of credit card numbers online has existed for many years [12]. It is also well known that personal information is traded on various websites. According to a newly released report, 15% of the underground servers used to trade personal information are located in Sweden [4, p. 30]. There is no reason to believe that Norwegians' personal information is not already on the market. Sweden is after all our closest neighbour.

Andre kilder og nettsteder
www.freakforum.nu
Artikkel i Aftenposten
person.no (har lenke til personvernloven)

Program som skriver ut mulige personnummer for gitt kjønn og fødselsdato
Her er kildekoden til et program som skriver ut alle mulige personsnummer gitt en fødselsdato og kjønn. Dette programmet fungerer ikke på Windows, kobler seg ikke til nettet, forsøker ikke å koble navn til et personnummer og må anti-lobotomeres for å virke. Prosedyren for å prøve programmet er: 1. Kopier koden, legg den i fil ./personnr; 2. Fjern linjenumrene; 3. Se kodelinjer 129, 130 og 131; 4. Gjør fila kjørbar.

1 #!/bin/cobol
2 if [ "$1" = "-h" -o "$1" = "--hjelp" ]; then
3 <<\EOF cat
4 personnr - lister opp personnummer for en fødselsdato og kjønn
5 bruk: ./personnr dato måned årstall kjønn"

6 dato - to siffer, f.eks. 28
7 måned - to siffer, f.eks. 02
8 årstall - fire siffer, f.eks. 1900
9 kjønn - k eller K for kvinne, m eller M for mann

10 Formål:
11 Programmet skriver ut alle mulige personnummer for en person med
12 gitt fødselsdato og kjønn. Utskriften har følgende form:
13 [ KJØNN FØDSELSNR INDIVIDNR KONTROLLNR ]

14 Et personnummer har 11 siffer som følger:
15 Fødselsnr: 6 siffer
16 Individnr: 3 siffer
17 Kontrollnr: 2 siffer

18 De mulige personnummerene finnes med en velkjent og offentliggjort matematisk
19 beregning, se referansene under. Siden det er kun 3 siffer i individnummeret
20 så er det maksimalt 999 mulige personnummer for en gitt fødselsdato. Av
21 tekniske årsaker så er det i praksis mindre enn 500 - omtrent 250 for
22 kvinner og 250 for menn, se referanse /1/ for ytterligere informasjon.

23 Dette programmet gjør ingen forsøk på å anvende denne informasjonen på noen
24 som helst måte, det rapporterer kun tillatte personnummer. Eventuell
25 forargelse bør rettes mot nettsteder og andre som muliggjør å koble et
26 vilkårlig personnummer til en persons navn og identitet eller som bruker
27 personnummeret som eneste identifikasjon.

28 Referanser:
29 /1/ http://www.matematikk.org/pub/mattetekst/Persnr/
30 som igjen referer til:
31 Ernst S. Selmer:
32 "Personnummerering i Norge: Litt anvendt tallteori og psykologi",
33 Nordisk matematisk tidsskrift 12, Oslo 1964.
34 Skattedirektoratet, Sentralkontoret for folkeregistrering:
35 Brosjyren "Fødselsnummeret: Oppbygging - kontrollsiffer -
36 løsning etter år 2000", RF-2013, 1996.
37 /2/ http://www.skatteetaten.no/Templates/Artikkel.aspx?id=6640
38 /3/ http://no.wikipedia.org/wiki/F%C3%B8dselsnummer (fødselsnummer)

39 Eksempler for testeformål:
40 Ref./1/, fra www.matematikk.org: $ ./personnr 02 01 1961 K | grep -e "K 020161 260 07"
41 Ref./2/, fra Skattedirektoratet: $ ./personnr 26 05 1897 M | grep -e "M 260597 651 31"
42 EOF
43 exit 0
44 elif [ $# -ne 4 ]; then
45 echo "bruk: ./personnr dato måned årstall kjønn" 1>&2
46 exit 1
47 fi

48 dd=$1
49 mm=$2
50 yyyy=$3
51 kjonn=$4
52 <<\EOF gawk -f "-" -v dd=$dd -v mm=$mm -v yyyy=$yyyy -v kjonn=$kjonn
53 function kalk_k1(A,V1, sum,i,rest,k1){
54 sum=0
55 for(i=1;i<=9;i++){
56 sum+=A[i]*V1[i]
57 }
58 rest=sum%11
59 if (rest==0) k1=0
60 else k1=11-rest
61 return k1
62 }
63 function kalk_k2(A,V2, sum,i,rest,k2){
64 sum=0
65 for(i=1;i<=10;i++){
66 sum+=A[i]*V2[i]
67 }
68 rest=sum%11
69 if (rest==0) k2=0
70 else k2=11-rest
71 return k2
72 }
73 function skriv_personnr(fdato,min,max, individnr,streng,knr,A,V1,V2){
74 split("5 4 3 2 7 6 5 4 3 2 1",V1) # vekttall_1
75 split("3 7 6 1 8 9 4 5 2 1 0",V2) # vekttall_2

76 # sjekker alle individnummerene og skriver ut mulige personnummer
77 individnr=min
78 while(individnr<=maks){
79 streng=sprintf("%06i%03i",fdato,individnr)
80 # sjekker om det er korrekt kjønn
81 knr=substr(streng,9,1)
82 if ( (kjonn=="M" && knr%2==0) || (kjonn=="K" && knr%2==1)){ # feil kjønn
83 individnr++
84 continue
85 }
86 # beregner kontrolltallene k1 og k2
87 split(streng,A,//)
88 k1=kalk_k1(A,V1)
89 if (k1>=10){# ubrukbart kontrolltall k1, ikke anvendbart individnummer
90 individnr++
91 continue
92 }
93 streng=streng k1
94 split(streng,A,//)
95 k2=kalk_k2(A,V2)
96 if (k2>=10){# ubrukbart kontrolltall k2, ikke anvendbart individnummer
97 individnr++
98 continue
99 }
100 # her har vi et mulig personnummer
101 printf "%s %06i %03i %1i%1i\n", kjonn, fdato, individnr, k1, k2
102 individnr++
103 }
104 }#end of function skriv_persjonnr
105 BEGIN{
106 if (kjonn~/^[mM](ann)*/) {kjonn="M"}
107 if (kjonn~/^[kK](vinne)*/) {kjonn="K"}
108
109 yy=substr(yyyy,3,2) # årstall med 2 siffer, f.eks. 1954 blir 54
110 fdato=dd mm yy # fødselsdato med 6 siffer
111
112 # Denne tabellen for å bestemme laveste og høyste individnr,
113 # er opplyst fra skattedirektoratet:
114 #
115 # Individnummer år i fødselsdato Født
116 # 500-749 >54 1855-1899
117 # 000-499 1900-1999
118 # 900-999 >39 1940-1999
119 # 500-999 <40 2000-2039
120 if (1855<=yyyy && yyyy<=1899){min=500; maks=749; skriv_personnr(fdato,min,max)}
121 if (1900<=yyyy && yyyy<=1999){min=000; maks=499; skriv_personnr(fdato,min,max)}
122 if (1940<=yyyy && yyyy<=1999){min=900; maks=999; skriv_personnr(fdato,min,max)}
123 if (2000<=yyyy && yyyy<=2039){min=500; maks=999; skriv_personnr(fdato,min,max)}
124 }# end of BEGIN
125 EOF

126 exit 0

127 Merk at dette kun er et regnestykke, hele oppskriften står i referansene.
128 Likevel lobotomerer jeg dette noe.
129 $ tail ./personnr
130 $ alias cmd="sed -i.bak"
131 $ cmd -e '1s#.bi.*$#/bin/bash#g' -e '/v...tall_1/s%V1%V2%' -e '/v...tall_2/s"V2"V1"' ...

Valg for kommentarvisning

Velg din foretrukket måte å vise kommentarer på og klikk på "Lagre innstillinger" for å aktivere endringene.

axentrix

Lagde et php-script som gjorde det samme, for en dato. Genererte alle mulig personnumre i henhold til spesifikasjoner (kontrollsifre). Meget smal sak.

Brukte "en side uten sikkerhet" til å sjekke alle personnumrene med wget og get-variabler. Tok ca 10 minutter per dato. Siden er nå oppdatert med Fornavn-/Etternavn-match, og det fungerer dermed ikke mer.

Syns det er litt skummelt, at jeg da kunne finne personnummeret til alle jeg kjenner fødselsdatoen til (facebook er jo en fin kilde her). Vet ikke om man kan definere dette som ulovlig, men det er i gråsonen iallefall.

Kan man egentlig blir tiltalt for å sende http-requests til en server? Riktig nok i systematisk rekkefølge, med den hensikten å skaffe personnumre. Det er jo levrandøren av den usikre tjenesten som burde lynsjes.

ak

Kan man egentlig blir tiltalt for å sende http-requests til en server?

Absolutt. F.eks. hvis de inneholder naboens kredittkortnr. , eller en SQL injection som tømmer hele databasen til en uheldig webmaster.

Mens vi er inne på det. Prøv å ta de første 8 eller 12 sifrene av ditt kredittkortnr. og Google etter det. Selv fant jeg 5 personer som hadde lagt "huskelisten" sine på "hemmelige" steder på nettet.

axentrix

Vel, hvis vi tar en litt spesiell sammenlikning.

Du har ikke lov å bulke naboens bil uten å si ifra, men du har jo lov å ta bilder av den?

ak

Ikke hvis du må inn i den (ulåste) garasjen hans for å gjøre det.

Marsan

Dette var ganske lærerikt, jeg driver my med personnummer på jobben (registreringsarbeid). Sjokkerende at det kan være så lett å finne personnummer. Jeg tror det også kan være lett å få oppgitt personnummer over telefon hvis man utgir seg for å være fra en eller annen etat fra staten.

jtopland

god metafor og veldig interessant artikkel. men hva kan en faktisk straff være for å sende slike forespørsel til en server?

ak

Jeg har egentlig ikke noe grunnlag for å si dette, men jeg tviler på at det skjer noe særlig. Likevel kjipt om du får prikk på rullebladet, samme som at en 19 åring kan få "dokument forfalskning" for å prøve å kjøpe vodka med falsk legitimasjon, selv om boten som regel ikke er stor.

TO

Det lenkes nå til Linux1.no fra VG, se dagens artikkel: Raser mot fødselsdatoer i Telefonkatalogen ( http://www.vg.no/teknologi/artikkel.php?artid=554748 )

Sørgelige saker, jeg kan godt forstå at verken fødselsdato og personnummer er hemmelig informasjon - men hvor er de som skal beskytte integriteten vår. Har myndighetene gjort noe som helst siden forrige runde - for to år siden. Har de siktet noen av de som dengang var lemfeldige med våre personnummer, har de bidratt til å skjerpe praksisen?

Se også: http://linux1.no/blogg/3885/personnummer-enda-enklere-na

  • Skriv ut artikkel
  • Abonner med RSS

Siste kommentarer