The GNU Privacy Guard
Fra Wikipedia, den frie encyklopedi.
GnuPG er en forkortelse for GNU Privacy Guard, GNUs implementasjon av OpenPGP-standarden. Hovedprogrammet i GnuPG-systemet heter «gpg».
GnuPG brukes normalt til å signere informasjon, slik at en kan verifisere at informasjonen kommer fra den man tror. En kan også bruke den til å kryptere informasjon til en gitt mottager slik at kun den gitte mottageren er i stand til å dekryptere informasjonen.
Spesielt interessant kan dette være over potensielt utrygge kommunikasjonskanaler, som f.eks. e-post. Det er nok her GnuPG benyttes mest flittig per i dag.
Teknologi
GnuPG bruker nøkkelpar. En nøkkel er offentlig og brukes til å «låse» informasjonen – en annen nøkkel er privat og brukes til å «låse opp» den samme informasjonen. For å holde diskusjonen på et allment forståelig nivå vil noe av informasjonen være forenklet, vi fokuserer på prinsippene og ikke på matematikken og den nøyaktige gangen.
Når du genererer din PGP-nøkkel med GnuPG, opprettes det to nøkler. Disse nøklene fungerer på en slik måte at det som krypteres med den ene nøkkelen, kan dekrypteres med den andre – og motsatt. Det vil si at i utgangspunktet spiller det ingen rolle hvilken av nøklene du krypterer informasjonen med. Om du krypterer med den første nøkkelen må den andre brukes til å dekryptere. Om du krypterer med den andre må den første brukes til dekryptering.
I praksis definerer vi (GnuPG) den ene nøkkelen til å være en privat nøkkel, og den andre til å være en allment tilgjengelig nøkkel.
Den allment tilgjengelige nøkkelen kan gjøres tilgjengelig for verden. Den trenger ingen beskyttelse og kan gis ut til alle og enhver.
Kryptering
Asynkron kryptering ved form av nøkkelpar er veldig ressurskrevende. Av denne grunnen benytter GnuPG en hybrid løsning som kombinerer synkron og asynkron kryptering. Helt enkelt kan vi si at synkron kryptering er når sender og mottager deler samme nøkkel, mens asynkron er når en benytter nøkkelpar. (Se kryptering for en mer inngående forklaring.) Når vi mater GnuPG med data som skal krypteres, genereres en tilfeldig synkron engangs-sesjonsnøkkel. Denne synkrone nøkkelen benyttes så til å kryptere dataene. Etterpå krypteres den synkrone nøkkelen med mottagerens offentlige, asynkrone nøkkel.
Kun personen som har tilgang på den tilhørende private nøkkelen er i stand til å dekryptere den synkrone nøkkelen som trengs for å dekryptere innholdet. Forhåpentligvis er det kun mottager som er i stand til dette.
Signering
Ved signering bruker avsender sin egen private nøkkel til å kryptere en sjekksum basert på dataene som skal signeres. Denne sjekksummen kan så mottager verifisere ved å bruke avsenders allment tilgjengelige nøkkel til å dekryptere sjekksummen og sammenligne dette med en sjekksum av de faktiske dataene. Dersom en eneste bit er endret, vil sjekksummene ikke lenger stemme overens, og GnuPG vil gi beskjed. Legg merke til at det alltid er nøkler som er en del av samme nøkkelsett som benyttes.
Et prinsipp med sjekksummer som kan være greit å ha i bakhodet, er at siden sjekksummen er mindre enn datamengden er det mulig at to ulike datasett kan generere samme sjekksum. I realiteten er mulighetene for å forfalske ting på denne måten meget små, spesielt om det er snakk om tekst som er laget for at mennesker skal kunne lese den, da det er usannsynlig at en kan klare å lage noe fornuftig med samme sjekksum.
Historie
Phil Zimmermann lagde «Pretty Good Privacy», PGP, i 1991. Dette var en krypteringspakke som orginalt var designet for menneskerettighetsanvendelser og for å verne privatlivet og beskytte sivile rettigheter i informasjonsalderen.
I 1997 dannet «Internet Engineering Task Force» (IETF (http://www.ietf.org/)) en arbeidsgruppe kalt «OpenPGP Working Group», som hadde som formål å definere en standard for den hittil proprietære protokollen.
I november 1998 ble OpenPGP standarden gitt via en IETF RFC: RFC 2440 (http://www.ietf.org/rfc/rfc2440.txt).
I 2002 sluttet Zimmermann i jobben og dannet The OpenPGP allience (http://www.openpgp.org), en sammenslutning av selskaper og organisasjoner som ønsker å yte tjenester og utvikle produkter basert på OpenPGP-standarden.
GnuPG er ment som en åpen, fri implementasjon av OpenPGP standarden. Det er lagt vekt på kompatibilitet med PGP. I mai 2002 kom versjon 1.0.7, en større release som fungerer som en full erstatning for PGP.
Oppsett
Generering av nøkler
For å generere et nøkkelpar til GnuPG bruker du kommandoen
$ gpg --gen-key
Da får du spørsmål om hvilken type nøkkel du vil lage, som regel vil du gjøre som den foreslår og velge «DSA og ElGamal». Om du velger å kun generere en DSA-nøkkel vil du ikke kunne kryptere, kun signere.
Deretter blir du spurt om nøkkelstørrelse (standardvalget er 1024), og det høyeste anbefalte er 2048. Hvilken du velger er avhengig av hvor paranoid du er, men noe mer enn 2048 er ikke anbefalt.
Det neste valget er hvor lenge nøkkelen skal være gyldig, også her er det et spørsmål om hvor paranoid du er, da dette effektivt tvinger deg til å lage en ny nøkkel etter dette tidsrommet.
Så blir du spurt om navn, e-postadresse og kommentar, disse blir til sammen din brukerid.
Til slutt blir du spurt om et passord – bruk gjerne en setning. Husk også å sørge for at den er vanskelig å gjette, da en person som har tilgang til nøkkelen og kjenner passphrasen kan sende e-post som ser ut som den kommer fra deg, lese kryptert post sendt til deg osv.
Nå vil GnuPG generere nøkkelparet ditt, og siden det trengs mye tilfeldig data kan det være en fordel om du jobber litt i et annet vindu mens dette skjer.
Vanlige brukstilfeller
Gjennom brukstilfellene bruker vi e-postadressen foo@bar.org som eksempel på e-postadresse og 56789ABC som eksempel på en nøkkel-ID.
Eksportere nøkler
For å eksporte nøkkelen som heter foo@bar.org kan en skrive kommandoen
$ gpg --send-keys foo@bar.org
Dette vil sende nøkkelen til den nøkkeltjeneren som er gitt som standard. Dersom en har lyst kan en også spesifisere hvilken nøkkeltjener du skal sende til, f.eks. kan en sende til nøkkeltjeneren subkeys.pgp.net skriver en
$ gpg --keyserver subkeys.pgp.net --send-keys foo@bar.org
Se ellers avsnittet om nøkkeltjenere nedenfor.
En annen vanlig måte er å eksportere nøkkelen sin i ASCII-format slik at en lett kan gi den videre i f.eks. e-post eller via en side på verdensveven. For å eksportere nøkkelen til filen minnokkel.asc skriver en
$ gpg --armor --export foo@bar.org > minnokkel.asc
Denne filen kan en så dele med andre mennesker.
Importere nøkler
Det er flere måter å importere nøkler på. En kan gå via en nøkkeltjener, forutsatt at nøkkelen en leter etter finnes på nøkkeltjeneren. En kan for eksempel skrive
$ gpg --search-key foo@bar.org --keyserver subkeys.pgp.net
GnuPG vil da søke etter foo@bar.org på den gitte nøkkeltjeneren. En trenger ikke søke på e-postadresser, skriv gjerne inn fornavn på personer, domener eller lignende men vær obs på at dette kan gi mange treff.
En bedre måte å importere en nøkkel på via en nøkkeltjener er dersom en kjenner ID-en til nøkkelen. ID-er er unike og en vil kun få akkurat den nøkkelen en ønsker. Skriv
$ gpg --recv-keys 567989ABC --keyserver subkeys.pgp.net
GnuPG vil da importere nøkkelen med id 56789ABC.
Dersom du har mottatt en fil som inneholder en PGP-nøkkel, f.eks. filen ola.asc, kan du importere denne ved å skrive
$ gpg --import ola.asc
Om du ser en webside med en nøkkel gitt i ASCII-tekst er det ikke nødvendig å gå via en fil for å importere denne. En kan kopiere den til utklippstavlen og så skrive
$ gpg --import
Programmet vil da vente på at brukeren skal taste inn data. En kan nå lime inn nøkkelen her og trykke CTRL+D (End of File) for å merke enden på inndataene. Om en har fryktelig lyst er det fullt mulig å skrive av nøkkelen uten å gå via utklippstavlen, selv om dette nok kun egner seg for folk med litt for mye fritid. :)
Signere filer
Dette kan også gjøres på en rekke ulike måter, men en vanlig måte er å lage en separat signaturfil i stedet for å signere datene direkte. Det er denne måten som oftest benyttes av prosjekter som gir ut filer hyppig o.l. For å lage en signatur til filen datafil, skriver en
$ gpg --detach-sign datafil
GnuPG vil da opprette filen datafil.sig. Du vil bli spurt om passordet til din private nøkkel om du har et.
Dersom du vil signere dataene direkte, noe som er greit om du signerer binærdata, kan en skrive
$ gpg --sign datafil
GnuPG vil da opprette filen datafil.gpg som vil inneholde både dataene fra datafil, og en signatur som GnuPG kan benytte for å verifisere dataene.
Dersom du vil signere en fil i klartekst, noe som er nyttig for posting på nyhetsgrupper og andre steder der inline-signaturer kan være praktiske, kan en skrive
$ gpg --clearsign datafil
GnuPG vil da opprette filen datafil.asc som vil inneholde selve teksten fra datafil, samt en signatur kodet som klartekst som GnuPG kan bruke til å verifisere teksten.
| Mange anser det som dårlig netikette å bruke inline-signaturer på nyhetsgrupper og i e-post. Det er meningen at dette skal gjøres med MIME istedenfor, slik at signaturene ikke "forsøpler" innholdet. En hel del finner dem forstyrrende. |
Verifisere signaturer
For å verifisere en signatur gitt i signaturfilen datafil.sig kan en gi kommandoen
$ gpg --verify datafil.sig
GnuPG vil da automatisk anta at dataene befinner seg i en fil kalt datafil (altså uten .sig). Det er mulig å spesifisere andre filnavn dersom dette ikke skulle være tilfellet.
Dersom en har en fil med inline-signatur som heter datafil.gpg, kan en
verifisere signaturen ved å skrive kommandoen gpg --verify
datafil.gpg
Kryptere filer
Vi har en fil med data kalt datafil, og skal sende denne filen til en kar med e-postaddresse foo@bar.org. Det forutsettes at en allerede har importert nøkkelen til foo@bar.org. Vi krypterer med kommandoen
$ gpg -r foo@bar.org --encrypt datafil
GnuPG vil nå opprette en ny kryptert fil kalt datafil.gpg. Denne filen er kun leselig for eieren av den private nøkkelen. Den originale filen vil være uberørt slik at en fremdeles har tilgang på en ukryptert versjon av materialet.
| Ingen andre enn foo@bar.org er istand til å dekryptere den krypterte filen. Heller ikke den som krypterte fila. |
Dekryptere filer
Om en har den krypterte filen datafil.gpg og eier den private nøkkelen som er del av nøkkelparet som ble brukt til å kryptere filen, er en i stand til å dekryptere den. La oss si vi vil dekryptere til filen datafil. En kan i så tilfelle kjøre kommandoen
$ gpg --decrypt datafil.gpg > datafil
GnuPG vil spørre deg om passordet til din private nøkkel før filen blir dekryptert.
Kryptering og signering
Vi går igjen ut fra at vi har den ukrypterte datafilen datafil, og skal sende denne filen til en kar med e-postaddresse foo@bar.org. foo@bar.org finnes allerede i nøkkelringen vår, da vi på forhånd har importert denne nøkkelen. Vi gir kommandoen
$ gpg -r foo@bar.org --encrypt --sign datafil
GnuPG vil nå opprette en kryptert kopi av datafil kalt datafil.gpg. Denne filen kan dekrypteres på vanlig måte, og GnuPG vil da automagisk kontrollere at signaturen også stemmer.
Kryptere kun med passord
Det er en mulighet å kryptere en fil på en slik måte at en kun beskytter den med et passord. Filen krypteres symmetrisk, om en ønsker det har en mulighet for å spesifisere krypteringsalgoritme.
Det bør nevnes at dette ikke er veldig sikkert, mye av funksjonaliteten til GnuPG faller bort ved slik kryptering. Det kan allikevel være ønskelig i tilfeller der en ikke har tilgang til mottagers offentlige nøkkel, eller om en ønsker å distribuere en fil kryptert til flere mottagere med samme passord for dekryptering, og sikkerhet ikke er toppriortert mens det samtidig er ønskelig med en form for kryptering. Filer kryptert slik er sårbare for såkalt «brute-force» angrep.
Om en vil kryptere datafil symmetrisk med passord gir en kommandoen
$ gpg -c datafil
GnuPG vil spørre deg om et passord som du må gjenta en gang for å være på den sikre siden. Deretter lages det en fil datafil.gpg med det krypterte inneholdet. Den ukrypterte filen datafil vil fremdeles være tilgjenglig.
Filer som er på denne måten dekrypteres på vanlig måte med gpg --decrypt datafil.gpg > datafil. Ved dekryptering vil en bli spurt om passord.
GnuPG og e-post
Et av de vanligste bruksområdene for GnuPG er e-post. Noen e-postklienter har innebygd støtte for å snakke sammen med GnuPG slik at den kan produsere krypterte og/eller signerte mailer når brukeren måtte ønske det.
For en rekke andre mailklienter finnes det tillegg for å gjøre dette. GnuPG FAQ-en (http://www.gnupg.org/(en)/documentation/faqs.html#q4.15) har en liste over en del klienter som støtter bruk av GnuPG, samt om støtten er innebygd eller via tillegg.
GnuPG og troverdighetsnettverk
Troverdighetsnettverk
Troverdighetsnettverk (engelsk: «web of trust») er et sentralt begrep dersom en aktivt benytter GnuPG til å kommunisere sikkert. Ideelt sett burde en personlig verifisert nøklene til alle en kommuniserte med. I virkeligheten er dette sjelden praktisk mulig, og derfor kan en bygge opp et troverdighetsnettverk for å avgjøre sannsynligheten for at en gitt signatur er gyldig.
Nettverket består av deg selv og personer du kommuniserer med. Når du legger til en nøkkel med GnuPG vil denne nøkkelen være en del av ditt troverdighetsnettverk. Gjennom å verifisere og signere andres nøkler vil du få beskjed om at deres signaturer er gyldige ved kontroll av innhold. En har også mulighet for å rangere påliteligheten til andre, det vil si hvor mye en stoler på at nøkler som han har signert er verifisert skikkelig. Dermed kan en få verifisert nøkler som en ikke har signert direkte selv også. Pålitelighet er privat, og dine verdier er ikke synlig for andre og blir ikke med når du eksporterer nøkkelen.
Signere nøkler
Vi bruker e-postadressen foo@bar.org som eksempel på e-postadresse og 56789ABC som eksempel på en nøkkel-ID.
Dersom en har lyst til å signere nøkkelen med nøkkelid 56789ABC må en først inn i redigeringsmodus for den gitte nøkkelen
$gpg --edit-key 56789ABC $gpg --edit-key foo@bar.org $gpg --edit-key foo
Alle de tre eksemplene over burde fungere, men om du f.eks. har to brukere med e-postadresser som begynner på foo kan det bli problemer med sistnevnte. Å spesifisere på nøkkelid vil alltid virke, for å få en liste over nøkler kan du sende kommandoen $gpg --list-keys
Etter at du har gitt --edit-key kommandoen tar GnuPG deg inn i et skall der du kan gi endel kommandoer relatert til nøkkelen. For en liste over gyldige kommandoer kan en skrive help i skallet.
For å signere en nøkkel gis kommandoen sign. GnuPG vil da ta deg gjennom en dialog der den vil forsikrer seg om at du vil signere nøkkelen.
Til slutt gir du kommandoen quit for å avslutte. Om det er gjort endringer vil GnuPG spørre om du ønsker å lagre disse. Dette svarer du ja på om du signert en nøkkel.
Til slutt bør du sende nøkkelen du har signert til en nøkkeltjener eller gjøre den tilgjengelig på annet vis slik at signaturen er oppdatert.
Trekke tilbake signaturer
Dersom en ønsker å trekke tilbake en signatur, må en gå inn i redigeringsmodus for den gitte nøkkelen.
$gpg --edit-key 56789ABC
I det nye skallet som GnuPG gir kan du skrive revsig for å trekke tilbake signaturen. GnuPG gir deg anledning til å velge en grunn og eventuelt knytte en kommentar til tilbaketrekningen.
Avslutt ved å skrive quit, og svar ja når GnuPG spør om den skal lagre. Nøkkelen bør sendes til en nøkkeltjener eller distribueres slik at folk kan se at signaturen er trukket tilbake.
Oppdatere pålitelighet
For å sette påliteligheten til en person, altså hvor mye du stoler på at vedkommende er skikket til å verifisere og signere andres nøkler, må du igjen inn i redigeringsmodus for nøkkelen til den gitte personen.
$gpg --edit-key 56789ABC
I det nye skallet gir du kommandoen trust. Du vil da få 5 ulike valg knyttet til pålitelighet
1 = Don't know 2 = I do NOT trust 3 = I trust marginally 4 = I trust fully 5 = I trust ultimately
Det understrekes at pålitelighet (en: «trust») er en privat ting. Den eksporteres ikke sammen med nøkler, og ingen andre enn eieren av nøkkelringen skal være i stand til å se trust verdier på nøklene.
1 er ment brukt når du er usikker på nøkkelen, og er også standardverdi på nye nøkler som importeres til nøkkelringen.
2 brukes når en ikke stoler på nøkkelen, f. eks. om en vet at personen som eier ikke er i stand til å signere nøkler på en forsvarlig måte.
3 er et utrykk for at en stoler litt, men ikke helt og fullt, på en persons evne til å skikkelig verifisere og signere nøkler.
4 skal brukes når en stoler fullt ut på at nøkkelens eier er i stand til å verifisere nøkler opp mot eier og forstår komplikasjonene ved nøkkelsignering.
5 er kun ment brukt for egne nøkler der den private nøkkelen også er tilgjengelig. En må kunne stole på seg selv. Standardverdi på nøkler der privat nøkkel er tilgjenglig.
Pålitelighet er en grei måte å få en viss sikkerhet selv på nøkler en ikke har signert personlig. Dersom en nøkkel f.eks. er signert av tre personer du stoler marginalt på, eller evt. én person du stoler helt på, kan nøkkelen regnes som sikker. Det er mulig å stille på disse verdiene for å tilpasse GnuPG til personlige sikkerhetsbehov.
Signeringstreff
Hva er deltagerens rolle:
- Generer ett nøkkelsett.
- Send din offentlige nøkkel til en dedikert nøkkeltjener.
- Send offentlig informasjon om din nøkkel til koordinatoren.
- Still opp på treffet.
- Kontroller din nøkkelinformasjon.
- Kontroller alle andres nøkkelinformasjon – det er «fingeravtrykket» til nøkkelen som er viktig å undersøke.
- Kontroller alle andres identifikasjon for identiteter du vil signere.
- Last ned offentlige nøkler fra nøkkeltjener.
- Signer alle identiteter som du har verifisert.
- Last opp signerte nøkler til nøkkeltjener.
Hva bør deltagere ta med til treffet:
- Deg selv - du kan ikke delta uten å være fysisk tilstede.
- To typer identifikasjon med bilde - f.eks. førerkort og bankkort.
- GnuPG nøkkel-ID, nøkkeltype, hexadesimalt fingeravtrykk og nøkkellengde.
- En penn eller blyant.
| Å signere nøkkelen til noen du ikke har møtt i person undergraver poenget med signering av nøkler – ikke gjør det. |
Nøkkeltjenere
Nøkkeltjenere er sentrale tjenere som bruker kan bruke for å distribuere de allment tilgjengelig nøklene sine. Disse byr på endel fordeler sammenlignet med alternative distribusjonsmetoder.
Det er nemlig tett integrert med GnuPG og en kan enkelt oppdatere og synkronisere nøkler slik at en f.eks. får med nye signaturer på nøklene eller oppdager at en nøkler er tilbekalt.
Nøkkeltjenere distribuerer nøkler seg imellom ved jevne mellomrom, slik at brukere kan hente nøkler fra en nøkkeltjener nær brukeren.
Tiltak ved tap eller kompromittering av privat nøkkel
Tilbakekallingssertifikat
Ved å generere og lagre et tilbakekallingssertifikat så får du muligheten til å tilbakekalle din offentlige nøkkel i tilfelle du mister tilgang til din private nøkkel; fordi den har blitt kompromittert, overtatt av andre, du har glemt pass-setningen eller det er feil på lagringsmediet. Dersom du vil ha muligheten til å tilbakekalle din offentlige nøkkel når du ikke lenger har tilgang til din private nøkkel, bør du generere et tilbakekallingssertifikat og lagre det på en trygg måte. Du bør også skrive ut en kopi av tilbakekallingssertifikatet slik at det kan legges inn og benyttes i tilfellet det media du lagret det på feiler.
Dersom ditt tilbakekallingssertifikat blir kompromittert vil den som har kompromittert det kunne deaktivere din nøkkel. Dog, den personen vil ikke kunne kompromittere din private nøkkel gjennom sin tilgang til ditt tilbakekallingssertifikat. Derfor vil det ikke være mulig for denne personen å generere falske signaturer, dekryptere meldinger med ditt nøkkelsett eller på noen som helst annen måte fremstille seg som eier av ditt nøkkelsett. Siden det eneste som kan komme ut av et kompromittert tilbakekallingssertifikat er at ditt nøkkelsett kan bli deaktivert, er det en god ting å generere et slikt.
GnuPG-kommandoen for å generere et tilbakekallingssertifikat er:
$ gpg --output revcert.asc --gen-revoke
For å tilbakekalle en nøkkel, bruk «--edit»-kommandoen. Hvis du har en ide om hvordan eller når nøkkelen din var kompromittert og du genererte et tilbakekallingssertifikat i forbindelse med nøkkelgenereringen, vil du muligens generere et nytt tilbakekallingssertifikat. Dette kan være tilfellet siden openPGP-standarden tillater deg å spesifisere grunnen for tilbakekallingen og i tillegg gir deg mulighet til å legge til kommentarer i fritekst. Distribusjon av et tilbakekallingssertifikat med denne tilleggsinformasjonen er å foretrekke fremfor det generiske sertifikatet som ble generert i forbindelse med nøkkelgenereringen.
Sikkerhet
Et farlig moment med tanke på sikkerhet er dersom nøkler ikke blir verifisert skikkelig før de signeres. Dersom folk ikke personlig sjekker at nøkkelen virkelig tilhører den riktige personen, vil det føre til at det bygges nettverk der folk har en falsk følelse av trygghet. I virkeligheten vil det gjerne bare være bygd på overfladiske signaturer og en kan lett utgi seg for å være noen andre. Troverdighetsnettverk prøver å bøte på dette ved at en kan spesifisere om hvorvidt en stoler på at brukere signerer andre nøkler riktig.
For å få et ekstra lag med sikkerhet er det viktig at brukerene lager skikkelige passord slik at det er vanskeligere for inntrengere å knekke koden dersom uhellet er ute og den private nøkkelen har kommet på avveie.
Det å lage seg et tilbakekallingssertifikat gir en mulighet til å kalle tilbake nøkkelen dersom en den skulle bli kompromittert. Det anbefales å lage et slikt og gjerne lagre den på et eksternt medium som et sikkerhetstiltak.
Eksterne linker
- The GNU Privacy Guard (http://www.gnupg.org/)
- TLUG norsk GnuPG guide (http://www.tlug.no/index.php/news/guide/linux_guide_bruk_av_gnu_privacy_guard)
- GnuPG Keysigning Party HOWTO (http://www.cryptnet.net/fdp/crypto/gpg-party.html)
Se også Kryptering


