COMPUTERWORLD
Specializovaný týdeník o výpočetní technice

Seriál
o bezpečnosti
a informačním soukromí

Část 53 - CW 29/98

Kryptografická rozhraní

Radim Peša

Služby kryptografie jsou využívány ve stále více aplikacích. Jsou potřebné např. pro zajištění služeb, jako jsou důvěrnost a integrita zpracovávaných dat, autentizace, neodmítnutelnost atd. S tím vyvstává otázka jak dosáhnout optimálního propojení kódu aplikace s moduly implementujícími jednotlivé kryptografické funkce?

Implementace kryptografických funkcí může být integrována přímo do kódu aplikace. To ovšem s sebou přináší určité nevýhody: Změna kteréhokoli člena dvojice aplikace -- kryptografické moduly znamená zásah do celého systému. Navíc ne každý vývojář softwaru je odborníkem na kryptografii.

Proto se odděluje aplikaci a její vývoj od implementace kryptografických mechanizmů, které používá a hledají se cesty jak standardizovat volání bezpečnostních služeb v aplikacích. Za tímto účelem byla vyvinuta kryptografická rozhraní, kterými se budeme zabývat.

Stejně jako se liší požadavky různých aplikací na zajištění bezpečnosti a úroveň přístupu ke kryptografickým funkcím, liší se i jednotlivá kryptografická rozhraní. Aplikace využívající služby kryptografie můžeme rozdělit do dvou skupin:

1. Aplikace bez povědomí o kryptografii (cryptographically unaware): Jedná se o aplikace, které potřebují pouze základní omezenou množinu volání kryptografického rozhraní pro ochranu dat. Typickým příkladem je textový editor, poštovní agent. Do této kategorie patří většina aplikací.

2. Aplikace s povědomím o kryptografii (cryptographically aware): potřebují množinu volání, která jim umožní přístup ke kryptografickým modulům s možným maximem jejich kontroly. Příkladem takové aplikace může být server certifikační autority.

Na tom, do které z uvedených skupin aplikace patří, závisí rozhodnutí jaké rozhraní při implementaci použít.

Izolace kódu aplikace od kryptografických služeb přináší výhody jak při vývoji aplikací, tak při jejich následném nasazení a údržbě. Jsou to především následující:

· Modularita softwaru: Oddělení rozdílně zaměřených částí systému (tato vlastnost je společná pro všechna programová rozhraní).

· Nezávislost na použitém bezpečnostním mechanizmu : Použitím různým kryptografických modulů, implementujících různé kryptografické funkce, může stejná aplikace využívat kryptografické funkce o různé síle požadované v závislosti na prostředí, ve kterém je nasazena.

· Vývojáři nejsou zatěžováni detaily kryptografických funkcí -- aplikace neobsahuje vlastní implementaci kryptografických algoritmů.

Aplikace, které nemají implementovány kryptografické funkce, ale využívají volání kryptografického rozhraní, se mohou vyhnout exportním omezením na vývoz silné kryptografie. V exportní verzi aplikace může být kryptografický modul nahrazen modulem podporujícím pouze kryptografické funkce o síle, která nepodléhá exportním omezením. (Tento způsob obcházení exportních omezení z USA se sice dříve také zakazoval či znepříjemňoval, v současné době s tím už nebývají problémy, ale najisto s bezproblémovým exportem počítat nelze.)

· Oddělení vývoje aplikací od vývoje bezpečnostních mechanizmů nižších vrstev -- vývojáři aplikací mohou při použití standardních rozhraní používat kryptografické moduly dodané třetí stranou. A naopak je možné vyvíjet a nabízet samostatné kryptografické moduly implementující požadované algoritmy.

Kryptografická rozhraní

