Sdílet prostřednictvím


Služby šifrování

Veřejné sítě, jako je například Internet, neposkytují prostředky zabezpečené komunikace mezi entitami. Komunikace prostřednictvím těchto sítí je náchylná ke čtení nebo měnění neoprávněným třetím stranám. Kryptografie pomáhá chránit data od zobrazení, poskytuje způsoby k rozpoznání, zda byla data změněna, a pomáhá poskytnout zabezpečenou komunikaci přes jinak nezabezpečené kanály. Například data můžou být šifrovány pomocí kryptografického algoritmu, přenášena v šifrovaném stavu a později dešifrována určenou stranou. Pokud třetí strana zachycuje zašifrovaná data, bude obtížné je dešifrovat.

V rozhraní .NET Framework třídy v oboru názvů System.Security.Cryptography spravují mnoho podrobností kryptografie pro vás. Některé jsou obaly pro nespravované Microsoft Cryptography API (CryptoAPI), zatímco ostatní jsou čistě spravované implementace. Nepotřebujete být odborník v kryptografii, abyste mohli používat tyto třídy. Když vytvoříte novou instanci některého šifrovacího algoritmu tříd, klíče jsou vytvořeny automaticky pro snadné používání a jejich výchozí vlastnosti jsou bezpečné a co nejvíce zabezpečené.

Tento přehled obsahuje souhrn metod šifrování a postupy podporované rozhraním .NET Framework, včetně ClickOnce manifestů, Suite B a podporu Kryptografické služby nové generace (CNG) zavedené v .NET Framework verze 3.5.

Tento přehled obsahuje následující oddíly:

  • Kryptografické primitivy

  • Šifrování tajného klíče

  • Šifrování veřejného klíče

  • Digitální podpisy

  • Hodnoty hash

  • Generátor pseudonáhodných čísel

  • ClickOnce manifesty

  • Podpora Suite B

  • Třídy Kryptografické služby nové generace (CNG)

  • Příbuzná témata

Další informace o kryptografii a o službách společnosti Microsoft, součástech a nástrojích, které umožňují přidat kryptografické zabezpečení pro vaše aplikace, naleznete v tématu Vývoj Win32 a modelu COM, oddíl zabezpečení této dokumentace.

Kryptografické primitivy

V typické situaci tam, kde se používá kryptografie, obě strany (Alice a Bob) komunikují prostřednictvím nezabezpečeného kanálu. Alice a Bob chtějí zajistit, aby jejich komunikace zůstala nesrozumitelná pro kohokoli, kdo může poslouchat. Navíc vzhledem k tomu, že Alice a Bob jsou na vzdálených místech, Alice musí zajistit, že informace, které ona obdrží od Boba, nebyly upraveny kýmkoli během přenosu. Kromě toho také musí zajistit, že informace skutečně pocházejí od Boba a nikoliv od někoho, kdo zosobňuje Boba.

Kryptografie slouží k dosažení těchto cílů:

  • Důvěrnost: Pomoci zabránit načítání data nebo identity uživatele.

  • Integrita dat: K ochraně dat před změnou.

  • Ověřování: Aby bylo zajištěno, že data pochází od určité osoby.

  • Neodmítnutí: Chcete-li zabránit určité straně odepření, že odeslali zprávu.

K dosažení těchto cílů můžete dospět kombinací algoritmů a postupů, které jsou známé jako kryptografická primitiva k vytvoření šifrovacího schématu. V následující tabulce jsou uvedeny kryptografická primitiva a jejich použití.

Kryptografická primitiva

Pomocí

Šifrování tajného klíče (symetrické šifrování)

Transformace se provádí na dataech, která nemají být přečtena třetími stranami. Tento typ šifrování používá jediný sdílený tajný klíč k šifrování a dešifrování dat.

Šifrování veřejného klíče (asymetrické šifrování)

Transformace se provádí na dataech, která nemají být přečtena třetími stranami. Tento typ šifrování používá pár veřejného/soukromého klíče k šifrování a dešifrování dat.

Kryptografický podpis

Pomáhá ověřit, že data pocházejí od určité skupiny, tím, že vytvoří digitální podpis, který je jedinečný pro tuto skupinu. Tento proces také používá funkce hash.

Kryptografické hodnoty hash

