Gentoo Logo

GnuPG Gentoo brugervejledning

Indhold:

1.  Introduktion

Hvad denne vejledning indeholder

Denne vejledning regner med at du har nogenlunde kendskab til public-key kryptografi, kryptering, og digitale underskrifter. Hvis dette ikke er tilfældet, så spring til Offentlig nøglekryptografi eller tag et kig på GnuPG håndbogen (engelsk) kapitel 2, og så kom tilbage.

Denne vejledning vil lære dig hvordan man installerer GnuPG, hvordan man laver et nøglepar, hvordan man tilføjer nøgler til din nøglering, hvordan man tilføjer sin offentlige nøgle til en nøgle-server og hvordan man signerer, dekrypterer, verificerer eller dekoder meddelelser, som du sender eller modtager. Du vil også lære hvordan man krypterer filer på din lokale computer for at beskytte dem mod at blive læst af andre personer.

Installation af den nødvendige software

På et meget basalt niveau skal du emerge gnupg. Mange programmer i dag har en slags understøttelse for gpg, så at have crypt i dine USE-flag er sikkert en god idé. Hvis du ønsker at benytte en email klient, som kan bruge gnupg, kan du anvende pine (emerge pinepgp), mutt (emerge mutt), Mozilla/Netscape Mail, evolution (evolution er en GNOME klon af Microsoft Outlook) og KDEs egen KMail (KMail er en del af kdepim pakken).

Kgpg er måske af interesse hvis du bruger KDE. Dette lille program giver dig mulighed for at generere nøglepar, importere nøgler fra ASCII filer, signere og importere nøgler, eksportere nøgler, og et par flere nyttige ting.

2.  At generere din nøgle og tilføje den til din offentlige nøglering

At generere din nøgle

For at generere din nøgle, bare kør gpg --gen-key. Første gang du kører den, vil den lave nogle mapper; kør den igen, og den vil lave de aktuelle nøgler:

Kode oversigt 2.1: genereringsprocessen af dine nøgler

$ gpg --gen-key
gpg (GnuPG) 1.0.7; Copyright (C) 2002 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.

Please select what kind of key you want:
 (1) DSA and ElGamal (default)
 (2) DSA (sign only)
 (4) ElGamal (sign and encrypt)
 (5) RSA (sign only)
 Your selection? 1

Her kan du vælge den type nøgle du vil bruge. De fleste brugere vil vælge den normale DSA og ElGamal. Det næste er størrelsen på din nøgle - husk at jo større den er, desto bedre, men brug ikke mere end 2048 med DSA/ElGamal nøgler. Normalt 1024 er mere end nok til almindelige emails.

Efter størrelse kommer udløbsdatoen. Her er lavest det bedre, men de fleste brugere kan bruge en nøgle, som aldrig udløber eller fra 2 til 3 år.

Kode oversigt 2.2: Valg af størrelse på nøgle

DSA keypair will have 1024 bits.
About to generate a new ELG-E keypair.
            minimum keysize is  768 bits
            default keysize is 1024 bits
  highest suggested keysize is 2048 bits
  What keysize do you want? (1024) 2048
Requested keysize is 2048 bits       
Please specify how long the key should be valid.
       0 = key does not expire
       <n>= key expires in n days
       <n>w = key expires in n weeks
       <n>m = key expires in n months
       <n>y = key expires in n years
       Key is valid for? (0) 0
Key does not expire at all

Nu er det så tid til at indtaste nogle personlige informationer omkring dig selv. Hvis du har planlagt at sende din offentlige nøgle til andre mennesker, skal du indtaste din rigtige email-adresse her.

Kode oversigt 2.3: Indtastning af bruger information

Is this correct (y/n)? y
                      
You need a User-ID to identify your key; the software constructs the user id
from Real Name, Comment and Email Address in this form:
"Henrik Hansen (Digteren) <henrik@opdigtetnet.dk>"

Real name: John Doe
Email address: john@nowhere.someplace.flick
Comment: The Real John Doe
You selected this USER-ID:
"John Doe (The Real John Doe) <john@nowhere.someplace.flick>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O 
You need a Passphrase to protect your secret key.    

Enter passphrase: 

Nu skal du indtaste koden 2 gange. Det er en god idé at bruge en stærk kode. Hvis nogen får fat på din private nøgle og bryder din kode, vil de være istand til at sende beskeder signeret af *dig*, som alle vil tro vitterligt er signeret af dig.

