PGP - Pretty Good Privacy

Mire jó?

  • Nyilvános-titkos kulcspárt generálhatunk magunknak titkos és/vagy biztonságos levelezéshez. Ezek (a kulcsok és a pgp) azt tudják, hogy ha (akármilyen sorrendben) előbb egyikkel kódolunk egy levelet, aztán az így kapott (olvashatatlan) levelet a másikkal, akkor az eredetit kapjuk vissza. A pgp program a kulcsok generálására is, azok használatára (kódolásra a kulcsokkal) is alkalmazható.
  • A köldött leveleinket kódolhatjuk vele úgy, hogy
    • Csak a címzett tudja elolvasni. Kell hozzá, hogy a címzettnek is legyenek kulcsai, és ismerjük a nyilvános kulcsát. A levelet a címzett nyilvános kulcsával kódoljuk. A saját titkos kulcsával kódolja vissza (a pgp) a levelet.
    • Mindenki tudja olvasni (ha hozzáfér), aki ismeri a nyilvános kulcsunkat(, és van pgp-je). A levelet a saját titkos kulcssal kódoljuk. A címzettek pgp-je a nyilvános kulcsunkkal kódolja vissza a levelet.
    • Csak a címzett tudja elolvasni, és biztos lehet benne, hogy mi írtuk a levelet. Kell hozzá egymás nyilvános kulcsainak ismerete. A levelet a saját titkos kulcssal és a címzett nyilvános kulcsával kódoljuk. A saját titkos kulcsával és a mi nyilvános kulcsunkkal kódolja vissza a levelet a pgp.
    Ezek mindegyike macerás, csak igen indokolt esetben használ ilyesmit az (igen fontos vagy igen titkolózó) ember (rendszeresen). (Ez arra is vonatkozik, hogy lehetőleg senki ne írjon nekem ilyen levelet, pláne ne küldjön titkosan beadandó feladatokat.)
  • A köldött leveleinket aláírhatjuk vele. Ez azt jelenti, hogy a levelet mindenki el tudja olvasni, aki hozzáfér. Aki ismeri a nyilvános kulcsunkat, az a pgp-vel ellenőrízni tudja, hogy nem hamisították-e a levelet. Azon alapul a dolog, hogy a nyilvános kulcsunk és a levél-szöveg felhasználásával a pgp olyan kódolt záradékot, "elektronikus aláírást" ("signature") tesz a levél végére, ami a nyilvános kulcsunkkal és az eredeti levélszöveggel együtt "stimmel", különben nem. Ezt a módszert sok cégnél kötelező használni, ezért nem árt vele megbarátkozni, annak ellenére, hogy enélkül egyszerűbb lenne az élet. Használni fogom, mert a múlt félévben megtörtént, hogy egy hallgató a nevemben írt (hamisított) levelet kapott, amiről azt hihette, hogy igazi.
  • Értelemszerű (az eddigiek alapján), hogy a kapott, PGP kódot tartalmazó leveleinket dekódolhatjuk ill. ellenőrízhetjük vele.
  • Természetesen minden - nem csak levélként küldött - szöveg titkosítására is alkalmas a program.

A program installálása Linuxban

Töltse le, és a $HOME directoryjában csomagolja ki (a tar -xvzf pgp.tgz paranccsal) a pgp.tgz fájlt. A pandora-n letöltés nélkül így installálhatjuk (a $HOME directoryn állva):
   tar -xvzf /h/public/c/csa/public_html/pgp/pgp.tgz

A kapott .pgp directoryban levő fájlok közül a pgp fájlt (ami maga a program) tegyük programkönyvtárba. Maradhat a .pgp directoryban is, de akkor minden későbbi pgp parancsban írjunk "$HOME/.pgp/pgp"-t vagy "~/.pgp/pgp"-t helyette. (Ez a pont csak otthoni gépen érdekes, a pandora-n a program rendszerkönyvtárban van.)

