Algoritmer til koder og brugernavne


Opsummering

For lang tid siden skrev jeg en kort og simpel guide til hvordan man kan have mange forskellige adgangskoder uden at skulle huske dem. Ideen er, at man laver en algoritme. Vha. denne algoritme genererer man en ny kode til hver hjemmeside. Dette fungerer ved, at algoritmen bruger en eller anden information (fx kendenavn eller URL-adresse) som hjemmesiden viser offentligt. Denne information smides da ind i algoritmen og den giver så en koden for den specifikke side.

Jeg har fundet på nogle kraftige forbedringer til dette princip. Men jeg starter lige med at forklare hvordan den gamle metode er:

En kode til en specifik side består af et konstant præfix og et konstant suffix og en variabel midterdel.

Midterdelen er den som skifter ifht. den information på hjemmesiden man har valgt at bruge.

Eksempel:

Præfix = rty

Suffix = 724

varibel = xyxx hvor x er første bogstav i URL og y er det sidste.

Hvis vi har med hjemmesiden deleet.dk at gøre, så bliver koden da: ‘rtydtdd724’.

Dette er temmelig kryptisk og kan nok ikke gættes ud fra en enkelt kode. Men hvis man nu kender til koden på fem forskellige sider for den samme bruger. (Fx ved at have fået adgang til browserens kodelager, som også fortælle hvad sidens URL er.)

Google.com – ‘rtygegg724’

Politiken.dk – ‘rtypnpp724’

Piratebay.org – ‘rtypypp724’

Arto.dk – ‘rtyaoaa724’

newz.dk – ‘rtynznn724’

Så kan man hurtigt se, at visse dele af koden ikke ændres og derfor må være konstanter og med lidt snilde kan man godt gætte hvordan midten fungerer og algoritmen er brudt. Dette er farligt, da crackeren således får adgang til alle andre koder.

Det skal næsten gentages, da det er det farlige ved denne løsning: Hvis nogen gætter din algoritme, så har de alle dine koder. Det er således blot et spørgsmål om, at sørge for, at algoritmen bliver tilstrækkelig svær at gætte, selv hvis man har fået fat i 30 koder, brugernavne og sider. Hvordan gør man det?

Forbedring 1

En ide, er at skrotte ideen om konstante præfix og suffixer. Der er utallige måder hvorpå at man kan lave dem relative ifht. en eller anden information på en hjemmeside. Her er en ide: Man inddeler alle hjemmesider i nogle kategorier. Disse kategorier får hver angivet et fast suffix eller præfix.

Eksempel:

Diskussionsfora = fiv

Nyhedssider = kwe

Ting hvor penge er indvolveret = mot

Email = gas

Andet = tqd

Networking = tha

Hvis vi bruger dette på de ovenstående fem sider, så får vi disse koder:

Deleet.dk – ‘tqddtdd724’ (andet)

Google.com – ‘gasgegg724’ (email)

Politiken.dk – ‘kwepnpp724’ (nyheder)

Piratebay.org – ‘tqdpypp724’ (andet)

Arto.dk – ‘tqdaoaa724’ (networking)

newz.dk – ‘kwenznn724’ (nyheder)

Disse er betydeligt sværere at gætte sig til en algoritme ud fra.

Nu tænker du måske: Hvorfor vil crackeren gætte algoritmen? Fordi, at det ikke er alle sider som browseren kendte til koden. Fx manglede den netbanken, som er crackerens mål. Alternativt, kan det være, at crackeren ikke har fået adgang til alle ens koder og derfor må gætte sig til resten.

Forbedring 2

Ligesom vi gjorde præfixerne relative, så kan vi også gøre suffixerne relative. Man kunne godt benytte de samme kategorier som før og blot lave en tilsvarende liste med suffixer, men så ville der ikke være meget pointe i at have både suffixer og præfixer; Ideen og sikkerheden kommer jo netop ved, at de er forskellige.

Hvordan kan man gøre dem forskellige? Man kan lave underkategorier til de andre kategorier. Dette kræver lidt kreativitet. En anden ide, er at lave dem ud fra en anden information ved siden: endelsen:

.dk = 132

.com = 482

.org = 274

.net = 140

andre = 193

Lad os igen opdatere vores koder fra før:

Deleet.dk – ‘tqddtdd132’ (andet, dk)

Google.com – ‘gasgegg482’ (email, com)

Politiken.dk – ‘kwepnpp132’ (nyheder, dk)

Piratebay.org – ‘tqdpypp274’ (andet, org)

Arto.dk – ‘tqdaoaa132’ (networking, dk)

newz.dk – ‘kwenznn132’ (nyheder, dk)

Nu er det blevet væsentligt sværere at gætte sig frem igen.

Forbedring 3

En ting der kan gøre det lettere for en cracker med adgang til mange koder/URLs, er at ledene holder sig til en specific længde 3-4-3. Hvis man giver forskellige suffixer og præfixer forskellige længder bliver det meget sværere at opdage, at der er tale om præfixer og suffixer.