Kryptografických rozhraní existuje celá řada, můžeme si je rozdělit v závislosti na jejich určení podle klasifikace použité v projektu ICE (International Cryptography Experiment) (http://www.tis.com/research/crypto/crypt_ice.html) sponzorovaném organizací DARPA (viz obr. 1). Rozhraní můžeme rozdělit do tří skupin:

· SSAPI (Security Service APIs) jsou rozhraní pracující na vysoké úrovni (abstrakce). Jsou určená pro přístup k bezpečnostním službám, jako jsou autentizace, integrita, důvěrnost, řízení přístupu, nepopíratelnost, které poskytují bezpečnostní mechanizmy (Kerberos, ...). Mezi SSAPI je možné zařadit:

- Generic Security Services API (GSS-API)
- Microsoft Security Provider Interface (SSPI)
- vyšší funkce rozhraní Microsoft CryptoAPI 2.0
- Common Secutity Services Manager API (CSSM API)

· SSSAPI (Security Support Service APIs) -- určené pro pomocné bezpečnostní funkce. Zajišťují služby jako

management certifikátů a klíčů, autentizace, depozitování a obnova klíčů atd.

· CAPI (Cryptographic APIs): rozhraní určená pro přístup ke kryptografickým modulům. V kryptografických modulech jsou implementovány samotné kryptografické algoritmy (DES, MD5, ...). Kryptografické moduly mohou být jak softwarové, tak hardwarové. Z existujících rozhraní sem patří:

RSA Labs Crypto Token Interface (Cryptoki; PKCS #11)

Microsoft CryptoAPI 1.0

Common Security Services Manager API (CSSM)

Doporučená rozhraní

Na míře kryptografického povědomí aplikace závisí i rozhodnutí, jaké rozhraní při implementaci použít. NSA vytvořila tým, který vydává doporučení pro výběr a použití kryptografických rozhraní (SSAPI/CAPI). Zatím poslední (celkem již třetí) doporučení vyšlo v červenci 1997 (http://www.tis.com/research/crypto/crypt_ice.html).

Je v něm doporučeno použití následujících rozhraní:

· Generic Security Services API & Independent Data Unit Protection GSS-API: GSS API vytvořila v roce 1993 pracovní skupina CAT (Common Authentication Technology) IETF (Internet Engeneering Task Force). Bylo popsáno v RFC 1508. Původně bylo určeno pro ochranu spojově orientované komunikace. Později přibylo rozšíření IDUP pro ochranu dat v aplikacích typu "ulož a pošli" a v lednu 1997 byla v RFC 2078 publikováno GSS-API verze 2.

· Common Security Services Manager API: je jádrem CDSA (Common Data Security Architecture) firmy Intel. CSSM-API nabízí služby vyšší úrovně, jako jsou management klíčů nebo obnova klíčů. Vlastní CAPI rozhraní (SPI -- Service Provider Interface) je navržen na nízké úrovni podobně jako Cryptoki.

· Crypto API -- vyvinula firma Microsoft. Původní verze 1.0 podporovala šifrování a digitální podpis. Ve verzi 2.0 přibyly autentizace a management certifikátů. Rozhraní je součástí operačního systému Windows NT. Slouží pro přístup ke kryptografickým modulům (v terminologii firmy Microsoft zvaným Cryptographic Service Provider -- CSP). Je určeno pro aplikace, u kterých se předpokládá povědomí o kryptografii.

· PKCS #11 Cryptoki: vyvinula firma RSA Labs. Je součástí rodiny standardů Public Key Cryptography Standards (PKCS). Je určeno pro přístup k šifrovacím tokenům (vhodné pro autentizaci uživatele). Vyžaduje vysokou úroveň povědomí o kryptografii.

Na obr. 2 jsou doporučená rozhraní uspořádána podle míry kryptografického povědomí, které se očekává od aplikace využívající rozhraní.

Čím výše je rozhraní v obrázku zakresleno, tím vyšší úroveň abstrakce a nižší znalost kryptografického zařízení je vyžadována od aplikace, která ho používá. Rozhraní je obecnější, využívá omezenou množinu volání.

Jeho nevýhodou je omezení možnosti ovlivnění práce kryptografického zařízení. Je vhodné pro běžné aplikace (aplikace bez povědomí o kryptografii), které vyžadují přístup pouze k omezené množině základních kryptografických funkcí.

Naopak níže položené rozhraní vyžaduje od aplikace (a jejího vývojáře) detailní znalost problematiky kryptografie a použitých zařízení. Tím se ovšem také zvyšuje nebezpečí, že dojde k ohrožení bezpečnosti systému způsobenému chybou při vývoji aplikace. Na druhou stranu tato rozhraní nabízejí větší možnosti práce s kryptografickými funkcemi.

GSS/IDUP poskytuje nejbezpečnější rozhraní, ale má také nejvíce omezené možnosti ovládání kryptografie. CSSM-API, CryptoAPI a Cryptoki poskytují aplikacím více možností, ale je u nich vyšší riziko narušení bezpečnosti nesprávným použití rozhraní.

Protože u většiny aplikací není potřebná vysoká úroveň kryptografického povědomí, doporučení NSA radí vývojářům aplikací používat GSS/IDUP. CSSM-API, CryptoAPI a Cryptoki by se měli používat pouze při vývoji aplikací vyžadujících vysokou úroveň kryptografického povědomí. Mimo to je doporučeno jejich použití pro implementaci nižších mechanizmů obecného rozhraní GSS/IDUP a jako rozhraní kryptografických modulů (viz obr. 3).

Neustálý vývoj aplikací a stále probíhající prudké změny v oblasti kryptografie vyžadují nezbytnost použití standardních kryptografických rozhraní, zvláště u velkých projektů s předpokládanou dlouhou dobou životnosti. Jejich absence či podcenění při vývoji se může po několika letech provozu, například při změně požadavků na bezpečnost, velmi vymstít. Dobré kryptografické rozhraní je stejně potřebné jako dobré pneumatiky -- automobil sice pojede i bez nich, případně i s pneumatikami podřadné kvality, ale po pár(set) metrech asi poznáte, že to jaksi není ono.


| COMPUTERWORLD - seriál o bezpečnosti | COMPUTERWORLD | IDG CZ homepage |