GPG

From ICO wiki
Jump to navigationJump to search

Sissejuhatus

GPG (GNU Privacy Guard) on vabavaraline tööriist, mis baseerub OpenPGP standardil. See võimaldab failide ja e-posti krüpteerimist ning digiallkirjastamist. Krüpteerimine tagab teabe konfidentsiaalsuse ja digiallkirjastamine andmete tervikluse. GNU Privacy Guard on eelkõige käsurealt kasutamiseks mõeldud, kuid leidub ka erinevat graafilise kasutajaliidesega tarkvara, mis GnuPG kasutamist võimaldab. Teatud rakendustele (näiteks Evolution, Mozilla Thunderbird, Kmail ja Psi) on see funktsioon juba sisse integreeritud.

GnuPG abil saame krüpteerida sõnumeid, kasutades selleks asümmeetrilist ehk avalikku võtit, mis kasutaja poolt genereeritakse. Dešifreerimine toimub salajase võtme abil. Koos moodustavad avalik ning salajane võti võtmepaari. Avalikku võtit saab vahetada teiste kasutajatega näiteks läbi võtmeserverite või failina saates. GPG toetab ka mitmesuguseid sümmeetrilisi krüptoalgoritme, vaikimis kasutatakse CAST5 salajase võtmega krüptoalgoritmi. Tegu on vabavaralise programmiga ja GPGs on kasutusel ainult patenteerimata krüptoalgoritmid.

Võtmepaari iseloomustab sõrmejälg, mis on nii avalikul kui salajasel võtmel sama.
Sõrmejälg on lühike bitijada kirjeldamaks pikemat võtit. See luuakse krüptograafilist räsifunktsiooni kasutades.

$ gpg --list-keys
pub   ed25519 2020-02-12 [SC]
      58AA6DD2C39E2CC6CB047B91409532D1CC948816
uid           [ultimate] Eesnimi Perenimi <eesnimi@perenimi.ee>
sub   cv25519 2020-02-12 [E]

Siin on 58AA6DD2C39E2CC6CB047B91409532D1CC948816 selle võtmepaari sõrmejälg.

Kenama pildi saab:

$ gpg --list-keys --keyid-format LONG --fingerprint
pub   ed25519/409532D1CC948816 2020-02-12 [SC]
      Key fingerprint = 58AA 6DD2 C39E 2CC6 CB04  7B91 4095 32D1 CC94 8816
uid                 [ultimate] Eesnimi Perenimi <eesnimi@perenimi.ee>
sub   cv25519/6765DBFA115A5CCD 2020-02-12 [E]

GPG paigaldamine

Kuna suurem osa Linuxi distributsioonide paigaldusmeedia sisaldab GNU Privacy Guardi, siis pole seda tarvis eraldi paigaldada. Vajadusel saab GPG endale hankida http://gnupg.org/download/index.en.html veebilehelt.

Paigaldamine Ubuntu jt Debiani-põhistes Linuxites:

sudo apt update && sudo apt install gnupg2 xloadimage && sudo apt clean

GPG kasutamine

GnuPG versiooni ja krüptoalgoritme toe vaatamine:

gpg --version

gpg (GnuPG) 2.2.4
libgcrypt 1.8.1
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: /home/kasutaja/.gnupg
Toetatud algoritmid:
Avalik võti: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
Šiffer: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
        CAMELLIA128, CAMELLIA192, CAMELLIA256
Räsi: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Pakkimine: Pakkimata, ZIP, ZLIB, BZIP2

Võtmete vaatamine

gpg --list-keys
gpg --list-public-keys
gpg --list-secret-keys
gpg --fingerprint
gpg --check-signatures
gpg --list-keys --keyid-format LONG --fingerprint
gpg --list-keys --with-subkey-fingerprint <võtme ID>
gpg --with-colons --list-keys
gpg --with-colons --list-keys <ID>
gpg --list-keys @user

Võtmepaari loomine

Võtmepaari loomiseks tuleb terminali sisestada:

gpg --full-gen-key --expert

