Solkorsets Krypteringstjeneste

solkrypt med solnet og solpost

Hvis du vil laste ned med det samme går du til nedlastingssiden.

solkrypt med solnet og solpost er begynnelsen på et nytt internett. Et distribuert internett uten sentrale autoriteter. Det bruker ikke domenenavnsystemet (DNS) eller Certificate Authorities (CA). Det bruker heller ikke TLS/SSL til kryptering. Det åpner for et internett hvor alle kan ha sidene sine på egen maskin slik at man slipper webhotell (web host) og kan ha hjemmeside uten at det koster noe og uten reklame eller spionasje. Det åpner også for en distribuert søkemotor og distribuerte fora hvor trådene er spredt på mange maskiner. Dermed unngår man sentral sensur som søkemotorer og fora i våre dager lider av. Debatt-trådene blir selvmoderert, og hvis man ikke liker modereringen av en tråd, kan man opprette en ny om samme emne og moderere den selv. Man har den nye tråden på egen maskin, og ingen kan sensurere den. På denne måten kommer vi fri fra big tech og deres bjørnetjenester.

Solkrypt er et krypteringsprogram for Windows som du må laste ned og kjøre på din egen maskin. Det består av en rekke batch skripts og krypteringsprogrammet krypto.exe, samt hjelpeprogrammet ipadresse.exe . Det kommer sammen med solnet og solpost som omfatter webserveren solnet.exe og solnet-applikasjonen solpost.dll for kryptert kommunikasjon på internett. Skriptene som bruker solpost gjør det gjennom programmene sendfil.exe, pussle.exe, og sjekk.exe . Samtlige programmer er 32 bits (x86) unntatt krypto.exe som er 64 bits (x64) fordi det utfører tunge RSA-beregninger. Du trenger altså en 64 bits CPU og en 64 bits versjon av Windows for å kjøre dette.

Funksjoner i DLL-utvidelser er en raskere måte å webprogrammere på enn CGI. DLL-utvidelsen lastes en gang for alle i minnet og funksjonen som kalles kjøres i tråden som http-forespørselen avlet. I CGI må man opprette en ny prosess for hver innkommende forespørsel og kanskje laste skriptet (og kompilere det? arghh!) også.

Solkrypt krypterer og dekrypterer med 2048 bits RSA og AES. Det kan også signere og designere slik at du kan sende et signert og kryptert brev. Ved hjelp av signaturen vet mottageren at det er du som har sendt det. Vi går gjennom skriptene for å vise hvordan man bruker solkrypt og solpost fra begynnelse til slutt.

Når du har lastet ned og pakket opp solkrypt.zip må du først sette opp miljøet. I solkrypt-mappen finner du skriptet miljo.bat. Der settes en rekke miljøvariabler som du kan redigere. Den første er solkryptprog som skal peke på mappen med alle skriptene og programmene. dlldir brukes av solnet og er mappen som den laster dll-utvidelser fra. Den skal alltid være lik %solkryptprog%\ så la det stå. Miljøvar solkrypt peker på rotmappen med solkrypt-data. Default er at den er lik %solkryptprog% men det behøver den ikke være. Så settes 4 vars: nokler, hallo, innboks og utboks. De må peke på mapper som skal holde visse data. Default er at de ligger under %solkrypt%. Det eneste du bør redigere er altså solkryptprog. Men hvis du alltid kjører miljo.bat fra solkryptprog-mappen første gang slipper du det også (se nedenfor).

Neste miljøvar er ipadresse. Hvis du bare skal bruke solkrypt og ikke solpost kan du glemme denne. Men solpost setter deg i stand til å kommunisere kryptert med andre på internett. %ipadresse% skal være din maskins ip-adresse på lokalnettet. Mer om hvordan du finner den nedenfor. maxfilstorrelse brukes av solpost og angir største tillatte fil i Kb som den er villig til å ta i mot og lagre på maskinen din. Den er satt lik 1024 hvilket betyr 1 Mb. maxantfiler er største tillatte antall filer i hver av mappene. Den er satt lik 100. Endelig er svarteliste en liste av blokkerte ip-adresser. I din innboks-mappe ligger filen ipadresser.csv som viser hvilke ip-adresser filene kom fra. Ser du en spammer der er det bare å ta ip-adressen og føre den opp i svartelista. Hensikten med disse tre variablene er å beskytte mot spam så ingen av dine kontakter kan fylle opp hele harddisken din med søppel.