Mapování z jakékoli délky na pevnou délku sekvence bajtů. Hodnoty hash jsou statisticky jedinečné; jinou dvoubajtovou sekvenci algoritmus hash nevytvoří na stejnou hodnotu.

Zpět na začátek

Šifrování tajného klíče

Algoritmy šifrování tajného klíče používají jediný tajný klíč k šifrování a dešifrování dat. Klíč musíte zabezpečit od přístupu neoprávněnými agenty, protože každá strana, která má klíč, jej může použít k dešifrování vašich dat nebo šifrování svých dat a říkající, že pochází od vás.

Šifrování tajného klíče se také nazývá symetrické šifrování, protože stejný klíč se používá pro šifrování a dešifrování. Algoritmy šifrování tajného klíče jsou velmi rychlé (v porovnání s algoritmy veřejného klíče) a dobře se hodí k provádění kryptografických transformací na velké datové proudy. Algoritmy asymetrického šifrování, jako například RSA, jsou omezeny matematicky, kolik dat můžou zašifrovat. Algoritmy symetrického šifrování obecně nemají tyto problémy.

Typ algoritmu tajného klíče nazvaný bloková šifra slouží k šifrování jednoho bloku dat současně. Bloky šifer, například algoritmus DES (Data Encryption Standard), TripleDES a standard AES (Advanced Encryption Standard), kryptograficky transformují vstupní blok n bajtů do výstupního bloku zašifrovaných bajtů. Pokud chcete zašifrovat nebo dešifrovat sekvence bajtů, musíte tak učinit blok po bloku. Protože n je malé (8 bajtů pro algoritmus DES a TripleDES; 16 bajtů [výchozí], bajtů 24 nebo 32 bajtů pro standard AES), hodnoty dat, které jsou větší než n je nutné šifrovat v jednom bloku v čase. Hodnoty dat, které jsou menší než n musí být rozšířeny na n ke zpracování.

Jedna jednoduchá forma blokové šifry se nazývá režim electronického číselníku (ECB). ECB režim není považován za zabezpečený, protože nepoužívá inicializační vektor k inicializaci prvního bloku prostého textu. Pro daný tajný klíč k, jednoduchá bloková šifra, která nepoužívá inicializační vektor, bude šifrovat stejný vstupní blok prostého textu do stejného výstupního bloku šifrovaného textu. Proto pokud máte duplicitní bloky v nešifrovaném vstupním datovém proudu, budete mít duplicitní bloky ve výstupním datovém proudu šifrovaného textu. Tyto duplicitní výstupní bloky upozorňují neoprávněné uživatele na slabé použité algoritmy šifrování, které mohou být zaměstnány, a možné způsoby útoku. Režim šifrování ECB je vystaven proto ohrožující analýze, a nakonec, ke zjištění klíče.

Třídy blokové šifry, které jsou k dispozici základní knihovně tříd, používají výchozí režim zřetězení nazývaný zřetězení blokových šifer (CBC), i když toto výchozí nastavení můžete změnit, pokud chcete.

CBC šifry překonávají problémy spojené s ECB šiframi pomocí inicializačního vektoru (IV) k šifrování prvního bloku prostého textu. Každý následující blok prostého textu je podroben bitové operaci XOR (XOR) s předchozím blokem šifrovaného textu dříve, než je zašifrován. Každý blok šifrovaného textu je proto závisly na všech předchozích blocích. Když je tento systém použit, běžné hlavičky zpráv, které mohou být známy pro neoprávněného uživatele, nemohou být použity pro zpětné sestavení klíče.

Jedním způsobem, jak ohrozit data, která jsou zašifrována pomocí CBC šifry, je vyčerpávající vyhledávání každého možného klíče. V závislosti na velikosti klíče, který se používá k provedení šifrování, tento typ vyhledávání je velmi časově náročný i nejrychlejší počítače a proto je neuskutečnitelný. Větší velikosti klíče jsou více obtížně k dešifrování. Ačkoli šifrování neprovede teoreticky nemožné načtení zašifrovaných dat pro nežádoucí osobu, zvýší ohromně náklady na to, to udělat. Pokud trvá tři měsíce vyčerpávající hledání k načtení dat, která jsou smysluplná pouze pro několik dní, metoda vyčerpávajícího vyhledávání je nepraktická.