Nu vil GnuPG generere din nøgle. Hvis du flytter med musen eller spiller en mp3 i baggrunden, vil det hjælpe på hastigheden, da den genererer en masse tilfældig data.

Generere et tilbagetrækkelsescerfifikat

Vigtigt: Denne del er meget vigtig, og du skal gøre det NU.

Efter du har lavet dine nøgler bør du lave et tilbagetrækkelsescertifikat. Ved at gøre dette, bliver du istand til at tilbagetrække dine nøgler i tilfælde af at noget slemt sker for dine nøgler (nogen får fat på din nøgle/kodeord)

Kode oversigt 2.4: Generering af tilbagetrækkelsescertifikat

$ gpg --list-keys
/home/humpback/.gnupg/pubring.gpg
---------------------------------
pub  1024D/75447B14 2002-12-08 John Doe (The Real John Doe) <john@nowhere.someplace.flick>
sub  2048g/96D6CDAD 2002-12-08

$ gpg --output revoke.asc --gen-revoke 75447B14

sec  1024D/75447B14 2002-12-08   John Doe (The Real John Doe) <john@nowhere.someplace.flick>

Create a revocation certificate for this key? y
Please select the reason for the revocation:   
0 = No reason specified
1 = Key has been compromised
2 = Key is superseded
3 = Key is no longer used
Q = Cancel
(Probably you want to select 1 here)
Your decision? 1
Enter an optional description; end it with an empty line:
> Someone cracked me and got my key and passphrase
>
Reason for revocation: Key has been compromised
Someone cracked me and got my key and passphrase
Is this okay? y

You need a passphrase to unlock the secret key for
user: "John Doe (The Real John Doe) <john@nowhere.someplace.flick>"
1024-bit DSA key, ID 75447B14, created 2002-12-08

ASCII armored output forced.
Revocation certificate created.

Please move it to a medium which you can hide away; if Mallory gets
access to this certificate he can use it to make your key unusable.
It is smart to print this certificate and store it away, just in case
your media become unreadable.  But have some caution:  The print system of
your machine might store the data and make it available to others!

gpg --list-keys-kommandoen vil vise dine nøgler i din offentlige nøglering. Du kan bruge det til at se ID'en af din nøgle så du kan lave tilbagetrækkelsescertifikatet. Nu er det en god idé at kopierer hele .gnupg-mappen og tilbagetrækkelseiscertifikatet (i ASCII - revoke.asc) til at sikkert medium (2 disketter eller en CDR, som du gemmer et sikkert sted). Husk at revoke.asc kan blive brugt til at tilbagetrække din nøgle og lave den ubrugelig i fremtiden.

Bemærk: Hvis du har adskillige email-adresser, som du vil benytte med denne nøgle, kan du køre gpg --edit-key DIN_ID og så adduid-kommandoen. den vil så spørge dig om dit navn, email og kommentar af din nummer 2 ID, du vil benytte.

Eksportering af nøgler

For at eksportere din nøgle, skriver du gpg --armor --output john.asc --export john@nowhere.someplace.flick. Du kan nærmest altid bruge ID'et af din nøgle eller noget, der identificerer nøglen (her bruger vi email-adressen). Nu har vi en john.asc, som kan sendes til venner, eller et sted på en webside, så folk kan kommunikere sikkert med ham.

Importering af nøgler

For at tilføje filer til din offentlige nøglering, skal du først importere den, så tjekke dets fodspor, og efter du har verificeret fodsporet, bør du validere det.

Bemærk: Du bør være mere end sikker når du verificerer nøgler. Det er nemlig en af de svage punkter af en offentlig nøgle-kryptering.

Nu vil vi tilføje Luis Pinto's (en af mine venners) offentlige nøgle til vores nøglering. Efter at ringe til ham og spørge ham om hans nøgles fodspor, sammenligner jeg fodsporet med det jeg får fra kommandoen fpr. Eftersom nøglen er autentisk, tilføjer jeg den til nøgleringen. I dette opsatte tilfælde, vil Luis's nøgle udløbe 2003-12-01, og jeg bliver derfor spurgt om jeg vil have mit signatur til at udløbe det samme tidspunkt.