Det er meningen at du skal kjøre solkrypt og solpost fra en Windows kommandoboks. Når du har redigert miljo.bat er det lurt å redigere egenskapene til boksen slik at du åpner i solkryptprog-mappen og automatisk kjører miljo.bat når boksen åpnes. Dette gjør du slik: Først sender du boksen til skrivebordet hvis den ikke allerede ligger der. Så høyreklikker på ikonet og velger Egenskaper. Da kommer et vindu opp og du går til Snarvei. Der skal du redigere Mål og Start i. Målet skal være C:\Windows\System32\cmd.exe /v:on /K miljo og "Start i" mappen hvor du har lagt skriptene/programmene, f.eks. C:\Users\ola\solkrypt, samme som %solkryptprog%. Det er viktig å få med seg /v:on i målet for ellers virker ikke skriptene!

Når dette er gjort og du har åpnet en kommandoboks, kommet til mappen %solkryptprog% og kjørt miljo.bat, er alt klart for å begynne å bruke solkrypt og solpost. Vi gjør først rede for solkrypt uten solpost. Når du bare skal kryptere egne filer og ikke sende dem til andre er det AES-kryptering du skal bruke. krypter.bat bruker AES hvis den ikke finner en passende nøkkel. For å AES-kryptere filen hemmelig.txt gir du kommandoen krypter hemmelig.txt abrakadabra hvor abrakadabra er et ord som brukes til å lage en symmetrisk nøkkel. Med den nøkkelen krypteres filen. Hvis du nå ser i mappen er hemmelig.txt borte og i steden ligger filen hemmelig.txt.aes der. hemmelig.txt er ikke bare slettet på vanlig måte men utvisket slik at det ikke finnes spor av den på disken. Men du kan få den tilbake ved å dekryptere: dekrypter hemmelig.txt.aes abrakadabra. Dette er selvfølgelig bare mulig for den som kjenner det hemmelige ordet abrakadabra. Etter dette har du atter hemmelig.txt der og ingen hemmelig.txt.aes . Forviss deg om at hemmelig.txt inneholder det samme som før.

krypter.bat og dekrypter.bat bruker slett.bat som visker ut en fil før den slettes på vanlig måte. Den skriver altså over filen, nuller den ut, før den slettes. Når man bare tar del hemmelig.txt ligger dataene fremdeles på disken selv om filen ikke lenger eksisterer, og med spesiell programvare kan de hentes ut igjen, filen rekonstrueres.

Det er mulig å kryptere og dekryptere mer enn en fil om gangen ved å bruke jokertegn (wild cards) i filnavnet. For å kryptere alle txt-filer i denne mappen gir du kommandoen krypter *.txt abrakadabra og for å dekryptere alle igjen blir det dekrypter *.aes abrakadabra. På samme måte kan du slette flere filer samtidig: slett *.txt. Men forsiktig så du ikke av vanvare sletter mer enn du vil! Endelig kan du gjøre dette i denne mappen og alle undermapper ved å bruke flagget /r slik: krypter /r *.txt abrakadabra, dekrypter /r *.aes abrakadabra og slett /r *.txt. Men her må du være ytterst forsiktig og virkelig vite hva du gjør så du ikke nuller ut hele harddisken! Som hovedregel bør du aldri bruke jokertegn i filnavn eller flagget /r.

Hvis du ikke skal kommunisere sikkert med andre er dette alt du trenger. Men vi regner med at du vil bruke solpost og sende krypterte filer til andre. Da må du bruke RSA-kryptering. I RSA bruker man et nøkkelpar av en offentlig og privat nøkkel. Disse lages sammen. Du må velge et nøkkelnavn, som også blir ditt solpost-navn. Velg ett som ingen annen kan mistenkes for å velge og som ikke røper noe om deg, for dette sendes ukryptert ut på nettet. Bruk ikke spesialtegn i dette navnet, særlig ikke punktum, og unngå norske bokstaver. Man oppretter nøklene med nokler.bat. Det bruker et frø, et såkorn, for å lage nøklene. Hvis du har valgt navnet midnattssol skal såkornet legges på filen midnattssol.sed i mappen %nokler%. Lag denne filen og åpne den. Så lukker du øynene og taster inn tilfeldige tegn i en lang remse. Så lagrer du. Nå er alt klart for å lage nøklene. Gi kommandoen nokler midnattssol. Nøklene legges i mappen %nokler%. Den offentlige nøkkelen ligger på filen midnattssol.pub og den private på midnattssol.pri . Dette tar noen sekunder så vær tålmodig.