Nevýhodou šifrování tajného klíče je, že předpokládá, že se obě strany dohodly na klíči a IV a sdělily jejich hodnoty. IV se považuje za tajný a může být přenášen ve formátu prostého textu se zprávou. Avšak klíč musí být uchováván tajně od neoprávněných uživatelů. Z těchto důvodů tajný klíč šifrování se často používá spolu s šifrování s veřejným klíčem k soukromému sdělování hodnot klíče a IV.

Za předpokladu, že Alice a Bob jsou dvěma stranami, které chtějí komunikovat prostřednictvím nezabezpečeného kanálu, pravděpodobně používají tajný klíč šifrování následujícím způsobem: Alice a Bob se zavazují používat jeden konkrétní algoritmus (například standard AES) s konkrétním klíčem a IV. Alice vytvoří zprávu a vytvoří síťový datový proud (možná pojmenovaný kanál nebo v e-mail v síti), na který chce odeslat zprávu. Dále šifruje text pomocí klíče a IV a odešle šifrovanou zprávu a IV Bobovi prostřednictvím sítě intranet. Bob obdrží šifrovaný text a dešifruje ho pomocí IV a dříve dohodnutého klíče. Pokud je přenos zachycen, zachytávací modul nemůže obnovit původní zprávu, protože nezná klíč. V tomto scénáři pouze klíč musí zůstat tajný. V reálném scénáři, Alice a Bob generují tajný klíč a používají šifrování veřejného klíče (asymetrického) k přenosu tajného klíče (symetrického) jiné straně. Další informace o šifrování s veřejným klíčem naleznete v dalším oddíle.

.NET Framework obsahuje následující třídy, které implementují šifrovací algoritmy tajného klíče:

Zpět na začátek

Šifrování veřejného klíče

Šifrování s veřejným klíčem používá soukromý klíč, který musí být uchováván tajně od neoprávněných uživatelů a veřejný klíč, který je možné provést na veřejný všem uživatelům. Veřejný klíč a soukromý klíč jsou matematicky spojeny; data, která jsou zašifrována pomocí veřejného klíče lze dešifrovat pouze se soukromým klíčem, a data, která jsou podepsána soukromým klíčem, lze ověřit pouze pomocí veřejného klíče. Veřejný klíč může být zpřístupněn všem; je použit pro šifrování dat tak, že budou odeslány držiteli soukromého klíče. Kryptografické algoritmy veřejného klíče se také nazývají algoritmy asymetrické, protože je požadován jeden klíč k šifrování dat a je požadován jiný klíč k dešifrování dat. Základní kryptografické pravidlo zakazuje opětovné použití klíčů a oba klíče musí být jedinečné pro každou relaci komunikace. V praxi jsou však obvykle asymetrické klíče dlouhodobé.

Obě strany (Alice a Bob) mohou použít šifrování veřejného klíče následujícím způsobem: Nejprve Alice generuje pár veřejného/soukromého klíče. Pokud Bob chce Alici odeslat šifrovanou zprávu, požádá ji o její veřejný klíč. Alice odesílá Bobovi veřejný klíč po nezabezpečené síti a Bob používá tento klíč k zašifrování zprávy. Bob odešle šifrovanou zprávu Alici a ona ji dešifruje pomocí vlastního soukromého klíče. Jestliže Bob obdržel klíč Alice přes nezabezpečený kanál, například veřejnou síť, Bob je otevřen útoku prostředníkem. Proto musí Bob ověřit s Alicí, že má správnou kopii jejího veřejného klíče.

Během přenosu veřejného klíče Alice může neoprávněný agent zachytit klíč. Navíc stejný agent může zachytit šifrovanou zprávu od Boba. Agent však nemůže dešifrovat zprávu pomocí veřejného klíče. Zprávu lze dešifrovat pouze pomocí soukromého klíče Alice, který není přenášen. Alice nepoužívá svůj soukromý klíč k šifrování odpovědi Bobovi, protože kdokoli s veřejným klíčem může zprávu dešifrovat. Pokud Alice chce odeslat zprávu zpět Bobovi, požádá Boba o jeho veřejný klíč a své zprávy pomocí tohoto veřejného klíče šifruje. Bob poté dešifruje zprávy pomocí jemu přidruženého soukromého klíče.