Kode oversigt 2.5: Importering og signering af nøgler

$ gpg --import luis.asc
gpg: key 462405BB: public key imported
gpg: Total number processed: 1
gpg:               imported: 1
$ gpg --list-keys
/home/humpback/.gnupg/pubring.gpg
---------------------------------
pub  1024D/75447B14 2002-12-08 John Doe (The Real John Doe) <john@nowhere.someplace.flick>
sub  2048g/96D6CDAD 2002-12-08

pub  1024D/462405BB 2002-12-01 Luis Pinto <lmpinto@student.dei.uc.pt>
      uid                            Luis Pinto <lmpinto@dei.uc.pt>
sub  4096g/922175B3 2002-12-01 [expires: 2003-12-01]

$ gpg --edit-key lmpinto@dei.uc.pt
gpg (GnuPG) 1.0.7; Copyright (C) 2002 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.


gpg: checking the trustdb
gpg: checking at depth 0 signed=0 ot(-/q/n/m/f/u)=0/0/0/0/0/1
pub  1024D/462405BB  created: 2002-12-01 expires: 2003-12-01 trust: -/-
sub  4096g/922175B3  created: 2002-12-01 expires: 2003-12-01
(1)  Luis Pinto <lmpinto@dei.uc.pt>
(2). Luis Pinto <lmpinto@student.dei.uc.pt>

Command> fpr
pub  1024D/462405BB 2002-12-01 Luis Pinto <lmpinto@dei.uc.pt>
           Fingerprint: F056 3697 ADE3 CF98 B80B  8494 0AD3 E57B 4624 05BB
           
Command> sign
Really sign all user IDs? y
                         
pub  1024D/462405BB  created: 2002-12-01 expires: 2003-12-01 trust: -/-
           Fingerprint: F056 3697 ADE3 CF98 B80B  8494 0AD3 E57B 4624 05BB

           Luis Pinto <lmpinto@dei.uc.pt>
           Luis Pinto <lmpinto@student.dei.uc.pt>

This key is due to expire on 2003-12-01.
Do you want your signature to expire at the same time? (Y/n) Y
How carefully have you verified the key you are about to sign actually belongs
to the person named above?  If you don't know what to answer, enter "0".

 (0) I will not answer. (default)
 (1) I have not checked at all.
 (2) I have done casual checking.
 (3) I have done very careful checking.

 Your selection? 3
Are you really sure that you want to sign this key
with your key: "John Doe (The Real John Doe) <john@nowhere.someplace.flick>"

I have checked this key very carefully.

Really sign? y
            
You need a passphrase to unlock the secret key for
user: "John Doe (The Real John Doe) <john@nowhere.someplace.flick>"
1024-bit DSA key, ID 75447B14, created 2002-12-08

Command> check
uid  Luis Pinto <lmpinto@dei.uc.pt>
sig!3       462405BB 2002-12-01   [self-signature]
sig!3       75447B14 2002-12-08   John Doe (The Real John Doe) <john@nowhe
uid  Luis Pinto <lmpinto@student.dei.uc.pt>
sig!3       462405BB 2002-12-01   [self-signature]
sig!3       75447B14 2002-12-08   John Doe (The Real John Doe) <john@nowhe

3.  Udveksling af nøgler med en nøgle-server

Afsendelse af nøgler til nøgle-server

Nu da vi har din nøgle, er det formodentlig en god idé, at sende den til en nøgle-server. Der er masser af nøgle-servere i verden, og de fleste af dem udveksler nøgler imellem dem. Her skal vi sende Luis's nøgle til pgp.mit.edu nøgle-serveren. Den bruger HTTP, så hvis du har brug for en proxy til HTTP trafik, glem ikke at sætte den. (export http_proxy=http://proxy_host:port/). Kommandoen for at sende nøglen er: gpg --keyserver pgp.mit.edu --keyserver-options honor-http-proxy --send-key 75447B14 hvor 75447B14 er nøgle ID. Hvis du ikke har brug for en HTTP Proxy til HTTP trafik kan du fjerne: --keyserver-options honor-http-proxy.

Du kan også sende andre folks nøgler, som du har signeret til nøgle-serveren. Vi kunne sende Luis Pinto's nøgle til nøgle-serveren. På denne måde kan nogen som stoler på din nøgle bruge det signatur, som du har lagt på nøgle-serveren, til at stole på Luis's Nøgle.