Forbedring 4

Som det ofte anbefales med koder, så kan benytte sig af specialtegn (!”#¤%&/ etc.) og STORE og små bogstaver, gerne BlANdEt.

Forbedring 5

På matematik A lærer man om vektorfunktioner, som typisk består af to funktioner der begge er relative til t: x(t) og y(t). Dette er analogt til at vores præfixer og suffixer er relative til informationen på siden. Vi kan ændre dette til, at den ene funktion (præfix/suffix) er relativ til den anden funktion (præfix/suffix). Dette vil gøre det ekstremt svært at gætte.

Eksempel:

Vi vælger at gøre præfixet relativ i nogen grad til suffixet. Dette gøres ved, at suffixerne får nye funktioner. En com side vil nu også gøre, at bogstaver som er associateret med et primtal skal være stort i præfixet. (A=1, B=2, C=3 etc.).

Altså: hvis præfixet er ‘fiv’ og siden er en com side, så skal vi lige undersøge om nogle af bogstaverne i ‘fiv’ er associateret med et primtal. F=6, nej. I=9, nej. V=22, nej. Så ingen af disse skal med stort. Hvis suffixet fx var .dk, så skulle tal med et lige associationstal være store, dvs. ‘vf’ i ‘fiv’ skal gøres store: FiV.

Hvis siden hed ‘diskussionsland.dk’ så ville kode blive FiVdddd132. Hvis vi lavede andre lignende fremgangsmåder for de andre suffixer, så ville det næsten blive umuligt at gætte algoritmen ud fra selv en stor mængde koder/sider.

Brugernavne

Jeg læste for nyligt Tænks interessante debatbog om overvågning. Deri var der meget snak om identifitet og dette fik mig til at tænke på om man også kunne sørge for, at folk ikke kan genkendes ens bruger på forskellige sider, uden at man skal huske en masse forskellige brugernavne? Ja! Man kan blot lave en anden algoritme for brugernavne, og så bruge den hver gang man har lyst til at være anonym.

Eksempelvis har jeg gennem den seneste tid kun brugt brugernavne ‘Deleet’ og ‘Deleetdk’. Dette gør det meget let, at finde mig overalt på internettet blot ved at Google mit brugernavn. Man kan altså følge med i hvad jeg har lavet gennem tidens løb. Dette er jeg ikke interesseret i, at man kan. Så i fremtiden vil jeg bruger en simpel algoritme for at generere et nyt brugernavn til alle sider hvor jeg ønsker at være anonym men stadig have en bruger. Et eksempel på dette er torrentsider, hvor det kun er muligt at redigere i ens torrentfil hvis at man har en bruger. Men jeg ville ikke bruge navnet Deleet der, så jeg valgte at uploade de torrents anonymt.

En anden fordel ved at bruge generede brugernavne, er at man ikke løber ind i det typiske problem når man skal lave en ny bruger: Nogen har valgt mit brugernavn, nu skal jeg vælge et andet brugernavn som jeg dog stadig skal kunne huske om som ingen andre har taget. Dette er ofte svært. En mulighed er også, at man har haft en tidligere bruger, som man har mistet kontrollen over og som derfor spærer vejen for en.

Hvis man har total algoritmiteseret en profil på en side, så kan man frit dele denne profil med andre uden at de på nogen måde kan gætte hvem man er eller ens andre koder. Det er altså således ikke farligt, at give en kode ud til et enkelt ikke betydningsfuldt site.

Forbedring 6

Ligesom at vi gjorde præfixerne eller suffixerne relative til hinanden, således kunne man også gøre brugernavnet eller koden relativ til den anden.

Hvor langt bør man gå?

Det er et spørgsmål om hvor mange algoritmer man kan huske i hovedet og hvor lang tid man gider, at sidde og bruge på at finde ud af hvad koden og brugernavnet er til en enkelt hjemmeside. Et værre problem er, at man evt. tog fejl dengang man lavede profilen således at brugernavnet/koden er lavet ud fra en forkert algoritme. Dette vil gøre det næsten umuligt at gætte sig frem til hvad brugernavnet og koden er.

Det er formentlig heller ikke nødvendigt pga. sikkerhed at bruger mere avancerede algoritmer end relative (til en hjemmeside) præfixer og suffixer.

Tastekombinationer

I den forrige artikel om dette skrev jeg, at tastekombinationer var bedre at bruge end ord og at grunden til dette var, at de var sværere at gætte. Men dette er forkert. Det jeg mente var, at de er sværere for en computer at brute force med en dictionary cracker, hvis den ikke også har nidprogrammeret tastekombinationer.

Tastekombinationer er en rigtig god måde at sætte farten op på kodeindtastningen og med det ovenstående system er det meget svært at gætte folks koder.