www.ntnu.no *
INFOWEB >  programmer >  generelt  > Kryptografi og PGP
Tasks
You may add comments
Or e-mail this article
Read articles written by bjornarg
User rating
How much did this article help you?
Much Some Little
Print preview
You do not need a 'printer-friendly page' to print this page. Here's why
Contents

Kryptografi og PGP

Litt om kryptografi

Formålet med kryptografi er overføring av informasjon mellom to punkter, der kun avsender og mottaker kan forstå innholdet. Dette gjøres ved at senderen gjør den opprinnelige informasjonen om til uforsåelig, "kryptisk" informasjon, slik at den ikke gir mening for utenforstående som eventuelt snapper den opp. Det må imidlertid være mulig for mottaker å forstå informasjonen. Dette oppnås ved hjelp av en krypteringsalgoritme, som benytter seg av en eller flere krypteringsnøkler, som fastsettes av de involverte partene. Både sender og mottaker har en nøkkel, som brukes til henholdsvis kryptering og dekryptering av informasjonen.

Konvensjonell kryptografi

Den tradisjonelle, konvensjonelle formen for kryptografi er såkalt symmetrisk, som innebærer at sender og mottaker sitter inne med samme informasjon. Ved bruk av nøkler kalles dette også hemmelig nøkkel-kryptografi. Sender bruker nøkkelen til å kryptere innholdet, mens mottaker reverserer prosessen ved å bruke den samme nøkkelen. Flere symmetriske krypteringsalgoritmer brukes i utstrakt grad. Den mest kjente er DES-algorimen (Data Encryption Standard), utviklet av IBM på 1970-tallet. Denne typen kryptering medfører imidlertid et problem. Krypteringsnøkkelen må holdes hemmelig, men den må i utganspunktet utveksles mellom de to partene som skal benytte den, uten at noen andre får fatt i den. Hvis selve nøkkelen blir kompromittert er krypteringen selvsagt verdiløs og gir en falsk trygghet. Da kan utenforstående både forstå informasjonen som blir utvekslet, og selv sende ut forfalsket informasjon, kryptert med nøkkelen.

Offentlig nøkkel

En moderne form for kryptografi er såkalt offentlig nøkkel-kryptografi. Mye brukte krypteringsalgoritmer av denne typen er RSA, DH og DSA. Med denne typen kryptografi har sender og mottaker forskjellige nøkler. Hver person som ønsker å utveksle kryptert informasjon genererer sitt eget sett med nøkler, som inneholder én privat nøkkel, og én offentlig nøkkel. Den offentlige nøkkelen distribueres så fritt til alle som man vil utveksle kryptert informasjon med. Det gjør ingen ting om denne snappes opp av utenforstående. Den offentlige nøkkelen kan nemlig kun benyttes til kryptering. For å dekryptere innholdet igjen må den private nøkkelen benyttes, og denne er det kun eieren av nøkkelsettet som har. En utveksling av informasjon foregår dermed på følgende måte, hvis A vil sende en kryptert epost til B:

Denne formen for kryptografi er prinsippielt basert på store primtall, og det faktum at det er, med den kunnskap man har i dag, langt vanskeligere å faktorisere et produkt av store primtall enn å multiplisere primtallene for å danne produktet. Det er ikke matamatisk bevist at faktorisering er vanskelig, men det har så langt vist seg vanskelig i praksis. Dersom man skal knekke krypteringen må man foreta faktoriseringen for å finne de opprinnelige primtallene. Denne matamatiske koblingen mellom den offentlige og den private nøkkelen gjør det altså teoretisk mulig å finne den private nøkkelen dersom man har den offentlige, det krever bare abnormt stor datakraft og lang tid. Hvor vanskelig det er å knekke krypteringen er derfor helt avhengig av hvor store tall man har med å gjøre. Derfor angis styrken på krypteringen i antall bits. Jo flere bits' kryptering, jo større regnekapasitet kreves for å knekke den. Konvensjonell kryptografi er også basert på enormt store tall, men denne typen kryptografi krever ikke på langt nær så store tall som offentlig nøkkel-kryptografi for å være sikker.

Digitale signaturer

En digital signatur er en analogi til en vanlig fysisk signatur. Når man signerer noe digitalt, benyttes den private nøkkelen til å lage signaturen. Signaturen kan så leses av en mottaker ved hjelp av den offentlige nøkkelen, på sett og vis omvendt fra selve krypteringen. Dersom signaturen kan leses av den offentlige nøkkelen, må den være laget med den private, og dette bekrefter avsenderens identitet. Signaturen dannes ut ifra innholdet i det som signeres og den private nøkkelen, og dermed kan ikke en signatur skilles fra innholdet. Det er derfor ikke mulig å benytte en signatur i ett dokument til å forfalske en signatur i et annet.