Før du kan begynne å kommunisere kryptert med en annen på nettet må dere utveksle offentlige nøkler. Dette er ikke så lett som man skulle tro. Naive mennesker sender sin nøkkel som vedlegg til epost. Det kan gå bra men det vet du ikke. Man kan bli offer for såkalt man-in-the-middle angrep. Les mer om det på nettet. Følgen er at tredjepart kan lese all kryptert epost mellom deg og den andre; dere røper all deres hemmelige info for uvedkommende uten å vite det. Det er på grunn av dette man har certifikater og Certificate Authority (CA). Men dette er en sentralisert modell som vi skal unngå. Det er bedre å klare seg på egen hånd og ikke være avhengig av en CA som alltid vil være makten selv.

Første skritt er å opprette et engangsnavn og et engangspassord for den andre. Det gjør man med bruker.bat. Eksempel: bruker trollmannen abrakadabra midnattssol. Man må angi sitt eget solpost-navn til slutt. Det kan være lurt å opprette flere brukere på en gang. Når det er gjort kjører man miljo.bat igjen slik at brukerne registreres i miljøet. Det er nødvendig for at solpost skal kjenne dem. Så starter man solnet (mer info nedenfor). Hvis Kari har gjort dette og vil formidle brukeren til Ola, skal hun på en eller annen måte kontakte Ola og gi ham følgende info: Sin ip-adresse (dvs. routerens ip-adresse på internett), sitt solpost-navn, engangsnavnet og engangspassordet. Dette kan skje over telefon, sms, epost, privat melding i et forum, muntlig ansikt til ansikt, nedskrevet på en papirlapp som overrekkes hånd til hånd, eller på annen måte. Poenget er at det ikke gjør noe om andre får tak i dette bare Ola rekker å bruke infoen før andre gjør det.

Så snart Ola mottar denne info skal han koble til Kari og utveksle offentlige nøkler slik: koble 1.2.3.4 trollmannen abrakadabra harfagre midnattssol. I steden for 1.2.3.4 skal her stå Karis ip-adresse. harfagre er Olas solpost-navn. Hvis alt gikk bra er nøklene nå utvekslet. Ola har midnattssol.pub i sin mappe %nokler% og Kari har harfagre.pub i sin mappe %nokler% (skjønt ennå kryptert). Ola behøver ikke kjøre solnet for å gjennomføre dette, men Kari må. Hvis det gikk bra får Ola meldingen Alt i orden. av koble.bat . Ellers kommer det en feilmelding med mer info.

Men hvis Ola ennå ikke har solkrypt på sin maskin kan han bruke infoen fra Kari til å laste ned solkrypt.zip fra hennes maskin. Han åpner en nettleser og skriver http://1.2.3.4/solpost.lastned?bruker=trollmannen på adresselinja. Da får han ned solkrypt.zip . Forutsetningen er at Kari har lagt denne filen i mappen %solkrypt%. Hvis du vil tillate kontakter å laste ned fra din maskin skal du selv gjøre dette. Gjør det med en gang du har åpnet solkrypt.zip så du ikke glemmer det.

Hos Ola er Karis nøkkel nå klar til bruk, men hos Kari er Olas nøkkel ennå kryptert. Hun dekrypterer den med kommandoen upakk harfagre eller bare upakk *. Det går også bra å kjøre miljo.bat igjen, for upakk * kalles derfra. Hvis solnet stoppes man kjøre miljo.bat før den startes igjen, for å oppdatere miljoet med nye solpost-navn og ip-adresser.

For at Kari skal kunne sende meldinger til Ola må han også kjøre solnet (husk miljo.bat først). Etter det kan begge sende krypterte meldinger til hverandre. Rettere sagt er det krypterte filer som overføres. Vil Ola sende filen brev.txt kryptert til Kari, legger han den i mappen %utboks%. Så gir han kommandoen send brev.txt harfagre midnattssol. Kari får filen harfagre.brev.txt.sgn.rsa i sin innboks (mappen %innboks%). Det betyr at brev.txt både er signert og kryptert og kommer fra Ola. Hun dekrypterer og designerer med apne.bat slik: apne harfagre.brev.txt.sgn.rsa midnattssol. Ut kommer harfagre.brev.txt som inneholder det samme som brev.txt hos Ola.