Afhentning af nøgler fra nøgle-server

Nu vil vi så prøve at søge for Gustavo Fellisbertos nøgle og tilføje den til John Does nøglering (i tilfælde af at du ikke har opdaget det endnu, er Gustavo Felisberto personen, som har skrevet denne guide :) ).

Kode oversigt 3.1: Søgning på nøgler fra nøgle-server

$ gpg --keyserver pgp.mit.edu --keyserver-options honor-http-proxy --search-keys humpback@felisberto.net
gpg: searching for "humpback@felisberto.net" from HKP server pgp.mit.edu
Keys 1-5 of 5 for "humpback@felisberto.net"
(1)	Gustavo Felisberto (apt-get install anarchy) <humpback@felisberto.net> 1024
        created 2002-12-06, key B9F2D52A
(2)	Gustavo Felisberto <humpback@altavista.net> 1024
        created 1999-08-03, key E97E0B46
(3)	Gustavo A.S.R. Felisberto <humpback@altavista.net> 1024
        created 1998-12-10, key B59AB043
(4)	Gustavo Adolfo Silva Ribeiro Felisberto <humpback@altavista.net> 1024
        created 1998-08-26, key 39EB133D
(5)	Gustavo Adolfo Silva Ribeiro Felisberto <humpback@altavista.net> 1024
        created 1998-06-14, key AE02AF87
        Enter number(s), N)ext, or Q)uit >1
gpg: requesting key B9F2D52A from HKP keyserver pgp.mit.edu
gpg: key B9F2D52A: public key imported
gpg: Total number processed: 1
gpg:               imported: 1

Som du kan se i svaret fra nøgle-serveren, har jeg et par nøgler indrykket på nøgle-serveren, men jeg bruger kun B9F2D52A for tiden. Nu kan John Doe få den og signere den, hvis han stoler på den.

4.  At bruge en GPG agent

Hvad er en GPG agent?

Der er tilfælde, når du arbejder med specifikke applikationer, hvor du bruger din GPG nøgle meget ofte, hvilket betyder at du skal taste dit kodeord mange gange. Adskillige applikationer understøttede før i tiden en mekanisme der cachede kodeord for at gøre livet nemmere for brugere, men dette gav desværre ikke mulighed for at dele den cache på tværs af programmer (hvor sikkert ville det være?) og tvang applikationer til at opfinde hjulet igen og igen.

En GPG agent er en separat applikation som GPG bruger til at cache kodeord på en standardiseret og sikker måde. Den tillader applikationer at bruge GPG samtidigt: hvis du indtaster dit kodeord imens du arbejder med en applikation, så kan den anden applikation arbejde uden at gentage forespørgslen om kodeordet for at låse op for nøglen - det er hvis GPG agenten er sat sådan op, selvfølgelig.

Gentoo tilbyder et par GPG agentapplikationer. app-crypt/gpg-agent kan betragtes som den mest refererede og er den vi vil bruge i dette dokument.

At installere og konfigurere gpg-agent og pinentry

Du skal selvfølgelig installere gpg-agent og pinentry, som er den hjælpe applikation som gpg-agent bruger til at forespørge kodeordet i et grafisk vindue. Det kommer i tre varianter: det kan få et vindue til at springe op ved brug af gtk+, Qt og curses bibliotekerne (afhængig af de USE flag du sætter når du emerger den).

Kode oversigt 4.1: At installere gpg-agent og pinentry

# emerge gpg-agent pinentry

Lav derefter en fil der hedder ~/.gnupg/gpg-agent.conf og skriv de følgnede linjer som definerer standard udløbstid på kodeordet (f.eks. 30 minutter) og den applikation der skal kaldes når kodeordet skal hentes den første gang (f.eks. Qt versionen af pinentry).

Kode oversigt 4.2: At redigere ~/.gnupg/gpg-agent.conf

pinentry-program /usr/bin/pinentry-qt
no-grab
default-cache-ttl 1800

Konfigurer nu GnuPG til at bruge en agent når det er passende. Rediger ~/.gnupg/gpg.conf og tilføj den følgende linje:

Kode oversigt 4.3: At sætte GnuPG op til at bruge en GPG agent

use-agent

Nu er dit system (næsten) klar til at bruge GPG agenten.