Sertifikater

Et åpenbart problem med offentlig nøkkel-prinsippet er at, med mindre man får overrakt den offentlige nøkkelen fysisk fra en person, kan man aldri være sikker på at man har mottatt riktig nøkkel, og ikke en forfalskning. Dette er grunnen til at offentlige nøkler distribueres med et digitalt sertifikat. Dette består i praksis av informasjon om identiteten til nøkkeleieren (som navn og epost-adresse), samt en eller flere digitale signaturer som bekrefter sammenhengen mellom identiteten og nøkkelen. Det hele er basert på tillit. Sertifikatet må være signert av noen som mottaker stoler på, en autoritet. Mottaker stoler da på at denne autoriteten serverer sannheten, gjennom den digitale bekreftelsen. Dette forutsetter at mottakeren allerede innehar den offentlige nøkkelen til denne autoriteten, og dermed kan lese signaturen. Enkelte selskaper lever av å gi sin garanti gjennom slike sertifikater.

Fingeravtrykk

En annen måte å sjekke om en offentlig nøkkel er autentisk er gjennom såkalte fingeravtrykk. Et fingeravtrykk er en såkalt hash av nøkkelen. Hash'en genereres av en enveis hash-funksjon. Denne returnerer informasjon av en bestemt størrelse, selv om argumentet kan være av variabel størrelse. Hash-funksjonen er slik at dersom argumentet forandres, vil hashen bli forskjellig. Funksjonen er konstruert slik at dette gjelder selv for en forandring i kun èn bit i de størst tenkelige argumentene den vil motta. Det er ikke mulig å reversere prosessen og utlede den opprinnelige informasjonen ut ifra hash'en. Et fingeravtrykk er en hash av en offentlig nøkkel som er relativt liten i størrelse og lett lesbar. Dette kan for eksempel benyttes dersom man kjenner stemmen til eieren av nøkkelen, og kan kontakte ham/henne på telefon. Eieren får også generert fingeravtrykket av sin nøkkel, og man kan sammenligne disse over telefonen.

PGP

PGP står for Pretty Good Privacy og ble opprinnelig utviklet av amerikaneren Philip R. Zimmermann som et freeware-produkt. Det er i dag den mest brukte krypteringprogramvaren for epost i verden. PGP er nå et kommersielt produkt, men distribueres gratis for ikke-kommersiell bruk. PGP navngir i praksis en protokoll for kryptert informasjon, signaturer og sertifikater for utveksling av offentlige nøkler, som definert i OpenPGP-standarden. En gratis programvare som følger denne standarden er GnuPG (Gnu Privacy Guard). Du kan laste ned PGP-programvare for forskjellige platformer her.

Prinsippene bak PGP

PGP benytter seg av en kombinasjon av flere av teknikker.

PGP i praksis

Her følger en liten oversikt over bruk av PGP, basert på et kommandolinje-grensesnitt. For forskjellige programvarer/versjoner vil syntaksen vaiere noe, men prinsippene er de samme. Her vises noen enkle kommandoer for PGP versjon 6.5.8 og GnuPG versjon 1.2.1 for unix.

Dersom du ikke allerede har programvaren installert, må du gjøre dette. Instruksjoner for dette følger med når du laster ned produktet. Når det er installert, benyttes det ved å kjøre programmet pgp (PGP) eller gpg (GnuPG) med diverse argumenter. For en oversikt over kommandoene kjøres pgp -h eller gpg -h. Det første man normalt vil foreta seg er å opprette et eget nøkkelpar. For å gjøre dette skriver man

konsoll #1
    For PGP:
    $ pgp -kg

    For GnuPG
    $ gpg --gen-key
  

Følg instruksjonene og svar på spørsmålene som kommer. Velg fortrinnsvis å opprette nøkler for DSS/DH-algoritmene (kalt DSA/ElGamal i GnuPG). I PGP må du først velge å lage en signaturnøkkel, og deretter svare ja på spørsmålet om du vil lage en krypteringsnøkkel som skal høre sammen med denne. Når programmet er ferdig har det opprettet et sett med nøkler som er dine. Det har også opprettet en offentlig og en hemmelig "nøkkelring", som er lagret under katalogen .pgp eller .gnupg på ditt hjemmeområde. Disse inneholder dine egne nøkler, og den offentlige nøkkelringen vil dessuten inneholde nøklene du etter hvert mottar fra andre for å kunne sende kryptert informasjon til dem.

En liten test

Du har nå alt du trenger for å kryptere i vei. Du har imidlertid ikke andre offentlige nøkler enn din egen (enda), men for å se hvordan ting fungerer kan du kryptere noe med denne, og dekryptere det igjen med din private nøkkel. Opprett en vanlig tekstfil du vil kryptere. I eksemplet bruker vi en tekstfil ved navn pgptest. Skriv

