{"id":1170,"date":"2009-03-15T04:55:50","date_gmt":"2009-03-15T02:55:50","guid":{"rendered":"http:\/\/deleet.dk\/?p=1170"},"modified":"2009-03-15T04:55:50","modified_gmt":"2009-03-15T02:55:50","slug":"algoritmer-til-koder-og-brugernavne","status":"publish","type":"post","link":"https:\/\/emilkirkegaard.dk\/da\/?p=1170","title":{"rendered":"Algoritmer til koder og brugernavne"},"content":{"rendered":"<p><!-- \t --><strong>Opsummering<\/strong><\/p>\n<p>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\u00e5 en koden for den specifikke side.<\/p>\n<p>Jeg har fundet p\u00e5 nogle kraftige forbedringer til dette princip. Men jeg starter lige med at forklare hvordan den gamle metode er:<\/p>\n<p>En kode til en specifik side best\u00e5r af et konstant pr\u00e6fix og et konstant suffix og en variabel midterdel.<\/p>\n<p>Midterdelen er den som skifter ifht. den information p\u00e5 hjemmesiden man har valgt at bruge.<\/p>\n<p>Eksempel:<\/p>\n<p>Pr\u00e6fix = rty<\/p>\n<p>Suffix = 724<\/p>\n<p>varibel = xyxx hvor x er f\u00f8rste bogstav i URL og y er det sidste.<\/p>\n<p>Hvis vi har med hjemmesiden deleet.dk at g\u00f8re, s\u00e5 bliver koden da: &#8216;rtydtdd724&#8217;.<\/p>\n<p>Dette er temmelig kryptisk og kan nok ikke g\u00e6ttes ud fra en enkelt kode. Men hvis man nu kender til koden p\u00e5 fem forskellige sider for den samme bruger. (Fx ved at have f\u00e5et adgang til browserens kodelager, som ogs\u00e5 fort\u00e6lle hvad sidens URL er.)<\/p>\n<p>Google.com &#8211; &#8216;rtygegg724&#8217;<\/p>\n<p>Politiken.dk &#8211; &#8216;rtypnpp724&#8217;<\/p>\n<p>Piratebay.org &#8211; &#8216;rtypypp724&#8217;<\/p>\n<p>Arto.dk &#8211; &#8216;rtyaoaa724&#8217;<\/p>\n<p>newz.dk &#8211; &#8216;rtynznn724&#8217;<\/p>\n<p>S\u00e5 kan man hurtigt se, at visse dele af koden ikke \u00e6ndres og derfor m\u00e5 v\u00e6re konstanter og med lidt snilde kan man godt g\u00e6tte hvordan midten fungerer og algoritmen er brudt. Dette er farligt, da crackeren s\u00e5ledes f\u00e5r adgang til alle andre koder.<\/p>\n<p>Det skal n\u00e6sten gentages, da det er det farlige ved denne l\u00f8sning: Hvis nogen g\u00e6tter din algoritme, s\u00e5 har de alle dine koder. Det er s\u00e5ledes blot et sp\u00f8rgsm\u00e5l om, at s\u00f8rge for, at algoritmen bliver tilstr\u00e6kkelig sv\u00e6r at g\u00e6tte, selv hvis man har f\u00e5et fat i 30 koder, brugernavne og sider. Hvordan g\u00f8r man det?<\/p>\n<p><strong>Forbedring 1<\/strong><\/p>\n<p>En ide, er at skrotte ideen om konstante pr\u00e6fix og suffixer. Der er utallige m\u00e5der hvorp\u00e5 at man kan lave dem relative ifht. en eller anden information p\u00e5 en hjemmeside. Her er en ide: Man inddeler alle hjemmesider i nogle kategorier. Disse kategorier f\u00e5r hver angivet et fast suffix eller pr\u00e6fix.<\/p>\n<p>Eksempel:<\/p>\n<p>Diskussionsfora = fiv<\/p>\n<p>Nyhedssider = kwe<\/p>\n<p>Ting hvor penge er indvolveret = mot<\/p>\n<p>Email = gas<\/p>\n<p>Andet = tqd<\/p>\n<p>Networking = tha<\/p>\n<p>Hvis vi bruger dette p\u00e5 de ovenst\u00e5ende fem sider, s\u00e5 f\u00e5r vi disse koder:<\/p>\n<p>Deleet.dk &#8211; &#8216;tqddtdd724&#8217; (andet)<\/p>\n<p>Google.com &#8211; &#8216;gasgegg724&#8217; (email)<\/p>\n<p>Politiken.dk &#8211; &#8216;kwepnpp724&#8217; (nyheder)<\/p>\n<p>Piratebay.org &#8211; &#8216;tqdpypp724&#8217; (andet)<\/p>\n<p>Arto.dk &#8211; &#8216;tqdaoaa724&#8217; (networking)<\/p>\n<p>newz.dk &#8211; &#8216;kwenznn724&#8217; (nyheder)<\/p>\n<p>Disse er betydeligt sv\u00e6rere at g\u00e6tte sig til en algoritme ud fra.<\/p>\n<p>Nu t\u00e6nker du m\u00e5ske: Hvorfor vil crackeren g\u00e6tte algoritmen? Fordi, at det ikke er alle sider som browseren kendte til koden. Fx manglede den netbanken, som er crackerens m\u00e5l. Alternativt, kan det v\u00e6re, at crackeren ikke har f\u00e5et adgang til alle ens koder og derfor m\u00e5 g\u00e6tte sig til resten.<\/p>\n<p><strong>Forbedring 2<\/strong><\/p>\n<p>Ligesom vi gjorde pr\u00e6fixerne relative, s\u00e5 kan vi ogs\u00e5 g\u00f8re suffixerne relative. Man kunne godt benytte de samme kategorier som f\u00f8r og blot lave en tilsvarende liste med suffixer, men s\u00e5 ville der ikke v\u00e6re meget pointe i at have b\u00e5de suffixer og pr\u00e6fixer; Ideen og sikkerheden kommer jo netop ved, at de er forskellige.<\/p>\n<p>Hvordan kan man g\u00f8re dem forskellige? Man kan lave underkategorier til de andre kategorier. Dette kr\u00e6ver lidt kreativitet. En anden ide, er at lave dem ud fra en anden information ved siden: endelsen:<\/p>\n<p>.dk = 132<\/p>\n<p>.com = 482<\/p>\n<p>.org = 274<\/p>\n<p>.net = 140<\/p>\n<p>andre = 193<\/p>\n<p>Lad os igen opdatere vores koder fra f\u00f8r:<\/p>\n<p>Deleet.dk &#8211; &#8216;tqddtdd132&#8217; (andet, dk)<\/p>\n<p>Google.com &#8211; &#8216;gasgegg482&#8217; (email, com)<\/p>\n<p>Politiken.dk &#8211; &#8216;kwepnpp132&#8217; (nyheder, dk)<\/p>\n<p>Piratebay.org &#8211; &#8216;tqdpypp274&#8217; (andet, org)<\/p>\n<p>Arto.dk &#8211; &#8216;tqdaoaa132&#8217; (networking, dk)<\/p>\n<p>newz.dk &#8211; &#8216;kwenznn132&#8217; (nyheder, dk)<\/p>\n<p>Nu er det blevet v\u00e6sentligt sv\u00e6rere at g\u00e6tte sig frem igen.<\/p>\n<p><strong>Forbedring 3<\/strong><\/p>\n<p>En ting der kan g\u00f8re det lettere for en cracker med adgang til mange koder\/URLs, er at ledene holder sig til en specific l\u00e6ngde 3-4-3. Hvis man giver forskellige suffixer og pr\u00e6fixer forskellige l\u00e6ngder bliver det meget sv\u00e6rere at opdage, at der er tale om pr\u00e6fixer og suffixer.<\/p>\n<p><strong>Forbedring 4<\/strong><\/p>\n<p>Som det ofte anbefales med koder, s\u00e5 kan benytte sig af specialtegn (!&#8221;#\u00a4%&amp;\/ etc.) og STORE og sm\u00e5 bogstaver, gerne BlANdEt.<\/p>\n<p><strong>Forbedring 5<\/strong><\/p>\n<p>P\u00e5 matematik A l\u00e6rer man om vektorfunktioner, som typisk best\u00e5r af to funktioner der begge er relative til t: x(t) og y(t). Dette er analogt til at vores pr\u00e6fixer og suffixer er relative til informationen p\u00e5 siden. Vi kan \u00e6ndre dette til, at den ene funktion (pr\u00e6fix\/suffix) er relativ til den anden funktion (pr\u00e6fix\/suffix). Dette vil g\u00f8re det ekstremt sv\u00e6rt at g\u00e6tte.<\/p>\n<p>Eksempel:<\/p>\n<p>Vi v\u00e6lger at g\u00f8re pr\u00e6fixet relativ i nogen grad til suffixet. Dette g\u00f8res ved, at suffixerne f\u00e5r nye funktioner. En com side vil nu ogs\u00e5 g\u00f8re, at bogstaver som er associateret med et primtal skal v\u00e6re stort i pr\u00e6fixet. (A=1, B=2, C=3 etc.).<\/p>\n<p>Alts\u00e5: hvis pr\u00e6fixet er &#8216;fiv&#8217; og siden er en com side, s\u00e5 skal vi lige unders\u00f8ge om nogle af bogstaverne i &#8216;fiv&#8217; er associateret med et primtal. F=6, nej. I=9, nej. V=22, nej. S\u00e5 ingen af disse skal med stort. Hvis suffixet fx var .dk, s\u00e5 skulle tal med et lige associationstal v\u00e6re store, dvs. &#8216;vf&#8217; i &#8216;fiv&#8217; skal g\u00f8res store: FiV.<\/p>\n<p>Hvis siden hed &#8216;diskussionsland.dk&#8217; s\u00e5 ville kode blive FiVdddd132. Hvis vi lavede andre lignende fremgangsm\u00e5der for de andre suffixer, s\u00e5 ville det n\u00e6sten blive umuligt at g\u00e6tte algoritmen ud fra selv en stor m\u00e6ngde koder\/sider.<\/p>\n<p><strong>Brugernavne<\/strong><\/p>\n<p>Jeg l\u00e6ste for nyligt T\u00e6nks interessante debatbog om overv\u00e5gning. Deri var der meget snak om identifitet og dette fik mig til at t\u00e6nke p\u00e5 om man ogs\u00e5 kunne s\u00f8rge for, at folk ikke kan genkendes ens bruger p\u00e5 forskellige sider, uden at man skal huske en masse forskellige brugernavne? Ja! Man kan blot lave en anden algoritme for brugernavne, og s\u00e5 bruge den hver gang man har lyst til at v\u00e6re anonym.<\/p>\n<p>Eksempelvis har jeg gennem den seneste tid kun brugt brugernavne &#8216;Deleet&#8217; og &#8216;Deleetdk&#8217;. Dette g\u00f8r det meget let, at finde mig overalt p\u00e5 internettet blot ved at Google mit brugernavn. Man kan alts\u00e5 f\u00f8lge med i hvad jeg har lavet gennem tidens l\u00f8b. Dette er jeg ikke interesseret i, at man kan. S\u00e5 i fremtiden vil jeg bruger en simpel algoritme for at generere et nyt brugernavn til alle sider hvor jeg \u00f8nsker at v\u00e6re anonym men stadig have en bruger. Et eksempel p\u00e5 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\u00e5 jeg valgte at uploade de torrents anonymt.<\/p>\n<p>En anden fordel ved at bruge generede brugernavne, er at man ikke l\u00f8ber ind i det typiske problem n\u00e5r man skal lave en ny bruger: Nogen har valgt mit brugernavn, nu skal jeg v\u00e6lge et andet brugernavn som jeg dog stadig skal kunne huske om som ingen andre har taget. Dette er ofte sv\u00e6rt. En mulighed er ogs\u00e5, at man har haft en tidligere bruger, som man har mistet kontrollen over og som derfor sp\u00e6rer vejen for en.<\/p>\n<p>Hvis man har total algoritmiteseret en profil p\u00e5 en side, s\u00e5 kan man frit dele denne profil med andre uden at de p\u00e5 nogen m\u00e5de kan g\u00e6tte hvem man er eller ens andre koder. Det er alts\u00e5 s\u00e5ledes ikke farligt, at give en kode ud til et enkelt ikke betydningsfuldt site.<\/p>\n<p><strong>Forbedring 6<\/strong><\/p>\n<p>Ligesom at vi gjorde pr\u00e6fixerne eller suffixerne relative til hinanden, s\u00e5ledes kunne man ogs\u00e5 g\u00f8re brugernavnet eller koden relativ til den anden.<\/p>\n<p><strong>Hvor langt b\u00f8r man g\u00e5?<\/strong><\/p>\n<p>Det er et sp\u00f8rgsm\u00e5l om hvor mange algoritmer man kan huske i hovedet og hvor lang tid man gider, at sidde og bruge p\u00e5 at finde ud af hvad koden og brugernavnet er til en enkelt hjemmeside. Et v\u00e6rre problem er, at man evt. tog fejl dengang man lavede profilen s\u00e5ledes at brugernavnet\/koden er lavet ud fra en forkert algoritme. Dette vil g\u00f8re det n\u00e6sten umuligt at g\u00e6tte sig frem til hvad brugernavnet og koden er.<\/p>\n<p>Det er formentlig heller ikke n\u00f8dvendigt pga. sikkerhed at bruger mere avancerede algoritmer end relative (til en hjemmeside) pr\u00e6fixer og suffixer.<\/p>\n<p><strong>Tastekombinationer<\/strong><\/p>\n<p>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\u00e6rere at g\u00e6tte. Men dette er forkert. Det jeg mente var, at de er sv\u00e6rere for en computer at brute force med en dictionary cracker, hvis den ikke ogs\u00e5 har nidprogrammeret tastekombinationer.<\/p>\n<p>Tastekombinationer er en rigtig god m\u00e5de at s\u00e6tte farten op p\u00e5 kodeindtastningen og med det ovenst\u00e5ende system er det meget sv\u00e6rt at g\u00e6tte folks koder.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>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 [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[179,180,645,673,674,941],"class_list":["post-1170","post","type-post","status-publish","format-standard","hentry","category-andet","tag-bruger","tag-brugernavn","tag-kode","tag-kryptografi","tag-kryptologi","tag-password"],"_links":{"self":[{"href":"https:\/\/emilkirkegaard.dk\/da\/index.php?rest_route=\/wp\/v2\/posts\/1170","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/emilkirkegaard.dk\/da\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/emilkirkegaard.dk\/da\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/emilkirkegaard.dk\/da\/index.php?rest_route=\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/emilkirkegaard.dk\/da\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1170"}],"version-history":[{"count":0,"href":"https:\/\/emilkirkegaard.dk\/da\/index.php?rest_route=\/wp\/v2\/posts\/1170\/revisions"}],"wp:attachment":[{"href":"https:\/\/emilkirkegaard.dk\/da\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1170"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/emilkirkegaard.dk\/da\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1170"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/emilkirkegaard.dk\/da\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1170"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}