V tomto scénáři Alice a Bob používají šifrování veřejného klíče (asymetrické) k přenosu tajného (symetrického) klíče a používají šifrování tajného klíče pro zbývající část jejich relace.

Následující seznam nabízí srovnání mezi kryptografickými algoritmy veřejného klíče a tajného klíče:

  • Kryptografické algoritmy veřejného klíče používají vyrovnávací paměť pevné velikosti, kde kryptografické algoritmy tajného klíče používají vyrovnávací paměť proměnné délky.

  • Algoritmy veřejného klíče nelze použít k zřetězení dat společně do proudů dat způsobem, jakým to mohou udělat algoritmy tajného klíče, protože pouze malé množství dat může být zašifrováno. Asymetrické operace tedy nepoužívají stejný model vysílání datového proudu jako symetrické operace.

  • Šifrování s veřejným klíčem má mnohem větší keyspace (rozsah možných hodnot pro klíč) než šifrování tajného klíče. Proto je šifrování s veřejným klíčem méně náchylné k vyčerpávajícím útokům, pomocí kterých lze zkusit každý možný klíč.

  • Veřejné klíče jsou snadno distribuovatelné, protože nemají být zabezpečeny, za předpokladu, že existuje nějaký způsob ověření identity odesílatele.

  • Některé algoritmy veřejného klíče (například RSA a DSA, ale nikoli Diffie-Hellman) lze použít k vytvoření digitálních podpisů k ověření identity odesílatele dat.

  • Algoritmy veřejného klíče jsou velmi pomalé ve srovnání s algoritmy tajného klíče a nejsou určeny k zašifrování velkých objemů dat. Algoritmy veřejného klíče jsou užitečné pouze pro přenos velmi malého množství dat. Šifrování s veřejným klíčem se obvykle používá k zašifrování klíče a IV, který bude použit algoritmem tajného klíče. Po přenesení klíče a IV se šifrování tajného klíče používá pro zbývající část relace.

.NET Framework obsahuje následující třídy, které implementují šifrovací algoritmy veřejného klíče:

RSA umožňuje šifrování a podepisování, ale DSA lze použít pouze pro podepsání a Diffie-Hellman lze použít pouze pro generování klíče. Obecně platí, že algoritmy veřejného klíče jsou více omezeny v jejich použití, než algoritmy soukromého klíče.

Zpět na začátek

Digitální podpisy

Algoritmy veřejného klíče lze také použít pro vytvoření digitálních podpisů. Digitální podpisy ověřují totožnost odesílatele (v případě, že důvěřujete veřejnému klíči odesílatele) a pomáhají chránit integritu dat. Pomocí veřejného klíče generovaného Alicí, příjemce dat od Alice může ověřit, zda jej Alice odeslala, porovnáním digitálního podpisu dat Alice a veřejného klíče Alice.

Chce-li Alice použít šifrování veřejného klíče k digitálnímu podepsání zprávy, musí Alice nejprve použít algoritmus hash na zprávu a vytvořit tak hodnotu hash. Hodnota hash je kompaktní a jedinečná reprezentace dat. Alice pak zašifruje hodnotu hash pomocí svého soukromého klíče k vytvoření svého osobního podpisu. Po obdržení zprávy a podpisu Bob dešifruje podpis pomocí veřejného klíče Alice k obnovení hodnoty hash a vytvoří novou hodnotu hash zprávy pomocí stejného algoritmu hash, který použila Alice. Jestliže hodnota hash, kterou Bob vypočítá, přesně odpovídá hodnotě hash přijmuté od Alice, Bob je ujištěn, že zpráva pochází od vlastníka soukromého klíče a že data nebyla změněna. V případě, že Bob důvěřuje, že Alice je vlastník soukromého klíče, ví, že zpráva pochází od Alice.

PoznámkaPoznámka

Podpis může být ověřen kýmkoli, protože veřejný klíč odesílatele je společná znalost a je obvykle součástí formátu digitálního podpisu.Tato metoda nezachová utajení zprávy; aby byla zpráva tajná, je nutné ji také šifrovat.

.NET Framework obsahuje následující třídy, které implementují algoritmy digitálního podpisu:

Zpět na začátek

Hodnoty hash