send.bat bruker signer.bat og krypter.bat, og apne.bat bruker dekrypter.bat og designer.bat . Det kan være greit å vite hvordan man bruker dem direkte. Når Ola vil signere brev.txt tar han signer brev.txt harfagre. Ut kommer brev.txt.sgn . Når han så vil kryptere med Karis nøkkel: krypter brev.txt.sgn midnattssol. Ut kommer brev.txt.sgn.rsa . Han kan ikke gå tilbake igjen siden han ikke har Karis private nøkkel; bare Kari kan gjøre det. Hun tar dekrypter brev.txt.sgn.rsa midnattssol og siden designer brev.txt.sgn harfagre. Da får hun ut brev.txt .

Når man slår av routeren og siden på igjen, eller strømmen går og kommer tilbake, får man ny ip-adresse fra sin ISP. Da må man varsle sine solpost-kontakter om sin nye ip-adresse. Det gjør man med skriptet hallo.bat. Vil Ola varsle tar han hallo harfagre. Siden kan han straks sende brev til dem alle. Men de andre kan ikke sende til Ola før de har sjekket noe. For å hindre at uvedkommende sender falsk melding om ny ip-adresse for Ola, sender Ola et signert pussle til alle sine kontakter. Dette er hva hallo.bat gjør. Hvis Kari prøver å sende et brev til Ola oppdager send.bat at det ligger et signert pussle fra Ola i hallo-mappen. Da kalles ipadresser.bat som designerer og sjekker. Hvis pusslet stemmer oppdateres Olas ip-adresse på fil og i miljøet før brevet sendes. Pusslet lages av pussle.exe og sjekkes av sjekk.exe .

Da gjenstår bare å forklare hvordan man med hell kjører solnet.exe. Dette er det mest innviklede av alt så vær tålmodig. For at dette skal være mulig må du rå fritt over routeren som kobler deg til internett. Hvis du går på nett via en offentlig wifi-forbindelse eller lokalnettet på jobben så går ikke dette; da kan du ikke kjøre solnet. Typisk er det bare ditt hjemmenettverk du fritt kan mekke på. Routeren (kabelmodemet) er altså boksen mellom maskinen din og pluggen i veggen.

Det første du må gjøre er å finne din maskins og routers ip-adresser på lokalnettet. Åpne en kommandoboks og gi kommandoen ipconfig /all. Der nede noe sted finner du Ethernet adapter Ethernet: og under det IPv4 Address. . . . . . . . . . . : 192.168.0.11(Preferred) eller noe lignende. Her er 192.168.0.11 min maskins ip-adresse på lokalnettet. Du finner også Default Gateway . . . . . . . . . : 192.168.0.1 eller lignende. Dette er routerens ip-adresse på lokalnettet.

solnet lytter etter innkommende http-forespørsler på port 80 og din maskins ipadresse, som angitt i miljøvariabelen %ipadresse% (se ovenfor). Men det kommer ingen forespørsler fra internett til din maskin med mindre du gir routeren beskjed om å fremme dem til din maskin. Dette kalles port forwarding og er hva vi skal gjøre nå. Det er på grunn av dette at du må rå fritt over routeren. Du må logge inn i routeren og bestille port forwarding. Da trenger du brukernavn og passord. Hvis ingen har endret det står det på undersiden av routeren, som levert fra fabrikken. Så snu routeren opp ned og les av brukernavn og passord. Noter deg dette i en fil for fremtidig bruk. Nå kan du logge inn. Åpne en nettleser og skriv http://192.168.0.1 på adresselinja, men erstatt ip-adressen her med den du fant for routeren på lokalnettet ovenfor.

Nå får du opp en side fra routeren som ber om brukernavn og passord. Gi inn dem du fant og du skal kunne komme inn. Nå gjelder det å finne frem til port forwarding. Hvor det ligger kommer an på routeren, men prøv advanced og advanced settings eller noe sånt. Når du har funnet det bestiller du fremme av innkommende http-forespørsler på port 80 til din maskin ved dens ip-adresse på lokalnettet som du fant ovenfor (min er altså 192.168.0.11). Vær nøye med å enable og lagre endringene. Gå ut og tilbake igjen og sjekk at alt er i orden.

