Solkrypt

noen råd om symmetrisk kryptering

I dokumentasjonen for Solkrypt ga vi eksemplet krypter hemmelig.txt abrakadabra på symmetrisk kryptering (AES-kryptering). Det var ikke godt fordi såkornet abrakadabra bare inneholder små bokstaver a-z. Men det var heller ikke seriøst ment. Vi burde ha gitt et eksempel på et godt såkorn. Såkornet brukes til å lage den symmetriske nøkkelen. Du kan kalle det nøkkelen eller passordet om du vil, det er ikke så nøye. Det som er viktig er at såkornet har tegn med koder som er spredt utover hele byte-mengden 0,...,255.

Når du åpner en Windows kommandoboks (et skall) er den satt til å bruke et visst tegnsett. Det er neppe det beste. Du kan se hvilket det er ved å gi kommandoen chcp uten argumenter. Du bør bruke tegnsett 1252, og det setter du med chcp 1252. Det er brysomt å gjøre dette hver gang du åpner en boks; du bør i steden legge inn dette i miljo.bat som autokjøres hver gang du åpner en boks som forklart i dokumentasjonen.

Kontroller at du har fått opp riktig tegnsett ved å kjøre chcp. Nå kan vi vende tilbake til problemet: Hvordan taste inn tegn som spenner over hele intervallet 0,...,255 ? På tastaturet ditt har du bare et fåtall av disse tegnene. Å skru fra det ene språket til det andre for å kunne taste inn andre tegn er håpløst tungvint og dekker dessuten ikke alle tegn likevel. Vi har laget noen nyttige programmer for å hjelpe deg med dette. De ligger i pakken tegn.zip.

Ett av programmene heter tegnsett.exe og skriver ut alle tegnene i gjeldende tegnsett med koden desimalt og heksadesimalt, samt kvadranten og tegnet selv. De første 32 tegnene er kontrolltegn og tegnet med koden 32 (hex 20) er blankt (mellomrom) så programmet hopper over disse. Gi kommandoen tegnsett | more så kan du bla deg gjennom hele tegnsettet og se hvilke tegn som finnes. Et annet program er tegnkoder.exe og brukes til å vise kodene til tegnene du skriver på kommandolinja, f.eks. tegnkoder @$£€. Programmet tegn.exe går den motsatte veien og viser tegnene med kodene du angir: tegn \40\24\A3\A4 gir deg strengen @$£€ tilbake. Du kan blande ikke-kodede tegn med disse: tegn \40A\24#/\A3(§\A4._ gir @A$#/£(§€._ .

Men programmet du virkelig trenger er spre.exe. Det sprer bokstavene a-z utover hele 0,...,255. Dermed kan du velge et såkorn som er lett å huske og bare bruker små bokstaver a-z. spre blåmann gir +~å£$€€. Merk at det er greit å bruke andre bokstaver enn a-z hvis det faller naturlig. De røres ikke. Hvis du nå tar tegnkoder +~å£$€€ ser du at du har brukt alle kvadrantene, og det er viktig. Disse tegnene kan man faktisk få fram på et norsk tastatur, men generelt går ikke det. Det beste er å fange dem i en miljøvariabel slik: for /f %a in ('spre blåmann') do @set sakorn=%a. Nå har du den spredte blåmannen i sakorn: echo %sakorn% gir +~å£$€€. Da AES-krypterer du slik: krypter hemmelig.txt %sakorn%. Når du er ferdig med økten sletter du såkornet sikkert slik: set sakorn=xxxxxxx.

Hvis du lurer på hvorfor det er viktig å spre tegnene så ligger forklaringen i algoritmen bak AES-kryptering. Det er ikke bare et spørsmål om å bruke mange ulike tegn. Bokstavene a-z og A-Z ligger samlet i kvadrant 1 og det er ikke bra. De norske ÆØÅæøå ligger i kvadrant 3 så det er bra å bruke dem. £€§ ligger i kvadrant 2. Sifrene 0-9 ligger i kvadrant 0. Jeg kunne ha bygd inn spredningen i AES-algoritmen, men det skulle volde kaos om jeg endret den nå.

Erlend