Automatically Starting the GPG Agent

Hvis du bruger KDE som grafisk miljø, så rediger /usr/kde/3.x/env/agent-startup.sh (globalt) eller ~/.kde/env/gpgagent.sh (på bruger basis) og tilføj den følgende kommando for at få KDE til at starte GPG agenten automatisk:

Kode oversigt 4.4: At få KDE til automatisk at starte GPG agenten

eval "$(gpg-agent --daemon)"

Hvis du bruger et andet grafisk miljø, så sæt den linje (den samme som nævnt ovenfor) i ~/.xinitrc (hvis du bruger startx) eller ~/.xsession (hvis du bruger XDM/GDM/KDM/...).

5.  Arbejde med dokumenter

Kryptering og signering

Lad os antage, at du har en fil du ønsker at sende til Luis nu. Du kan kryptere den, signere den, eller kryptere og signere den. Kryptering betyder at kun Luis vil være istand til at åbne den, signaturet fortæller luis at det vitterligt var dig, der lavede filen.

De næste 3 kommandoer vil bare gøre det at, kryptere, signere og kryptere/signere.

Kode oversigt 5.1: Krypterer og underskrivelse af filer

$ gpg --output doc.gpg --encrypt --recipient lmpinto@dei.uc.pt doc_to_encrypt
$ gpg --output doc.gpg --sign --recipient lmpinto@dei.uc.pt doc_to_sign
$ gpg --output doc.gpg --encrypt --sign --recipient lmpinto@dei.uc.pt doc_to_encrypt_and_sign

Det her vil lave binære filer, men hvis du ønsker at lave ASCII-filer, bare tilføj --clearsign i starten af kommandoen.

Dekryptering og verificering af signaturer

Antaget at du har modtaget en fil der er krypteret til dig, vil kommandoen til at dekryptere den være: gpg --output document --decrypt encrypted_doc.gpg. Det vil dekryptere dokumentet og verificere signaturen (hvis der er en)

Advancerede egenskaber

Der er nogle spændende advancerede egenskaber i GnuPG. For at finde dem, åben ~/.gnupg/gpg.conf-filen.

Kode oversigt 5.2: ~/.gnupg/gpg.conf

#keyserver x-hkp://pgp.mit.edu
#keyserver-options auto-key-retrieve include-disabled include-revoked

Søg efter de to ovenstående linjer og afkommentere dem. Dette vil gøre, at hver gang GnuPG skal tjekke en underskrift og den ikke finde den offentlige nøgle på den lokale nøglering, vil den kontakte nøgle-serveren hos pgp.mit.edu og den vil prøve at hente den fra der.

En anden interessant kommando er gpg --refresh-keys. Dette vil kontakte nøgleserveren, som er defineret i options-filen og genopfriske offentlige nøgle i din lokale nøglering fra der, ved at søge efter tilbagekaldte nøgler, nye ID'er og nye underskrifter på nøgler. Du bør dog køre denne én eller to gange om måneden, så, hvis nogen tilbagekalder hans nøgle, vil du blive kontaktet.

6.  GnuPG Grænseflader

Om email-underskrifter

95% af tiden, hvor du bruger GnuPG til mail, er underskrivning/kryptering af udegående beskeder og læse underskrevne/krypterede beskeder. Så det er kun fair at tale om dette først.

Der er to metoder for at underskrive/kryptere en email med GnuPG: den gamle metode og den nye metode :). Ved den gamle metode, vil beskeder vise sig i ren tekst, uden nogen mulig formatering og vedhæftede filer ville ikke blive underskrevet/krypteret, her er et eksempel på en besked, underskrevet på den gamle metode:

Kode oversigt 6.1: En alm. tekst signatur

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Test message
				   	 
-----BEGIN PGP SIGNATURE-----
Version: PGPfreeware 6.5.8 for non-commercial use
							   	 
iQA/AwUBP8461jMX0745gR7AEQIEOwCg011GbufXO3ED3FkLWXmfzg7xm1cAoJD0
0EU3Kd2EKNCqataEqM5qjpPs
=LchZ
-----END PGP SIGNATURE-----

Beskeder ved denne metoder er ikke godt i dag, hvor vi har flotte grafiske grænseflader og email-læsere som kan forstå HTML.