Selle peale küsitakse, millist võtit luua soovitakse.
Väga soovitav on luua elliptilise krüpto toega (ECC Elliptic Curve Cryptography) võtmepaar (vt krüptograafiliste algoritmide elutsükli uuringud):

Palun valige, millist võtmetüüpi te soovite:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (ainult allkirjastamiseks)
   (4) RSA (ainult allkirjastamiseks)
   (7) DSA (set your own capabilities)
   (8) RSA (set your own capabilities)
   (9) ECC and ECC
  (10) ECC (sign only)
  (11) ECC (set your own capabilities)
  (13) Existing key
Teie valik? 9

Järgmisena küsitakse meilt, millist elliptilist krüptot me kasutada soovime:

Please select which elliptic curve you want:
   (1) Curve 25519
   (3) NIST P-256
   (4) NIST P-384
   (5) NIST P-521
   (6) Brainpool P-256
   (7) Brainpool P-384
   (8) Brainpool P-512
   (9) secp256k1
Teie valik? 1

Nüüd tuleb määrata oma võtme kehtivusaeg. Vaikimisi on see 0 ehk lõpmatult, kuid siin tasub meeles pidada, et kui võtit enam ei kasutata, siis tuleb see ka tühistada.

Palun määrake, kui kaua on võti kehtiv.
         0 = võti ei aegu
      <n>  = võti aegub n päevaga
      <n>w = võti aegub n nädalaga
      <n>m = võti aegub n kuuga
      <n>y = võti aegub n aastaga
Võti on kehtiv kuni? (0)  <Enter>

Kinnitame oma valikut:

Key does not expire at all
Is this correct? (y/N) y

Järgmisena sammuna tuleb sisestada vajalikud andmed.
Näidisandmed asendada tegelikega.

GnuPG needs to construct a user ID to identify your key.

Pärisnimi: Eesnimi Perenimi
E-posti aadress: eesnimi@perenimi.ee
Kommentaar: 
Te valisite selle KASUTAJA-ID:
    "Eesnimi Perenimi <eesnimi@perenimi.ee>"

Muuda (N)ime, (K)ommentaari, (E)posti või (O)k/(V)älju? O

[SALASÕNA KÜSIMINE VÕTMEPAARILE]

Me peame genereerima palju juhuslikke baite. Praegu oleks hea teostada
arvutil mingeid teisi tegevusi (kirjutada klaviatuuril, liigutada hiirt,
kasutada kettaid jne), see annaks juhuarvude generaatorile võimaluse
koguda paremat entroopiat.

gpg: key 409532D1CC948816 marked as ultimately trusted
gpg: revocation certificate stored as '/home/student/.gnupg/openpgp-revocs.d/58AA6DD2C39E2CC6CB047B91409532D1CC948816.rev'
avalik ja salajane võti on loodud ja allkirjastatud.

pub   ed25519 2020-02-12 [SC]
      58AA6DD2C39E2CC6CB047B91409532D1CC948816
uid                      Eesnimi Perenimi <eesnimi@perenimi.ee>
sub   cv25519 2020-02-12 [E]

Avalikku võtit saab vaadata käsuga:

gpg --list-key

/home/test/.gnupg/pubring.kbx
------------------------------
pub   ed25519 2020-02-12 [SC]
      58AA6DD2C39E2CC6CB047B91409532D1CC948816
uid           [ultimate] Eesnimi Perenimi <eesnimi@perenimi.ee>
sub   cv25519 2020-02-12 [E]

Avalik võti on CC948816 (8 viimast sümbolit sõrmejäljest)

Salajast võtit saab vaadata:

gpg --list-secret-keys

Tühistussertifikaat

Soovituslik oleks luua ka revocation key, millega saab avalikku võtit tühistada.

gpg --output tyhistamise-sertifikaat.asc --armor --gen-revoke CC948816

Create a revocation certificate for this key? (y/N) y
Palun valige tühistamise põhjus:
  0 = Põhjus puudub
  1 = Võti on kompromiteeritud
  2 = Võti on asendatud
  3 = Võti ei ole enam kasutusel
  Q = Katkesta