Nå er det bare en ting som gjenstår: Du må slippe trafikken gjennom Windows-brannmuren til solnet.exe . Gå til kontrollpanelet i Windows. Klikk på System og Sikkerhet og siden på Windows-brannmur. Der skal du klikke på Slipp en app eller funksjon gjennom Windows-brannmuren. Det er to ting du må åpne for. Det ene er World Wide Web Services (HTTP). Klikk på knappen for å Endre innstillinger og kryss av for å tillate http-trafikk både privat og offentlig (selv om det siste kanskje er unødvendig). Så klikker du på Tillat en annen app... og finner frem til solnet.exe som du legger til. Kryss av for å tillate den, offentlig som privat. Klikk OK og du er ferdig.

Nå er alle pusselbitene på plass. Hvis du har en annen webserver (slik som IIS) på maskinen din som lytter på port 80 og din maskins ip-adresse så må du stoppe den før du kan kjøre solnet. Når alt er klart gjør du slik: Du åpner to kommandobokser, en for serversiden og en for klientsiden. I serverboksen kjører du solnet.exe, det er bare å skrive solnet så er den i gang (men husk miljo.bat først). Ingenting registreres i Windows og det er bare å trykke en tast for å stoppe den. Så lenge solnet kjører henger boksen så du kan ikke gjøre noe annet der. Men før du starter solnet bør du i serverboksen opprette noen engangsbrukere, som beskrevet ovenfor, og kjøre miljo.bat igjen slik at andre kan koble til maskinen din og utveksle offentlige nøkler. Kontakt dem du vil korrespondere med og gi dem infoen de trenger.

I klientboksen gjør du alt annet, som beskrevet ovenfor: Kobler til andre maskiner og solpost-brukere, og sender krypterte filer. For å teste om solnet på en annen maskin er oppe og går åpner du en nettleser og skriver http://1.2.3.4/solpost.test på adresselinja. Bruk maskinens ipadresse i steden for 1.2.3.4 . Hvis du får svaret Det virker! så vet du det. For å finne din routers ip-adresse på internett kan du klikke her. Forutsetningen er at du ikke bruker proxy eller VPN.

Hvis noe av dette ikke virker på din maskin så nøl ikke med å ta kontakt. Hvis du vil videreutvikle solpost eller lage en annen solnet-applikasjon så behøver du litt info. solnet virker på den måten at når den mottar forespørsel etter URLen http://1.2.3.4/solpost.test så lastes solpost.dll (hvis den ikke alt er lastet) og funksjonen test i solpost.dll kalles. Alle funksjoner som skal kalles fra solnet må ha signaturen int test(requestdata &req, responsedata &res) og eksporteres fra DLLen. Klassene her finner du beskrevet i filen messagedata.cpp som er vedlagt i pakken. Dette er grensesnittet mellom solnet og solpost. Kildekoden til solpost, solpost.cpp, er også vedlagt slik at du kan se hvordan grensesnittet brukes. solpost.cpp bruker noen proprietære klasser som ikke er vedlagt, men mye er det ikke, og en øvet C++ -programmerer kan lett erstatte dem med noe standard eller eget. solnet og solpost er flertråds-programmer så man må vokte seg når man griper til felles ressurser som filer på disken eller prosessens miljø. I solpost har vi brukt klassen mutex for å serialisere adgang til slike ressurser. mutex.cpp er vedlagt. solnet.exe er et 32-bits-program (x86) så det må solnet-appen også være.

Som antydet innledningsvis er solkrypt og solpost bare begynnelsen. Vi har planer om en distribuert søkemotor og distribuerte fora. Man skal kunne ha hjemmesiden sin på egen maskin med ubegrenset mye plass og trafikk uten å betale et øre. Man skal kunne surfe på nettet uten at noen kan se ens ip-adresse og uten å spores av cookies. På den annen side skal alle kunne besøke dine hjemmesider på din maskin uten å se din maskins ip-adresse og uten å vite hvem du er. Bare dine nærmeste naboer i nettverket kjenner din ip-adresse. Dette vil realiseres ved å utvikle nye solnet-apper (DLL-utvidelser). Hvis du kan programmere i C++ kan du selv bidra i dette arbeidet.

Erlend