A program használata

  • A pgp -h hívással kaphatjuk meg a program rövid leírását.

  • Kulcspár generálás a "pgp -kg" hivással kezdeményezhető.
    • Válasszunk 1024 bites kulcsot (régi lassú gépeken válasszunk kisebbet, vagy akkor, ha igen nagy fájlok kódolása várható).
    • A megfelelő helyen (a program kérésére) a teljes nevünket, mellette "<>" zárójelek között az email címünket adjuk meg. Ennek igazából nincs köze a levelezéshez, ez az információ kódolatlanul is látszik a kulcsokban. Arra szolgál, hogy a pgp program a megfelelő kulcsfájlból a név (vagy egy része) vagy a pgp user_id (az email-cím @ előtti része) alapján tudja a kért kulcsot kiválasztani. Ezen túlmenően az itt beírt dolgok a kulcsainkkal történő kódoláskor/dekódoláskor megjelennek a képernyőn.
    • Kétszer kéri be a program a pgp jelszó-t. Ez egy olyan jelszó, amit a titkos kulcsunk minden használatakor bekér majd a pgp, enélkül azzal nem kódol/dekódol.
    • Ezután zongorázni kell a billentyűzeten addig (mi vagyunk ekkor a véletlenszám generátor), amig a program vissza nem számlál nulláig. (Nem gond, ha feleslegesen sokat nyomtuk a billentyűzetet.)

  • Annyit kell tudni a .pgp-beli "kulcs"-fájlokról, hogy:
    • A pubring.pgp fájlban vannak a használt nyilvános kulcsok. Itt keletkezik a saját nyilvános kulcsunk, ide tudjuk (a programmal) betenni másokét is.
    • A secring.pgp fájlban vannak a használt titkos kulcsok, többnyire csak a sajátunk. Ajánlani szokták, hogy ez legyen valamilyen, nem mindig elérhető fájlrendszerben (pl. floppyn, CD-n). A fájl esetleges megszerzése nem elég annak használatára, ahhoz a pgp jelszavunkat is ismerni kell.

  • A kulcsfájlok nem géphez kötöttek. Tehát másik gépre átvihetők, ott használhatók. Pl. tudok a fi.inf.elte.hu-n (a <csa@fi.inf.elte.hu> email cím megadásával) generált kulcsokkal az itthoni gépemen aláírt levelet a pandora-ról elküldeni. Annyi zavar származhat belőle összesen, hogy a levelet visszakódoló pgp azt állítja majd, hogy a kulcs a generálásakor megadott címhez tartozik.

  • Kétféleképpen küldhetünk ill. fogadhatunk kódolt vagy kóddal aláírt levelet.
    • A küldés előtt kódoljuk a levélszöveget, aztán a kódolt fájlt küldjük el, ill. a kapott levélszöveget fájlba mentve dekódoljuk azt.
    • Megtanítjuk a levelező programunkat (ha alkalmas rá), hogy hogyan kódolja elküldés előtt ill. dekódolja olvasáskor a kapott leveleket.
    Ennek a részletei következnek.

Fájlok kódolása

A további parancsokban szereplő csa helyett értelemszerűen mindenki a saját pgp user_id-jét írja be (azt, amit a kulcs létrehozáskor megadott).
  1. A level.txt fájl kódolása a titkos kulcsunkkal: pgp -s level.txt -u csa
    A pgp jelszó kell hozzá, a level.txt.pgp fájlban lesz az eredmény (ami a pgp által tömörített bináris fájl). A "- csa" elmaradhat, ilyenkor a titkos kulcsok közül az elsőt veszi a program (ez a sajátunk szokott lenni).
  2. A feladat ugyanaz, de ASCII fájlt akarunk eredménynek: pgp -sa level.txt -u csa
    A pgp jelszó kell hozzá, a level.txt.asc fájlban lesz az eredmény (akármilyen levelezőprogrammal elküldhetjük).
  3. A level.txt fájlhoz aláírás illesztése a titkos kulcsunkkal: pgp -sta level.txt -u csa
    A pgp jelszó kell hozzá, a level.txt.asc fájlban lesz az eredmény (akármilyen levelezőprogrammal elküldhetjük).
  4. A level.txt fájl kódolása xyz nyilvános kulcsával: pgp -e level.txt xyz
    A level.txt.pgp fájlban lesz az eredmény (bináris fájl). Az xyz a saját azonosítónk is lehet.
    Az előző két pontnak megfelelően használhatjuk az "a" és "t" opciókat a "-e" mellett is, ugyanolyan módon és eredménnyel.
  5. A level.txt fájl kódolása a saját titkos kulcsunkkal és xyz nyilvános kulcsával: pgp -es level.txt xyz -u csa
    A level.txt.pgp fájlban lesz az eredmény (bináris fájl). Az "a" és "t" opció itt is használható. A parancs jóval egyszerűbb megoldás, mint két egymásutáni titkosítás (a pgp-beli, lényegében automatikus és kötelező fájl kiterjesztések miatt).