(Tõenäoliselt soovite siin valida 1)
Teie otsus? 3
Sisestage mittekohustuslik kirjeldus. Lõpetage tühja reaga:
> 
Tühistamise põhjus: Võti ei ole enam kasutusel
(Kirjeldust ei antud)
Is this okay? (y/N) y
Tühistamise sertifikaat on loodud.

Tühistussertifikaatide loomise automatiseerimine skripti abil:

# 0 = Põhjus puudub
printf "Y\n0\n\nY\nY\n"|gpg --no-tty --command-fd 0 --status-fd 2 --output tyhistamise-sertifikaat_pohjus-puudub.asc --armor --gen-revoke CC948816 >&- 2>&-
#
# 1 = Võti on kompromiteeritud
printf "Y\n1\n\nY\nY\n"|gpg --no-tty --command-fd 0 --output tyhistamise-sertifikaat_pohjus-kompromiteeritud.asc --armor --gen-revoke CC948816
#
# 2 = Võti on asendatud
printf "Y\n2\n\nY\nY\n"|gpg --no-tty --command-fd 0 --output tyhistamise-sertifikaat_pohjus-asendatud.asc --armor --gen-revoke CC948816
#
# 3 = Võti ei ole enam kasutusel
printf "Y\n3\n\nY\nY\n"|gpg --no-tty --command-fd 0 --output tyhistamise-sertifikaat_pohjus-ei-ole-enam-kasutusel.asc --armor --gen-revoke CC948816

Hilisem tühistussertifikaadi kasutamine

gpg --import tyhistamise-sertifikaat.asc
gpg --delete-secret-and-public-key CC948816

Serverites tühistamine peale vana võtme ja selle tühistusserdi importi:

gpg --keyserver keys.openpgp.org --search-keys CC948816
gpg --keyserver keys.openpgp.org --send-keys CC948816

Võtme täiendamine

vaatame esmalt, mis võtmed meil on:

gpg --list-keys

võtme ID on sõrmejälje 8 viimast sümbolit

Võtme muutmiseks tuleb konkreetse võtme muutmine avada GPG interaktiivses haldusliideses

gpg --expert --edit-key CC948816
help #kõik käsud

Pildi haldamine

Alljärgnevad käsud on juba GPG haldusliideses

addphoto

Valige foto ID'na kasutatav pilt. Pilt peab olema JPEG fail.
Pidage meeles, et pilt salvestatakse teie avalikus võtmes. Kui kasutate
väga suurt pilti, on ka kõti väha suur!
Mõistlik pildi suurus võiks olla umbes 240x288.

Sisestage foto ID jaoks JPEG faili nimi:  pilt.jpg #vajadusel anda absoluutse aadressiga pildifaili asukoht
On see foto õige (j/E/v)? j

sec  ed25519/409532D1CC948816
     created: 2020-02-12  expires: mitte kunagi       usage: SC  
     trust: ultimate      validity: ultimate
ssb  cv25519/6765DBFA115A5CCD
     created: 2020-02-12  expires: mitte kunagi       usage: E   
[ultimate] (1). Eesnimi Perenimi <eesnimi@perenimi.ee>
[ unknown] (2)  [jpeg image of size 5671]

SELLEGA ON PILT LISATUD

kui puudub pildi vaatamise programm:

/bin/bash: xloadimage: käsku ei ole
gpg: foto ID ei saa näidata!

foto vaatamiseks xloadimage'i abil:

showphoto
Displaying jpeg photo ID of size 5671 for key 409532D1CC948816 (uid 2)

e-postiaadressi lisamine

adduid

Pärisnimi: Eesnimi2 Perenimi2
E-posti aadress: eesnimi2@perenimi2.ee
Kommentaar: 
Te valisite selle KASUTAJA-ID:
    "Eesnimi2 Perenimi2 <eesnimi2@perenimi2.ee>"

Muuda (N)ime, (K)ommentaari, (E)posti või (O)k/(V)älju? O

