Linux E X P R E S

Facebook

Komunikujeme a ukládáme data bezpečně s PGP/GPG (10) – síť důvěry

Šifrování

Po delší přestávce pokračuje seriál o bezpečné komunikaci. Po představení různých aplikací je tu opět něco techničtějšího, tentokrát web of trust, čili „síť důvěry“. 


Lesk a bída certifikačních autorit

Základním problémem při bezpečné komunikaci je, že potřebujeme znát druhou stranu komunikace – abychom věděli, že šifrujeme pro tu správnou osobu, resp. že zprávu podepsala správná osoba. V případě, že si lze osobně nebo nějakou jinou bezpečnou cestou vyměnit veřejné klíče nebo jejich otisky, je to jednoduché. Ale co když potřebujeme komunikovat třeba přes moře?

Existuje model založený na certifikačních autoritách (nebo jejich hierarchii). Známe ho například z oblasti certifikátů používaných na webu nebo pro elektronické podepisování zakotvené v legislativě. Certifikační autorita je v tomto případě subjekt, který je dostatečně důvěryhodný pro tvůrce webového prohlížeče, resp. pro státní správu, že získá výsadní postavení. To v případě prohlížeče znamená, že se jeho certifikát distribuuje společně s prohlížečem, u státní správy subjekt získá oprávnění vydávat „kvalifikované certifikáty“.

Model funguje tak, že si uživatel vygeneruje dvojici klíčů a žádost o certifikát. Na základě této žádosti a po proběhnutí ověřovací procedury certifikační autorita vystaví certifikát, který je opatřen jejím podpisem. Autorita zaručuje, že provedla ověření žadatele a že je tedy žadatel tím, za koho se vydává.

Stupeň ověření a tedy i náročnost procedury se u různých certifikátů liší. U certifikátů vystavených pro internetovou doménu se ověřuje pouze kontrola nad doménou, jiné certifikáty mohou vyžadovat osobní přítomnost či prověření více dokumentů apod.

Problém tohoto modelu je v tom, že bezpečnost stojí a padá s certifikačními autoritami. Jakmile je narušena důvěra v autoritu (například proto, že vydala certifikáty někomu, komu neměla), celé se to sesype jako domek z karet. Takových případů už byla řada, stačí zmínit třeba DigiNotar nebo Comodo. Častým zranitelným místem bývají „přeprodejci“, kteří nabízejí služby autorit (často hned několika) a mají přístup k privilegovanému rozhraní, ale ne vždy pečlivě dbají na všechny důležité zásady.

Distribuované řešení: síť důvěry

Proti centralizovanému řešení stojí řešení distribuované – nazývané „síť důvěry“ čili web of trust. V souvislosti s PGP popsal Phil Zimmermann tento koncept již v roce 1992 (v manuálu PGP 2.0). Principem je, že člověk může spoléhat na ověření totožnosti nejen tam, kde ho provedl sám (při osobním setkání a vzájemném prokázání totožnosti), ale i kde ho provedli jiní.

Pokud si člověk nechá podepsat svůj veřejný klíč jinými lidmi, čím víc podpisů získá, tím je obecně pravděpodobnější, že je tím, za koho se vydává. Samozřejmě nelze nikdy vyloučit, že tomu tak není – ale s počtem podpisů roste kvalita ověření totožnosti. Důležité je, že by se nikdo neměl chovat lehkomyslně při podepisování cizích klíčů a opravdu ověřit totožnost držitele klíče, typicky podle osobního průkazu (občanský průkaz, cestovní pas apod.).

Koncept navíc počítá s tím, že úroveň důvěry si určuje vždy sám uživatel. Záleží totiž i na tom, k čemu se konkrétně PGP/GPG používá – jakou důležitost zprávy mají a i jakou úroveň utajení a ověření originality je potřeba vyžadovat. Co se týká počtu podpisů klíče, sice více podpisů má větší váhu, zároveň je ale nepraktické snažit se jich shromáždit velké množství (třeba stovky nebo tisíce). V dobře fungující síti důvěry stačí jen několik málo podpisů.

Podepisování klíčů

lze použít buď některou z grafických utilit (popsaných v předchozích dílech) nebo klasický program gpg. Spustíte tedy něco jako:

gpg --sign-key uzivatel@domena.neco

Tento podpis je globální a promítne se v síti důvěry. Pokud si chcete nějaký klíč podepsat pro sebe, můžete použít lokální (neexportovatelnou) verzi:

gpg --lsign-key uzivatel@domena.neco

Podpis klíče lze ale i revokovat (pokud není nerevokovatelný) – v případě, že je soukromý klíč zkompromitován. Na to ale neexistuje jednoduchý parametr, je potřeba spustit:

gpg --edit-key uzivatel@domena.neco