konsoll #2
    For PGP:
    $ pgp -es pgptest "bruker-id"
    
    For GnuPG:
    $ gpg -es -r "bruker-id" pgptest 
  

der bruker-id er bruker-id'en (normalt navn og/eller epost-adresse) til den som skal motta den krypterte informasjonen. I dette tilfellet er det du, så skriv din egen bruker-id, som du valgte under opprettelsen av nøklene. Dersom du satte en pass-phrase på den hemmelige nøkkelen din (anbefalt), blir du bedt om å skrive inn denne, fordi den brukes til signaturen. Programmet vil nå opprette en fil med navn pgptest.pgp, som er innholdet i pgptest kryptert med mottakerens (din) offentlige nøkkel, og signert med din private nøkkel. Skriv

konsoll #3
    $ cat pgptest.pgp
  

for å se på innholdet av filen. Som du ser er den krypterte versjonen av filen uforståelig, men den er også i et format som er dårlig egnet til for eksempel epost. For å kryptere den og lagre den med vanlige ASCII-tegn kan du legge til en "a" i opsjonslisten:

konsoll #4
    For PGP:
    $ pgp -esa pgptest "bruker-id"
    
    For GnuPG:
    $ gpg -esa -r "bruker-id" pgptest
  

Hvis du nå ser på innholdet av filen pgptest.asc, ser du den krypterte versjonen av filen i et bedre format for epost-kommunikasjon. Prøv nå å dekryptere filen igjen ved å skrive

konsoll #5
    For PGP:
    $ pgp pgptest.asc

    For GnuPG:
    $ gpg pgptest.asc
  

Dersom du har satt en pass-phrase vil du igjen bli bedt om dette, for å dekryptere med den private nøkkelen. Programmet vil protestere på at filen pgptest allerede eksisterer, og be deg om et nytt filnavn. Skriv for eksempel inn pgptest2, og se på innholdet av denne når programmet er ferdig. Den inneholder nå nøyaktig det samme som den originale pgptest. Programmet sier også fra om at signaturen på filen er gjenkjent og gyldig.

Behandling av nøkler

Det vi har gjort hittil fungerer veldig fint dersom du kun skal utveksle informasjon med deg selv. Dersom du vil at andre skal kunne kryptere informasjon til deg, må du imidlertid kunne distribuere din offentlige nøkkel. Du kan eksportere din offentlige nøkkel til en ASCII-fil med kommandoen

konsoll #6
    For PGP:
    $ pgp -kx "bruker-id" filnavn

    For GnuPG:
    $ gpg --export -a -o filnavn "bruker-id" 
  

der bruker-id igjen er din bruker-id, og filnavn er navnet på filen du vil skrive nøkkelen til. Du kan nå distribuere denne filen til de som har bruk for å sende kryptert informasjon til deg. Tilsvarende vil du motta andres offentlige nøkler, og du kan legge til disse i din nøkkelring med kommandoen

konsoll #7
    For PGP:
    $ pgp -ka filnavn

    FOR GnuPG:
    $ gpg --import filnavn
  

der filnavn er navnet på filen med nøkkelen i. Når du har lagt den til kan du sjekke om noen av signaturene som kom med nøkkelen er kjente, ved å skrive

konsoll #8
    For PGP:
    $ pgp -kc "bruker-id"

    For GnuPG:
    $ gpg --check-sigs "bruker-id"
  

Dersom den er signert av noen du stoler på, kan du velge å godta dette som bevis på at nøkkelen er ekte. Du kan selv signere andres offentlige nøkler med kommandoen

konsoll #9
    For PGP:
    $ pgp -ks "bruker-id"

    For GnuPG:
    $ gpg --sign-key "bruker-id"
  

For å vise fingeravtrykket til en nøkkel, bruk kommandoen

konsoll #10
     For PGP:
     $ pgp -kvc "bruker-id"

     For GnuPG:
     $ gpg --fingerprint "bruker-id"
  

Andre muligheter

Dette er de mest grunnleggende kommandoene, og minimumet for å kunne utveksle kryptert informasjon med andre ved hjelp av PGP/GnuPG. Det finnes flere muligheter som ikke er nevnt her, blant annet muligheten for å sette opp i hvor stor grad du stoler på hver person på nøkkelringen din. Det anbefales å se gjennom manualsidene til programmet, ved hjelp av kommandoen man pgp eller man gpg.


Languages: no flag_en Comments: 0 Aid: 228 User rating:
 
 
Last updated: 2003-02-05 Author: bjornarg Read: 9697 times