Public key infrastructure (PKI)

Pavol Kyčina, 524951@mail.muni.cz

Motivácia

Ak chceme používať asymetrickú kryptografiu, musíme vedieť verejný kľúč druhej strany (server/človek/organizácia) a musíme mať istotu, že daný kľúč naozaj tej strane patrí. Bez tejto istoty by bol možný man-in-the-middle útok napríklad podvrhnutím verejného kľúča útočníka a my by sme si vymieňali dôveryhodné informácie s niekým iným. Je teda potrebné vytvoriť systém, kde budeme mať možnosť si dôveryhodnosť verejného kľúča neznámeho subjektu overiť.

Hierarchia v PKI a certifikačné autority

Popísaný problém vieme riešiť viacerými spôsobmi. Jeden z nich je, že si necháme náš verejný kľúč u niekoho overiť a on bude potom ostatným vravieť, že môžu nášmu verejnému kľúču dôverovať. Pri overení nám zároveň tento subjekt dá certifikát, kde je napísané, že každý kto nám neverí, že daný kľúč patrí nám, si to môže u neho overiť. Ak bude tomuto overovaciemu subjektu veriť dostatočne veľa z nás, môžeme si s istotou vymieňať verejné kľúče medzi sebou. Takémuto subjektu hovoríme certifikačná autorita (CA).
Aby sme predišli single-point-of-failure a zároveň škálovali výkonnostne a geograficky, je takýchto CA veľmi veľa. Sú usporiadané hierarchicky, teda jedna CA môže vydať certifikát pre inú CA.
Koncovým bodom je tzv. "trust anchor", ktorý nie je overiteľný certifikátom, ale môžeme mu veriť na základe inej skutočnosti (verejne známy verejný kľúć, overiteľný úradmi, fyzicky overiteľný, atď..).

Čo je PKI

Z anglickej wikipédie: A public key infrastructure (PKI) is a set of roles, policies, hardware, software and procedures needed to create, manage, distribute, use, store and revoke digital certificates and manage public-key encryption.

Podstatné vlastnosti:

Certifikát X.509

Štruktúra certifikátu - verzia 3, prevzaté z wikipédie

PKI a linux

Základný príkaz v linuxe: openssl
Popis príkazu, prevzaté z man page:


Na fedore si môžeme pridať vlastné certifikáty do priečinku
/etc/pki/ca-trust/source/anchors/
nasledované príkazom
update-ca-trust
Na debiane je to priečinok
/usr/local/share/ca-certificates/
nasledovaný príkazom
update-ca-certificates
Prípadne môžeme použiť univerzálnejší príkaz trust.

Vytvorenie žiadosti

Ak chceme vytvoriť žiadosť o certifikát (certificate signing request = CSR), môžeme použiť príkaz napr.

openssl req -new -key moj_sukromny_klucik.key -out ziadost.csr
Ten sa nás môže spýtať na potrebné informácie, ktoré sú uvedené v tabuľke (prevzaté z wikipédie)
DN Information Description Sample
CN Common Name This is fully qualified domain name that you wish to secure *.wikipedia.org
O Organization Name Usually the legal name of a company or entity and should include any suffixes such as Ltd., Inc., or Corp. Wikimedia Foundation, Inc.
OU Organizational Unit Internal organization department/division name IT
L Locality Town, city, village, etc. name San Francisco
ST State Province, region, county or state. This should not be abbreviated (e.g. West Sussex, Normandy, New Jersey). California
C Country The two-letter ISO code for the country where your organization is located US
EMAIL Email Address The organization contact, usually of the certificate administrator or IT department

Tento príkaz navyše predpokladá už vytvorený súkromný kľúč, ktorý môžeme predom vytvoriť napríklad príkazom
openssl genpkey -algorithm ED25519 -out moj_sukromny_klucik.key

Alternatívy k PKI

Podobný hierarchický systém v Internete využíva aj DNS. Keďže rozšírenie DNSSEC zaisťuje integritu a pravdivosť poslanej odpovede, môžeme toto s výhodou využiť a verejný kľúč (ktorý je určený pre nasledovnú komunikáciu so serverom na danej doméne) pribaliť do DNS odpovede, napríklad ako TLSA record. Takéto riešenie sa nazýva DNS-based Authentication of Named Entities (DANE)
Inou alternatívou k certifikačným autoritám je napríklad Web of trust.

Literatúra