sec  ed25519/409532D1CC948816
     created: 2020-02-12  expires: mitte kunagi       usage: SC  
     trust: ultimate      validity: ultimate
ssb  cv25519/6765DBFA115A5CCD
     created: 2020-02-12  expires: mitte kunagi       usage: E   
[ultimate] (1)  Eesnimi Perenimi <eesnimi@perenimi.ee>
[ultimate] (2)  [jpeg image of size 5671]
[ unknown] (3). Eesnimi2 Perenimi2 <eesnimi2@perenimi2.ee>

save 

Uuesti sisenemisel saame vajadusel usaldada oma võtit ja sellele lisatud aadresse.

gpg --expert --edit-key CC948816

trust

Please decide how far you trust this user to correctly verify other users' keys
(by looking at passports, checking fingerprints from different sources, etc.)
                                            
  1 = I don't know or won't say
  2 = I do NOT trust                                          
  3 = I trust marginally                              
  4 = I trust fully                                       
  5 = I trust ultimately                                  
  m = back to the main menu              

Teie otsus? 5

Do you really want to set this key to ultimate trust? (y/N) y

... see uuendab trust-db koheselt ja eraldi salvestada ei ole vaja.

vaikimisi e-postiaadressi (UID) määramine

list #vaatame, mis saadaval, punktiga on tähistatud vaikimisi
uid x #valime UID välja, x asemele õige number
primary #määrame põhiliseks
save #salvestame

uuesti sisenemisel on vaikimisi (punktiga) juba uus aadress

Võtme jagamine

Algne idee on avalik võti võtmeserverisse üles laadida. Kui võti uueneb siis ka serveris uuendada. Sageli on võtmeservereid mitu, mida kasutatakse.

Kuid ei soovita seda teha kuna kustutada sealt ei saa - saab vaid tühistada. Kui siis tühistussertifikaat mingil põhjusel kadunud või ei mäleta võtme salasõna siis ei saa ka tühistada. Lisaks kui ka on see kõik olemas siis vaatamata sellele mitmed võtmeserverid ei tühista võtit ära ja see jääb endiselt alles ning eksitab teisi inimesi.


Pigem on soovitav avalik võti teisele osapoolele kodulehel, pilves failina edastada või ka suhtlusrakenduse, e-posti teel või mõne muu meediumi kaudu.

Võtme eksport-import

Avaliku võtme eksport:

gpg --output avalik-voti.asc --armor --export CC948816

Salajase võtme eksport

gpg --output salajane-voti.asc --armor --export-secret-keys CC948816

Siin küsitakse ka salajase võtme salasõna. Skriptimisel aga see ei sobi ja saame tekstifailina salasõna ette anda ning muud dialoogid ka automaatselt ära kinnitada:

cat /asukoht/salas6na | gpg --pinentry-mode loopback --yes --passphrase-fd 0 --output salajane-voti.asc --armor --export-secret-keys CC948816

Kaks võtit kokku ühte faili:

for f in avalik-voti.asc salajane-voti.asc; do (cat "${f}"; echo); done > avalik-salajane-koos.asc && truncate -s $(head -n -1 avalik-salajane-koos.asc | wc -c) avalik-salajane-koos.asc

Võtme(te) importimine

gpg --import avalik-voti.asc salajane-voti.asc

Teiste inimeste avalike võtmete importimine tagab selle, et teise osapoolega on info vahetamine võimalik. Pärast importimist lisandub teise isiku avalik võti sinu pubring.kbx faili. Veendu, et importimine oli edukas:

gpg --list-key

Avaliku võtme otsimine ja importimine võtmeserverist:

gpg --keyserver pool.sks-keyservers.net --search-keys <e-post@random.com>
gpg --keyserver pool.sks-keyservers.net --search-keys "Eesnimi Perenimi"

Võtmepaari kustutamine

gpg --delete-secret-and-public-key CC948816
Delete this key from the keyring? (y/N) y

Erinevad võimalused

gpg --delete-keys name
gpg --delete-secret-keys name
gpg --delete-secret-and-public-key name

Graafiline haldus