Az eddigi parancsokban "-u csa" helyett más azonosító is szerepelhet, ha rendelkezésre áll az illető titkos kulcsa (ld. alább).

Fájlok dekódolása

Ez egészen egyszerű.
  • A level.txt.asc fájl dekódolása: pgp level.txt.asc
    A pgp felismeri, hogy hogyan, hányszor lett kódolva a fájl, jelszót kér, ha titkos kulcsot is használ. A level.txt fájlban lesz az eredmény, de további parancsparaméterként, "-o fájlnév" formában megadható az eredményfájl neve.

Levelek kódolása a pine levelezőprogramban, elküldéskor

Azt a lehetőséget használjuk ki, hogy a pine számára megadható egy szűrő, ami átalakítja a levél szövegét az elküldéskor. Továbbá a pgp azon lehetőségét (már az előző pontokban is szerepelhetett volna), hogy a "-f" opció hatására a standard inputról a standard outputra dolgozik.

Ha a pine programot konfiguráljuk, akkor ajánlatos előtte a $HOME/.pinerc fájlról másolatot csinálni. A rosszul sikerült vagy megunt konfigurálást így egy vissza-másolással törölhetjük. (Meg azt is megtanulhatjuk, hogy hogyan lehet ezen fájl szerkesztésével konfigurálni a levelezőprogramot.)

  • A pine főmenüjében válasszuk ki a SETUP menüpontot, azon belül a "(C) Config:" almenüpontot. Ez rengeteg lehetőséget tartalmaz, a SPACE billentyű folyamatos nyomásával a végére mehetünk, majd egy lapnyit (a "-" billentyű egyszeri lenyomásával vagy másfél tucat "felnyil"-al) a "sending-filters" menüpontra tudunk állni. Azon Enter-t ütve beadhatjuk a szűrő nevét és paramétereit. Pl. ha a saját titkos kulcsunkkal akarjuk aláírni a leveleket, és a pgp program a /home/csa/.pgp könyvtárban van, akkor írjuk be azt, hogy "/home/csa/.pgp/pgp -fsta" (macsakakörmök nélkül), és üssünk Enter-t. Ezután az "E" gombbal (Exit) befejezhetjük a SETUP-ot, a feltett kérdésre "Y"-t válaszolva menthetjük el a beállítást a $HOME/.pinerc fájlba.
  • A beállítás mellett sem lesznek automatikusan "aláírva" a levelek, hanem a levél küldést indító "CtrlX" után megjelenik a Send message (unfiltered)? üzenet. Ha Enter-t ütünk, aláírás nélkül megy el a levél. A lenyil-lal a Send message (filtered thru pgp)? üzenet jelenik meg. Ha ezen ütünk Enter-t, akkor aláírva megy el a levél.
  • Természetesen azt is megtehetjük, hogy a pine-ba nem viszünk be levél kódolást, hanem az előző pontban leírt módon a pgp-vel előállított ".asc" fájlt hozzuk be a pine-ba levél szövegként (úgy, hogy CtrlR után megadjuk a fájl nevét és Enter-t ütünk).

Kapott levelek kódolásának ellenőrzése a pine levelezőprogramban, olvasáskor

