Obsługa GPG

GPG to program służący do szyfrowania i zarządzający kluczami kryptograficznymi za użytkownika. W szczególności większość operacji wymaga, aby klucze były zapisane w bazie danych GPG, tzw. pęku kluczy (keyring). Ze względu na zgodność z innymi pragramami implementującymi protokół OpenPGP ilość udostępnianych algorytmów jest nieco ograniczona.

Tworzenie pary kluczy (prywatny/publiczny):

$ gpg --expert --full-gen-key # w nowszych wersjach
$ gpg --expert --gen-key      # w starych wersjach

Wypisanie posiadanych kluczy (publicznych i prywatnych)

$ gpg --list-keys
$ gpg --list-secret-keys

Eksport klucza publicznego

$ gpg --output <nazwa pliku> --armour --export <adres@email> # wersja tesktowa
$ gpg --output <nazwa pliku> --export <adres@email>          # wersja binarna

Informacje o kluczu z pliku

$ gpg <plik klucza>
$ gpg --with-fingerprint <plik klucza>

Import cudzego klucza do własnej bazy danych kluczy

$ gpg --import <plik klucza>

Podpisanie cudzego, zaimportowanego klucza publicznego

$ gpg --sign-key <ID>

Zaszyfrowanie wiadomości/pliku dla posiadacza klucza publicznego

$ gpg --encrypt --recipient <ID> --output <szyfrogram> <plik jawny>          # szyfrogram binarny
$ gpg --encrypt --recipient <ID> --armour --output <szyfrogram> <plik jawny> # szyfrogram tekstowy
$ gpg --encrypt --recipient <ID> --output <szyfrogram>                       # szyfrowanie tekstu z klawiatury
$ gpg --encrypt --recipient <ID> --armour --output <szyfrogram>              # j.w.

Deszyfrowanie wiadomości posiadanym kluczem prywatnym

$ gpg --decrypt --output <plik tajny> <szyfrogram>

Szyfrowanie algorytmem symetrycznym (hasłem)

$ gpg --encrypt --symmetric --output <szyfrogram> <plik tajny>
$ gpg --decrypt --output <plik tajny> <szyfrogram>

Podpisywanie wiadomości

$ gpg --sign <plik>          # podpis binarny (plik .gpg)
$ gpg --sign --armour <plik> # podpis tekstowy (plik .asc)

Sprawdzanie istniejącego podpisu

$ gpg --sign <plik.gpg> # podpis binarny
$ gpg --sign <plik.asc> # podpis tekstowy

Obsługa OpenSSL

OpenSSL to biblioteka implementująca prawie wszystkie popularne algorytmy szyfrujące. Udostępnia też program openssl dający dostęp do większości funkcjonalności bez pisania programów. Implementuje więcej algorytmów kryptograficznych niż GPG, ale nie zarządza kluczami za użytkownika.

Tworzenie klucza publicznego RSA (oraz lista dostępnych algorytmów)

$ openssl list -public-key-algorithms
$ openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:4096 -out <plik klucza>

Tworzenie pasującego klucza publicznego

$ openssl pkey -in <klucz prywatny> -pubout -out <klucz publiczny>

Generowanie wspólnego sekretu z klucza prywatnego i cudzego publicznego

$ openssl pkeyutl -derive -inkey <klucz prywatny> -peerkey <klucz publiczny> -out <plik wspólnego sekretu>

Tworzenie losowego pliku (256-bitowego) do szyfrowania dużego pliku algorytmem symetrycznym

$ openssl rand -base64 32 > <nazwa pliku>

Szyfrowanie pliku z użyciem klucza publicznego (tylko małe pliki, np. wyżej wygenerowany klucz)

$ openssl pkeyutl -encrypt -inkey <klucz publiczny> -pubin -in <plik tajny> -out <szyfrogram>

Deszyfrowanie pliku z użyciem klucza prywatnego

$ openssl pkeyutl -decrypt -inkey <klucz prywatny> -in <szyfrogram> -out <plik tajny>

Szyfrowanie pliku algorytmem symetrycznym (i lista algorytmów)

$ openssl enc -ciphers
$ openssl enc -aes-256-cbc -salt -in <plik tajny> -out <szyfrogram>
$ openssl enc -aes-256-cbc -salt -in <plik tajny> -out <szyfrogram> -pass pass:hasło
$ openssl enc -aes-256-cbc -salt -in <plik tajny> -out <szyfrogram> -pass file:<plik klucza>

Deszyfrowanie pliku algorytmem symetrycznym

$ openssl enc -d -aes-256-cbc -salt -in <szyfrogram> -out <plik tajny>
$ openssl enc -d -aes-256-cbc -salt -in <szyfrogram> -out <plik tajny> -pass pass:hasło
$ openssl enc -d -aes-256-cbc -salt -in <szyfrogram> -out <plik tajny> -pass file:<plik klucza>