For at løse dette, blev en udvidelse til MIME (Multipurpose Internet Mail Extensions) oprettet. Dette tilføjede et felt til emailen, som fortæller mail-læseren at det fuldstændige indhold af en besked er underskrevet og/eller krypteret. Problemet er at ikke alle mail-læsere understøtter dette. Og nogle ødelægger endda indholdet, hvilket Microsofts Outlook er berømt for.

Kgpg

kgpg er et dejligt grafisk program til at administrere GnuPG, i hovedskærmen kan man sætte text ind som man ønsker at have signeret eller krypteret, man kan også indsætte den ASCII-beskyttede text, som man ønsker at dekryptere.


Figur 6.1

Fig. 1: kgpg main window

På det her billede kan du se kgpg-hovedvinduet med ASCII beskyttet og krypteret text indsættet til det. Derfra kan man dekryptere det (du vil blive nødt til at give koden), kryptere andre filer, eller indsætte nyt text til at signere ...


Figur 6.2

Fig. 2: kgpg key manage window

Nu kan du se nøgle-administrationsvinduet, derfra kan vi se vores gode nøgle, for john doe. De 2 nøgler vi stoler på, fra Gustavo og Luis, og den nøgle fra Daniel Robbins (jeg har stadig ikke ringet til ham, for at tjekke hans fodspor :) ).

Seahorse

Seahorse sigter mod at være en GnuPG grafisk grænseflade til GNOME Desktop. Softwaren har udviklet sig hurtigt, men den mangler stadigvæk vigtige egenskaber, som kan blive fundet i Kgpg eller kommando-linje versionen.

Mozilla Enigmail

Mozillas version fra 1.0 og opefter, kommer med Enigmail, et plugin til email-klienter, som er meget simpelt at opsætte. Bare gå til Opsætning -> Privacy & Security -> Enigmail. Der skriver du emailen til din nøgle, og så er det det.

Meddelelser, der kommer med en upålidelig pgp eller gpg signatur, vil blive mærket med en ødelagt pen, andre der har et godt og pålideligt signatur, vil komme som en fin og pæn pen. Enigmail kommer endda med muligheden for at hente nøgler fra nøgle-servere, men hvis det har problemer, vil det komme med nogle mærkelige meddelelser (men du kan jo stadig huske måden at gøre det på i CLI, ikke? ;-) ).

KMail

Hvis du har sat crypt USE flaget, så vil KMail blive kompileret med gpg understøttelse og vil være i stand til at kryptere og dekryptere inkommende PGP mails automatisk så vel som at kryptere OpenPGP/MIME mails. Hvis du også vil dekryptere OpenPGP/MIME mails (hvilket du nok vil) så bliver du nødt til at have en kørende GPG agent (ee At bruge en GPG agent).

Du kan verificere om KMail er korrekt sat op ved at gå til Settings, Configure KMail, Security, Crypto Backends. Der bør du se en GpgME-baseret backend listet og du bør være i stand tli at ufylde OpenPGP checkboxen. Hvis den er listet, men markeret med grå, så klik på Rescan. Hvis den GpgME-baserede backend stadig er markeret grå, så virker KMail ikke ordentligt.

Sylpheed-Claws

Dette er min favorit email-læser. Den er meget hurtig med store mailboxes, har alle de spændende egenskaber, som man vil have i email-læsere og virker godt med gpg. Det eneste problem er at den ikke virker med de gamle PGP-signaturer, så når du modtager disse emails, bliver du nødt til at manuelt tjekke signaturerne.

For at bruge din gpg-nøgle med Sylpheed-Claws, gå bare ind i konto-indstillingerne (account configuration) og vælg privacy. Når du er der, vælg så hvilken nøgle du vil bruge, og de fleste vil nok bruge standard-nøglen.

7.  Offentlig nøglekryptografi

Grundlæggende offentlig nøglekryptografi