Azt a lehetőséget használjuk ki, hogy a pine számára megadható egy szűrő, ami átalakítja a levél szövegét, mielőtt az a képernyőre kerül. És ismét a pgp azon lehetőségét, hogy a "-f" opcióval szűrő.
  • A pine főmenüjében válasszuk ki a SETUP menüpontot, azon belül a "(C) Config:" almenüpontot. Ez rengeteg lehetőséget tartalmaz, a SPACE billentyű folyamatos nyomásával a végére mehetünk, majd egy lapnyit (a "-" billentyű egyszeri lenyomásával vagy másfél tucat "felnyil"-al) a "display-filters" menüpontra tudunk állni. Azon Enter-t ütve írjuk be a következőt (ügyeljünk a pontos beadásra):
       _LEADING("-----BEGIN PGP")_ /home/csa/.pgp/pgps
    Ezzel egyrészt azt jelezzük, hogy a szűrőt csak akkor kell használni, ha a levél a macskakörmök között álló szöveggel kezdődik, másrészt megadjuk a szűrőt (teljes útvonallal). Ezután az "E" gombbal (Exit) befejezhetjük a SETUP-ot, a feltett kérdésre "Y"-t válaszolva menthetjük el a beállítást a $HOME/.pinerc fájlba.
  • A /home/csa/.pgp/pgps parancsfájlt kell még megírnunk. Ehhez tudni kell, hogy a pgp a standard error-ra írja a hibaüzeneteit, a standard outputra pedig jó esetben a dekódolt levelet, rossz esetben semmit. A pine csak a standard outputot kapja vissza. Ha a script lényege egy sima "pgp -f" parancs, akkor tegyünk mögé egy "sleep 5"-öt (vagy "sleep 10"-et), hogy ennyi másodpercig a pgp üzeneteit is lássuk. Komfortosabb az alábbi szűrő:
         tee $HOME/.pgp/.tmp.level |\
         pgp -ft 2>$HOME/.pgp/.tmp.pgp &&\
         ( echo ""
           fgrep "signature from" $HOME/.pgp/.tmp.pgp |\
           sed "s/^/>>PGP<< /" ) ||
         ( echo ""
           echo A \"$HOME/.pgp/.tmp.level\" fájlban van ez eredeti levél
           sed "s/^/>>PGP<< /" $HOME/.pgp/.tmp.pgp )
    Ha a kapott fájl rendben van (nullás pgp státusz kimenet), akkor csak a "signature from" stringet tartalmazó pgp üzenetsor kerül a levél végére, egy üres sorral megelőzve, a sor elején a ">>PGP<< " jelzéssel.
    Ha a kapott fájl nincs rendben, akkor csak a pgp üzenetei (a sor elején a ">>PGP<< " jelzéssel) kerülnek a képernyőre, egy üres sorral és azzal az üzenettel megelőzve, ami megmondja, hogy hol található az eredeti levél, amit esetleg szintén látni szeretnénk.
  • Természetesen azt is megtehetjük, hogy a pine-ba nem viszünk be levél szűrést, hanem a kódolt vagy pgp-vel aláírt levelet a "V"iew, és "S"ave pine parancsok egymásutáni használatával általunk megadott nevű fájlba visszük, aztán arra alkalmazzuk a pgp-t.

Saját publikus kulcs átadása másoknak.

  • Először ki kell szedni a "pubring" fájlból a kulcsot, lehetőleg ASCII formában (különben rossz ránézni). Az alábbi paranccsal tehetjük a kulcsot a $HOME/csa_kulcsa.asc fájlba:
       pgp -kxa csa $HOME/csa_kulcsa $HOME/.pgp/pubring.pgp

  • Az átadásra az alábbi lehetőségeket használhatjuk (ha nem találunk ki valami mást).
    • A kapott fájlt a $HOME/.plan fájlba másoljuk, mert azt a fájlt megmutatja másoknak a finger parancs. A pandora-n a finger nem működik.
    • A kapott fájlt feltesszük a WEB-re. Ezt tettem én is, a fájl neve csa_kulcsa.asc.
    • A kapott fájlt elküldjük levélben. Pl. azzal a lehetőséggel, hogy a pine levelezőprogram minden küldött levélbe bemásolja a $HOME/.signature fájlt. De manuálisan is behozthatjuk a fájlt a pine-ba, ha CtrlR-et követően megadjuk a behozandó fájl nevét.

Mások publikus kulcsának átvétele, ill. törlése.

  • Pl. a $HOME/csa_kulcsa.asc fájlból vett kulcsot így vihetjük be a pgp által használt publikus kulcsok közé:
       pgp -ka $HOME/csa_kulcsa.asc $HOME/.pgp/pubring.pgp
  • Ha meguntuk, vagy mielőtt egy megváltozott kulcsot bevinnénk, így törölhetjük:
       pgp -kr csa $HOME/.pgp/pubring.pgp

Források

Csizmazia Albert csa@inf.elte.hu