Algoritmy hash mapují binární hodnoty o libovolné délce na menší binární hodnoty pevné délky, známé jako hodnoty hash. Hodnota hash je číselnou reprezentací části dat. Pokud vytvoříte hodnotu hash odstavce prostého textu a změníte byť jen jedno písmeno odstavce, následná hodnota hash vytvoří jinou hodnotu. Pokud hodnota hash je kryptograficky silná, její hodnota se změní významně. Například pokud je jeden bit zprávy změněn, silná hash funkce může způsobit, že se výstup liší o 50 procent. Mnoho vstupních hodnot může mít stejnou hodnota hash na výstupu. Je však rovněž nemožné najít dva odlišné vstupy tohoto algoritmu, které vytvoří hodnotu hash stejnou.

Obě strany (Alice a Bob) mohou použít funkce hash k zajištění integrity zprávy. Měli by vybrat algoritmus hash k podepsání svých zpráv. Alice by měla napsat zprávu, a pak vytvořit hodnotu hash této zprávy pomocí vybraného algoritmu. Měli by pak postupovat jednou z následujících metod:

  • Alice odesílá prostý text zprávy a hodnotu hash zprávy (digitální podpis) Bobovi. Bob obdrží a vytvoří hodnotu hash zprávy a porovná hodnotu hash s hodnotou hash, kterou obdržel od Alice. Pokud jsou hodnoty hash shodné, zpráva byla nezměněna. Pokud hodnoty nejsou shodné, byla zpráva změněna poté, co jo Alice napsala.

    Tato metoda bohužel nestanoví pravost odesílatele. Každý může zosobnit Alici a odeslat zprávy Bobovi. Mohou použít stejný algoritmus hash k podepsání své zprávy a vše, co Bob může určit je, že zpráva odpovídá jejímu podpisu. Toto je jedna z forem útoku prostředníkem. Další informace naleznete v tématu Příklad zabezpečené komunikace Kryptografické služby nové generace (CNG).

  • Alice odesílá prostý text zprávy Bobovi přes nezabezpečený veřejný kanál. Odešle hodnotu hash zprávy Bobovi prostřednictvím soukromého zabezpečeného kanálu. Bob obdrží prostý text zprávy, vytvoří pro něj hodnotu hash a porovná hodnotu hash se soukromě vyměněnou hodnotou hash. Pokud se hodnoty hash shodují, Bob ví dvě věci:

    • Zpráva nebyla změněna.

    • Odesílatel zprávy (Alice) je platný.

    Aby tento systém mohl fungovat, musí Alice skrýt její původní hodnotu hash všem stranám kromě Boba.

  • Alice odešle zprávu s prostým textem Bobovi přes nezabezpečený veřejný kanál a umístí svou hodnotu hash zprávy na její veřejně zobrazitelný web.

    Tato metoda zabraňuje falšování zprávy tím, že zabrání všem uživatelům úpravy hodnoty hash. Ačkoli zpráva a její hodnota hash může být přečtena kýmkoli, hodnota hash může být změněna pouze Alicí. Útočník, který chce Alici zosobnit, by musel vyžadovat přístup k webovému serveru Alice.

Žádná z předchozích metod nezabrání, aby někdo přečetl zprávy Alice, protože jsou přenášeny ve formátu prostého textu. Úplné zabezpečení obvykle vyžaduje digitální podpisy (podepisování zpráv) a šifrování.

.NET Framework obsahuje následující třídy, které implementují algoritmy hash:

PoznámkaPoznámka

V roce 1996 byly zjištěny chyby v návrhu algoritmu MD5 a SHA-1 bylo doporučována místo něj.V roce 2004 byly zjištěny další chyby a algoritmus MD5 se již nepovažuje za bezpečný.Algoritmus SHA-1 byl také shledán jako nezabezpečený a SHA-2 je nyní doporučován místo něj.

Zpět na začátek

Generátor pseudonáhodných čísel

Generování náhodných čísel je nezbytné pro mnoho kryptografických operací. Například kryptografické klíče musí být co nejvíce náhodné, jak jen to jde, aby nebylo možné je reprodukovat. Kryptografické generátory náhodných čísel musí vygenerovat výstup, který rovněž neumožňuje předpovědět pravděpodobnost, že je lepší než polovina. Proto jakákoli metoda předpovědi dalšího výstupního bitu nesmí provádět lepší než náhodné hádání. Třídy v .NET Framework používají generátory náhodných čísel ke generování šifrovacích klíčů.