Konceptet bag om offentlig nøglekryptografi blev opfundet af Whitfield Diffie og Martin Hellman i 1976. Da jeg først hørte ordene "offentlig nøgle" og "kryptografi" i samme sætning, tilbage i 1993, troede jeg at det ville være umuligt at gøre sådan en ting. I disse dage var der ingen Internet (det var det godt nok, men ikke for mig) så jeg gik hen til det offentlige bibliotek og spurgte for bøger om kryptografi. Jeg må sige, at jeg var 16 år på dette tidspunkt, så bibliotekaren så på mig med forbløffelse og gav mig en bog til børn om udskiftelige cypher (disse, hvor du ændrer et bogstav til et andet, som den berømte Caesar kode eller ROT-13 (Tragbb Ebpxf, naq lbh xabj vg vf tbbq orpnhfr lbh ner ernqvat guvf qbp.), (emerge rotix hvis du ikke kan læse den foregående tekst)). Jeg var meget sur over dette, og startede med at søge for flere informationer. Det er godt at have matematikere i familien, da jeg begyndte at tale til en af dem, var jeg introduceret til en ny verden.

Og nu en smule matematik:

Kode oversigt 7.1: Matematiske koncepter

Definationer:
				   	 
1- Et primtal er en positiv integer nummer, som kun kan divideres med med 1 og sig selv (huskeren er delingen af 0). De første 8 primtal er 1,2,3,5,7,11,13,17	


Læresætning (ingen beviser her)

1- For ethvert ikke positiv primtal integer, er det muligt at bryde det som produktet af primtalsnumre, og dette produkt er unik.
4=2*2
6=2*3
8=2*4=2*2*2
10=2*5
12=2*6=2*2*3

"Fakta":

1- Det er matematisk let at gange to store heltal.
2- Det er svært at finde prim-faktorerne af et givet positivt heltal.

Hvis jeg giver dig nummeret 35, og jeg fortæller dig at dette nummer er et produkt af to primtal, er det let at finde ud af at det var 5 og 7. Men hvis jeg fortæller dig det samme for 1588522601, vil du bruge en del tid (eller processorkraft) til at finde ud af at det var 49811*31891. Og hvis dette nummer er virkeligt stort, vil opgaven blive "umulig". Så hvis jeg nu giver verdenen mit store nummer, som er et produkt af to primtal, vil jeg vide noget om det nummer, som ingen andre ved.

Dette er grundlaget for offentlig nøglekryptografiske ('Public Key Cryptography (PKC)') implementeringer i dag. Som et (urealistisk) eksempel, vil jeg give nogen mit nummer og denne vil bruge det til at kryptere en besked til mig. Alle, som kan se den krypterede besked, og fordi at jeg er den eneste som kender en genvej til at læse den, skal alle andre først begynde at "splitte" det store nummer for at kunne læse beskeden, og det er "fakta" at det er umuligt at gøre dette på kort tid (metoder i dag og hurtigere computere i verdenen vil tage tusinder af år om at gøre dette). I denne indstilling vil de to store primtal blive kaldet for PRIVAT NØGLE (PRIVATE KEY), og det store ikke primtal er den OFFENTLIGE NØGLE (PUBLIC KEY).

I praksis er dette ikke 100% nøjagtigt med realiteten, men vil give et godt indblik til den nyankomne. For flere informationer, kig på hack.gr omkring Diffie-Hellman protokollen. For endnu flere informationer, gå hen til dit offentlige bibliotek og få fat i en kopi af "Handbook of Applied Cryptography" af Alfred J. Menezes, Paul C. van Oorschot og Scott A. Vanstone. Denne bog er også tilgængelig gratis online på ovenstående side.

En konsekvens af det ovenstående er at hvis du koder en besked til mig, og du mister den originale ukodede besked, vil du ikke længere have mulighed for at hente den fra den kodede version.

Signaturer

Vi har allerede set hvordan nogen kan sende os en kodet besked, hvis de har vores offentlige nøgle. Men hvordan ved vi om forfatteren af beskeden virkelig er den, som han påstår han er? Eller i andre ord: Hvis vi modtager en email fra dig, hvordan ved jeg virkeligt at det var dig og ikke en anden, som påstår at være dig?

Huskede du det var mig som sagde at PKC ikke var så simpelt, som jeg sagde? Ideen er at når du koder en besked til mig, underskriver du den med din private nøgle, så når jeg modtager den, kan jeg bruge din offentlige nøgle for at tjekke din signatur og så bruge den i min private nøgle til at dekode beskeden. Som du kan se, kunne vi ikke gøre dette i opsætningen, som beskrevet før.

Det er også vigtigt, for at underskrive beskeder, at du ikke skal kode dem førhen. Som sådan kan du oprette beskeder, som kan blive læst af alle, men kommer med din "branding". Og hvis noget tegn er ændret i beskeden, kan (og vil) det blive opdaget.