Erinevad graafilised (GUI) rakendused leiab GnuPG kodulehelt. Paraku ei toeta Linuxis ükski GUI rakendus ECC võtmeid (veel).

Graafiliselt võimalik siiski ka ECC-võtmeid luua:

Andmete krüpteerimine

Avatekst + vastuvõtja avalik võti ---> krüptogramm
Faili krüpteerimiseks sisesta järgmine käsk:

gpg --output <väljundfail.midagi> --encrypt -r <saaja_e-post@random.com> <avateksti.midagi>
Näide: gpg --output eritisalajane.txt --encrypt -r keegi@midagi.com saladus.txt

Selle käsuga krüpteerisime me faili nimega saladus.txt, kasutades selleks isiku(kes kasutab e-posti aadressit keegi@midagi.com) avalikku võtit ja saime krüptogrammi nimega eritisalajane.txt. Kui nüüd tekkinud krüptogrammi less käsuga vaatame, siis näeme, et faili sisu pole loetav. Avateksti (saladus.txt) võib nüüd kustutada ning alles jääb ainult krüpteeritud fail (eritisalajane.txt).


Andmete dešifreerimine

Krüptogramm + vastuvõtja salajane võti ---> avatekst
Krüptogrammi(mis on krüpteeritud sinu avaliku võtmega) dešifreerimiseks sisesta järgmine käsk:

gpg --decrypt <krüptogramm.midagi> --output <väljundfail.midagi>
N: gpg --decrypt eritisalajane.txt –output tavaline.txt

Siinkohal tasuks mainida, et saatja ning vastuvõtja ei ole alati erinevad inimesed. GPG abil võime krüpteerida ka oma enda andmeid. Sellisel juhul luuakse krüptogramm ning avateksti võime kustutada. Seda saab lihtsalt teha sümmeetrilist krüptoalgoritmi kasutades:

gpg -s <avatekst.midagi>

Dešifreerimine toimub eelnevalt mainitud käsuga:

gpg -d <krüptogramm.midagi> -o <väljundfail.midagi>


Andmete allkirjastamine

Andmete allkirjastamiseks on mitu võimalust:

Krüpteeritud ASCII Armored fail. Tegemist on krüptogrammiga ning see pole ilma dešifreerimata loetav.

gpg --armor --sign <failinimi.midagi>

Allkirjastatakse fail, kuid sisu krüpteerimist ei toimu ning fail jääb loetavaks.

gpg --clearsign <failinimi.midagi>

Faili ehtsust on võimalik kontrollida järgmise käsuga:

gpg --verify <failinimi.midagi>

Väljund:

gpg: Signature made Thu 29 Nov 2012 11:06:03 AM EET using RSA key ID D29AF589
gpg: Good signature from "Heli Kopter <hkopter@midagi.com>"

gpg --verify kontrollib ainult faili allkirja, kuid avateksti see näha ei võimalda(juhul kui fail on krüpteeritud). Selleks tuleb fail dešifreerida ning selle käigus kontrollitakse ka faili allkirja (käsku vaata eespoolt).

Käskude kohta leiab rohkem teavet: https://manpages.ubuntu.com/manpages/en/man1/gpg.1.html

Kasutatud kirjandus

man gpg
http://www.glump.net/howto/gpg_intro
http://www.randombugs.com/linux/gpg-ubuntu-debian.html
http://manpages.ubuntu.com/manpages/lucid/man1/gpg.1.html
http://www.gnupg.org/features.en.html
https://help.ubuntu.com/community/GnuPrivacyGuardHowto
http://www.spywarewarrior.com/uiuc/gpg/gpg-com-4.htm
https://manpages.ubuntu.com/manpages/bionic/man1/gpg2.1.html
https://www.gnupg.org/documentation/manuals/gnupg/GPG-Examples.html
https://www.ria.ee/et/ametist/uuringud-analuusid-ulevaated.html
https://gnupg.org/software/frontends.html

Autor: Kaarel Kuurmann A21
Täiendused: Edmund Laugasson (12.02.2020)