Třída RNGCryptoServiceProvider je implementace algoritmu generátoru náhodných čísel.

Zpět na začátek

ClickOnce manifesty

V .NET Framework 3.5, následující třídy kryptografie umožňují získat a ověřit informace o podpisech manifestu pro aplikace, které jsou nasazeny pomocí Technologie ClickOnce:

Kromě toho poskytují následující třídy zvláštní informace podpisu:

Zpět na začátek

Podpora Suite B

.NET Framework 3.5 podporuje sadu Suite B kryptografických algoritmů, které jsou publikovány National Security Agency (NSA). Další informace o sadě b naleznete Národního bezpečnostního úřadu Suite B kryptografie skutečnost list.

Jsou zahrnuty následující algoritmy:

  • Algoritmus standard AES s velikostí klíče 128, 192 a 256 bitů pro šifrování.

  • Bezpečné algoritmy hash pro vytváření hodnot hash SHA-1, SHA-256, SHA-384 a SHA-512. (Poslední tři jsou obvykle seskupeny a označují se jako SHA-2.)

  • Elliptic Curve Digital Signature Algorithm (ECDSA) používá křivek 256bitů, 384bitů a 521bitů primárního modulu pro podepisování. Dokumentace NSA konkrétně definuje tyto křivky a nazývá je P-256, P-384 a P-521. Tento algoritmus je poskytován třídou ECDsaCng. Umožňuje vám podepsat soukromý klíč a ověřit podpis pomocí veřejného klíče.

  • Elliptic Curve Diffie-Hellman (ECDH) algoritmus používá křivky 256bitů, 384bitů a 521bitů primárního modulu pro výměnu klíčů a tajnou dohodu. Tento algoritmus je poskytován třídou ECDiffieHellmanCng.

Obálky spravovaného kódu pro Federal Information Processing Standard (FIPS) certifikované implementace standardu AES, SHA-256, SHA-384 a SHA-512 jsou k dispozici v nových třídách AesCryptoServiceProvider, SHA256CryptoServiceProvider, SHA384CryptoServiceProvider a SHA512CryptoServiceProvider.

Zpět na začátek

Třídy Kryptografické služby nové generace (CNG)

Třídy Kryptografické služby nové generace (CNG) poskytují spravovanou obálku kolem nativních funkcí Kryptografické služby nové generace (CNG). (CNG je náhradou za rozhraní CryptoAPI.) Tyto třídy mají "Cng" jako součást jejich názvů. Centrální pro obálky tříd CNG je třída kontejneru klíčů CngKey, která abstrahuje uskladnění a použití CNG klíčů. Tato třída vám umožňuje ukládat páry klíčů nebo veřejný klíč bezpečně a odkazovat na něj pomocí jednoduchého řetězec názvu. Třída podpisu založená na eliptické křivce ECDsaCng a šifrovací třída ECDiffieHellmanCng může použít objekty CngKey.

Třída CngKey se používá pro řadu dalších operací, včetně otevírání, vytváření, odstraňování a export klíčů. Poskytuje také přístup k základnímu popisovači klíče při volání nativních funkcí přímo.

.NET Framework 3.5 také obsahuje řadu pomocných tříd Kryptografické služby nové generace (CNG), například následující:

  • CngProvider spravuje poskytovatele úložiště klíčů.

  • CngAlgorithm udržuje algoritmy Kryptografické služby nové generace (CNG).

  • CngProperty udržuje často používané vlastnosti klíče.

Zpět na začátek

Příbuzná témata

Title

Popis

Kryptografický model rozhraní .NET framework

Popisuje způsob implementace kryptografie v základní knihovně tříd.

Kryptografické úlohy

Popisuje způsob provedení určitých kryptografických úkolů pomocí základní knihovny tříd.

Podrobné pokyny: Vytvoření aplikace pro šifrování

Ukazuje základní úlohy šifrování a dešifrování.

Configuring Cryptography Classes

Popisuje, jak namapovat názvy algoritmů kryptografickým třídám a jak namapovat identifikátory objektů kryptografickým algoritmům.

Zpět na začátek