Nøgleservere og underskrevne nøgler

Men lad os sige at jeg ikke har nogen foregående kontakt med dig, indtil du sender mig en besked, hvordan kan jeg få din offentlige nøgle, og hvordan ved jeg virkeligt at det er dit?

For at løse dette problem, er offentlige nøgleservere skabt. Når du opretter et nøglepa (offentlig og privat nøgle) sender du din offentlige nøgle til nøgleserveren. Efter dette, vil alle kunne modtage din nøgle derfra. Dette løser problemet med at finde nøglen. Men hvordan ved jeg virkelig at nøglen er forfatterens nøgle? Til dette, skal et nyt koncept introduceres, og det er nøgle-underskrivelse:

Nøgle-underskrivelse betyder, at hvis jeg har en offentlig nøgle fra en anden person, og jeg ved virkeligt at det er dens persons nøgle (det er min personlige ven, nogen jeg kender i den virkelige verden osv.) kan jeg underskrive denne offentlige nøgle og sende det til nøgleservere, og på den måde fortæller jeg verdenen: "Denne nøgle tilhører virkelig den person, som påstår at tilhøre den". På den måde kan personer, som har offentlige nøgler og stoler på mig, bruge denne tillid til at stole andre nøgler.

Det kan til tider være forvirrende, så lad os se på en situation fra den virkelige verden.

Lad os forestille os en tre-persons situation: John, Mary og Lisa. John er en god ven af Mary, men kender ikke Lisa; Lisa er en god ven af Mary, men kender ikke John. En dag sender Lisa en underskreven email til John. John vil hente Lisas offentlige nøgle fra nøgleserveren og teste beskeden, hvis den gik igennem, vil han se at hvem der end har skrevet den besked, også lavede den nøgle. Men hvordan vil jeg vide at det virkelig er den person, som der påståes?

Han ser så at den er underskrevet af Mary, som han kan tjekke, idet han allerede har Marys nøgle og stoler på den. Med den ring af tillid fortsætter han med at tro på at emailen, som har modtaget, virkelig er skrevet af Lisa.

Du er nu klar til at bruge denne vejledning, og kan nu gå tilbage til kapitel 1 med at lære om at bruge gpg.

8.  Sidste tanker og anerkendelser

Nogle problemer

Jeg har problemer med billeder i nøgler. Tjek den version du bruger. Hvis du har GnuPG 1.2.1-r1 eller højere, er det sikkert okay, ældre version kan har problemer. Også kan de fleste nøgleservere ikke lide nøgler med billeder, så det er bedre, hvis du ikke tilføjer billeder.

De sidste versioner af gnupg virker tilsyneladende ikke med gpg --send-keys, som var brugt til at sende alle nøgler fra din nøglering til den offentlige server.

Hvad ikke er her

GPG er et meget komplekst værktøj, som tillader at gøre MEGET mere end hvad jeg har været omkring i den her guide. dette dokument er for brugeren, som er ny til GnuPG. For flere informationer, bør du tjekke: GnuPG Hjemmesiden.

Jeg kommer heller ikke omkring andre programmer som pgp4pine, gpgpine, evolution og måske windows-værktøjer, men jeg vil formodentlig udvide dette dokument i fremtiden.

Anerkendelser

John Michael Ashleys GnuPG Håndbog er en meget god bog til begynnere.

Swift (Sven Vermeulen) for at skubbe mig til at omskrive dette.

Alle jer i #gentoo-doc holdet, I er simpelthen for seje!.

Tiago Serra for at få mig tilbage til privacy vejen



Udskriv

Opdateret 4. maj 2005

The original version of this document was last updated June 13, 2010

Opsummering: Denne lille vejledning vil lære dig den basale brug af GnuPG, som er et redskab til sikker kommunikation.

Gustavo Felisberto
Forfatter

John P. Davis
Redaktør

Benny Chuang
Redaktør

Sven Vermeulen
Redaktør

Frands Sohn Frøkjær-Jensen
Oversætter

Kasper Sandberg
Oversætter

Jesper Brodersen
Korrektur

Arne Mejlholm
Korrektur

Donate to support our development efforts.

Copyright 2001-2012 Gentoo Foundation, Inc. Questions, Comments? Contact us.