Kryptografické klíče

Tento článek ukazuje, jak pomocí standardních funkcí odvození klíče odvodit klíče a jak šifrovat obsah pomocí symetrických a asymetrických klíčů.

Symetrické klíče

Symetrické šifrování klíče, označované také jako šifrování tajných klíčů, vyžaduje, aby se k dešifrování použil také klíč použitý k šifrování. Můžete použít SymmetricKeyAlgorithmProvider třídy zadat symetrický algoritmus a vytvořit nebo importovat klíč. Statické metody ve třídě CryptographicEngine můžete použít k šifrování a dešifrování dat pomocí algoritmu a klíče.

Šifrování symetrického klíče obvykle používá blokové šifry a režimy blokových šifer. Bloková šifra je symetrická šifrovací funkce, která pracuje s bloky s pevnou velikostí. Pokud je zpráva, kterou chcete zašifrovat, delší než délka bloku, musíte použít režim blokové šifry. Režim blokové šifry je symetrická šifrovací funkce vytvořená pomocí blokové šifry. Šifruje prostý text jako řadu bloků s pevnou velikostí. Aplikace podporují následující režimy:

  • Režim ECB (elektronického kódu) šifruje každý blok zprávy samostatně. To se nepovažuje za zabezpečený režim šifrování.
  • Režim CBC (řetězení bloků šifer) používá předchozí blok šifry k obfusci aktuálního bloku. Musíte určit, jakou hodnotu použít pro první blok. Tato hodnota se nazývá inicializační vektor (IV).
  • Režim CCM (čítač s CBC-MAC) kombinuje blokový šifrovací režim CBC s kódem pro ověřování zpráv (MAC).
  • Režim GCM (režim čítače Galois) kombinuje režim šifrování čítače s režimem ověřování Galois.

Některé režimy, jako je CBC, vyžadují, abyste pro první blok šifertextu použili inicializační vektor (IV). Následují běžné inicializační vektory. Při volání CryptographicEngine.Encrypt zadáte hodnotu IV. Ve většině případů je důležité, aby se IV nikdy znovu nepoužíval se stejným klíčem.

  • Oprava používá stejnou iv pro šifrování všech zpráv. To uniká informace a jeho použití se nedoporučuje.
  • Čítač zvýší IV pro každý blok.
  • Random vytvoří pseudonáhodný IV. K vytvoření IV můžete použít CryptographicBuffer.GenerateRandom.
  • Nonce-Generated používá jedinečné číslo pro šifrování každé zprávy. Nonce je obvykle modifikovaná zpráva nebo identifikátor transakce. Hodnota nonce nemusí být uchována v tajnosti, ale nikdy by neměla být znovu použita pod stejným klíčem.

Většina režimů vyžaduje, aby délka prostého textu byla přesnou násobek velikosti bloku. To obvykle vyžaduje, abyste doplnili prostý text na odpovídající délku.

I když blokové šifry šifrují bloky dat s pevnou velikostí, šifry datových proudů jsou symetrické šifrovací funkce, které kombinují bity prostého textu s pseudorandomovým datovým proudem (označovaným jako datový proud klíče) k vygenerování šifrovacího textu. Některé blokové režimy šifry, jako je režim zpětné vazby (OTF) a režim čítače (CTR), efektivně mění blokovou šifru na šifru streamu. Skutečné proudové šifry, jako je RC4, však obvykle pracují s vyšší rychlostí, než jakou mohou blokové režimy šifry dosáhnout.

Následující příklad ukazuje, jak použít SymmetricKeyAlgorithmProvider třídy k vytvoření symetrického klíče a jeho použití k šifrování a dešifrování dat.

Asymetrické klíče

Asymetrická kryptografie klíče, označovaná také jako kryptografie veřejného klíče, používá veřejný klíč a privátní klíč k šifrování a dešifrování. Klíče jsou odlišné, ale matematicky související. Privátní klíč se obvykle uchovává v tajnosti a používá se k dešifrování dat, zatímco se veřejný klíč distribuuje zúčastněným stranám a používá se k šifrování dat. Asymetrické kryptografie je také užitečná pro podepisování dat.

Vzhledem k tomu, že asymetrická kryptografie je mnohem pomalejší než symetrická kryptografie, používá se zřídka k přímému šifrování velkých objemů dat. Místo toho se obvykle používá k šifrování klíčů následujícím způsobem.

  • Alice vyžaduje, aby Bob poslal jenom zašifrované zprávy.
  • Alice vytvoří pár privátního a veřejného klíče, zachová tajný klíč a publikuje svůj veřejný klíč.
  • Bob má zprávu, kterou chce poslat Alice.
  • Bob vytvoří symetrický klíč.
  • Bob používá nový symetrický klíč k zašifrování zprávy Alici.
  • Bob používá veřejný klíč Alice k šifrování symetrického klíče.
  • Bob pošle zašifrovanou zprávu a šifrovaný symetrický klíč alici (obálek).
  • Alice k dešifrování symetrického klíče Boba používá svůj privátní klíč (z privátního nebo veřejného páru).
  • Alice k dešifrování zprávy používá Symetrický klíč Boba.

AsymmetricKeyAlgorithmProvider objekt můžete použít k určení asymetrického algoritmu nebo podpisového algoritmu, k vytvoření nebo importu dočasného páru klíčů nebo k importu části veřejného klíče páru klíčů.

Odvozování klíčů

Často je nutné odvodit další klíče ze sdíleného tajného kódu. K odvození klíčů můžete použít KeyDerivationAlgorithmProvider třídy a jednu z následujících specializovaných metod v KeyDerivationParameters třídy.

Objekt Description
BuildForPbkdf2 Vytvoří keyDerivationParameters objekt pro použití ve funkci odvození klíče založené na hesle 2 (PBKDF2).
BuildForSP800108 Vytvoří objekt KeyDerivationParameters pro použití v režimu čítače, ve funkci odvození klíče kódu pro ověřování zpráv založeného na hodnotě hash (HMAC).
BuildForSP80056a Vytvoří objekt KeyDerivationParameters pro použití ve funkci odvozování klíče SP800-56A.