Potom se zvolí revsig a program se postupně ptá na všechny podpisy provedené daným klíčem. Variantu přes --edit-key lze použít i při podepisování.

Důvěryhodnost klíčů

Existuje pět úrovní důvěryhodnosti, které může klíč mít:

  • unknown – neznámá úroveň; toto je výchozí úroveň pro klíč, o němž nic nevíte,

  • none – nedůvěryhodný klíč,

  • marginal – částečně důvěryhodný klíč,

  • full – zcela důvěryhodný klíč,

  • ultimate – „bezmezně“ důvěryhodný klíč.

Klíč, který si vygenerujete, získá v úložišti automaticky úroveň „ultimate“. Úroveň „full“ je vhodné nastavit klíčům, jejichž držitelům plně věříte, včetně toho, jak si počínají při podepisování cizích klíčů. Částečnou důvěryhodnost by pak měly mít klíče, u nichž víte, že jejich držitelé dodržují pravidla pro podepisování klíčů, ale „ruku do ohně“ za ně nedáte. Naopak klíč někoho, kdo se při podepisování cizích klíčů nebo jiném nakládání se svými klíči chová lehkomyslně, nedbale apod., je žádoucí označit za nedůvěryhodný.

Pro nastavování důvěryhodnosti klíčů se opět použije grafický nástroj nebo gpg --edit-key. Spustíte tedy něco jako:

gpg --edit-key uzivatel@domena.neco

Otevře se nabídka funkcí pro úpravu klíče, napíšete příkaz trust a z nabídnutých možností si vyberete požadovanou úroveň důvěryhodnosti.

Ověřování klíčů

Máte-li před sebou neznámý klíč, jak vyhodnotit jeho platnost? Síť důvěry v rámci PGP/GPG standardně funguje tak, že pro potvrzení platnosti klíče musí být splněny dvě podmínky:

  1. Klíč musí být podepsán vaším klíčem, zcela důvěryhodným klíčem nebo třemi částečně důvěryhodnými klíči.

  2. Zpětná cesta v síti od daného klíče k tomu vašemu smí být nejvýše pět kroků.

Parametry podmínek lze měnit – například snížit počet částečně důvěryhodných podpisů na dva nebo změnit maximální délku cesty. Jaké dopady takové změny mají, je celkem zřejmé. Čím kratší cesta a čím více částečně důvěryhodných (nebo i plně důvěryhodných!) podpisů je potřeba, tím více klíčů bude považováno za nedostatečně ověřené.

Aby síť fungovala, je potřeba ji sestavit:

gpg --update-trustdb

Příkaz pracuje interaktivně – ptá se na důvěryhodnost jednotlivých klíčů (u nichž ještě nebyla nastavena). Existuje i neinteraktivní varianta příkazu (--check-trustdb), kterou lze použít pro dávkovou aktualizaci; ta ale obvykle není nutná. Žádoucí však je, obnovovat data z keyserveru, aby se stáhly nové podpisy, případně revokace:

gpg --refresh-keys

Pomocí parametrů při spouštění nebo v konfiguraci lze ovlivnit vlastnosti sítě důvěry popsané výše:

gpg --update-trustdb --completes-needed 2 --marginals-needed 4 --max-cert-depth 3

Tímto se zvýší požadovaný počet plně i částečně důvěryhodných podpisů na dva, resp. čtyři, a maximální délka cesty se zkrátí na tři kroky.

Jak si stojí nějaký klíč z hlediska důvěryhodnosti (nastavené jednotlivě nebo v rámci budování sítě důvěry) a z hlediska platnosti vyhodnocené na základě sítě důvěry, se dá zjistit pomocí příkazu --edit-key.

Zobrazení podpisů klíčů

Pokud vás zajímá, jací konkrétní uživatelé podepsali určitý klíč, můžete si je zobrazit:

gpg --list-sigs 8E42FBFB

Pokud identifikátor klíče vynecháte, zobrazí se podpisy všech klíčů. Podpisy můžete nechat hned i ověřit (jako když se ověřuje podpis na libovolných datech – z výkonnostních důvodů se však neověřuje revokace podpisů):

gpg --check-sigs 8E42FBFB

Pozor – pokud nemáte importovány veřejné klíče pro některé podpisy, dozvíte se jen identifikátory těchto klíčů, ale už ne, komu který klíč patří, ani zda je vůbec platný (není expirovaný nebo revokovaný). Samozřejmě ani nelze tyto podpisy ověřit. Pokud jsou klíče k dispozici na keyserveru, není samozřejmě nic jednoduššího, než si je odtamtud stáhnout, protože jejich identifikátory znáte.

Čipové karty

V příštím díle se podíváme čipové karty, protože s nimi GPG (pro někoho možná překvapivě) umí pracovat. Tedy alespoň s některými.



Diskuze (1) Nahoru