Sdílet prostřednictvím


Typické programování CNG

Rozhraní CNG API implementuje model rozšiřitelného zprostředkovatele, který umožňuje načíst zprostředkovatele zadáním požadovaného kryptografického algoritmu místo konkrétního zprostředkovatele. Výhodou je, že zprostředkovatel algoritmu může být nahrazen nebo upgradován a nebudete muset měnit kód žádným způsobem, jak používat nového poskytovatele. Pokud se v budoucnu zjistí, že je nějaký algoritmus nebezpečný, může být nainstalována bezpečnější verze tohoto algoritmu, aniž by to ovlivnilo váš kód. Většina rozhraní API CNG vyžaduje poskytovatele nebo objekt vytvořený poskytovatelem.

Typické kroky, které se týkají používání rozhraní CNG API pro kryptografické primitivní operace, jsou následující:

  1. Otevření zprostředkovatele algoritmu
  2. Získání nebo nastavení vlastností algoritmu
  3. Vytvoření nebo import klíče
  4. Provádění kryptografických operací
  5. Zavření zprostředkovatele algoritmu

Další informace naleznete v tématu Příklady programování.

Otevření zprostředkovatele algoritmu

Funkce BCryptOpenAlgorithmProvider poskytuje popisovač zprostředkovatele algoritmu, který se používá v následujících rozhraních API CNG, například BCryptCreateHash nebo BCryptGenerateKeyPair.

Získání nebo nastavení vlastností algoritmu

Pomocí popisovače zprostředkovatele algoritmu můžete získat podrobnosti implementace pro algoritmus, například velikost klíče nebo aktuální režim operace. K získání konkrétních vlastností použijete funkci BCryptGetProperty.

Můžete také upravit vlastnosti algoritmu. Pokud chcete například použít řetězení blokových šifer ECB s AES, nastavíte BCRYPT_CHAINING_MODE vlastnost algoritmu AES tak, aby BCRYPT_CHAIN_MODE_ECB; vlastnost je přiřazena ke všem klíčům AES vytvořeným pomocí tohoto popisovače algoritmu, aniž by bylo nutné konfigurovat každý klíč AES a každý klíč AES. K úpravě těchto vlastností použijete funkci BCryptSetProperty.

Vytvoření nebo import klíče

V závislosti na typu použitého algoritmu možná budete muset vytvořit nebo načíst klíč. Například funkce BCryptEncrypt přebírá popisovač klíče pro první parametr. Pokud chcete, aby tato funkce šifruje data pomocí algoritmu symetrického šifrování, jako je AES, musíte nejprve získat klíč. Způsob získání klíče závisí na typu použitého algoritmu a na zdroji klíče.

Dočasné klíče můžete vytvořit pomocí funkcí BCryptGenerateSymmetricKey a BCryptGenerateKeyPair. Dočasné klíče můžete také importovat z objektu BLOB paměti pomocí funkcí BCryptImportKey a BCryptImportKeyPair.

U trvalých klíčů použijete funkce úložiště klíčů k načtení zprostředkovatele úložiště klíčů a následnému vytvoření nebo načtení klíčů. Tyto funkce můžete také použít k vytvoření nebo načtení dočasných klíčů předáním null pro názvy kontejnerů. Další informace o funkcích úložiště klíčů najdete v tématu Funkce úložiště klíčů CNG.

Provádění kryptografických operací

Nyní jste připraveni provést kryptografickou operaci, jako je šifrování nebo dešifrování dat pomocí BCryptEncrypt nebo funkcí BCryptDecrypt.

Zavření zprostředkovatele algoritmu

Pokud už zprostředkovatel není potřeba, musíte předat popisovač BCryptCloseAlgorithmProvider funkce zavřít zprostředkovatele. To způsobí, že poskytovatel uvolní všechny prostředky, které byly přiděleny pro danou instanci zprostředkovatele algoritmu. Po zavření popisovače zprostředkovatele ho nelze znovu použít.

Načtení poskytovatele může být poměrně časově náročný proces. Proto byste měli ukládat všechny popisovače zprostředkovatele, na které budete během životnosti aplikace odkazovat vícekrát.

Příklady programování

Následující příklady popisují, jak provádět konkrétní kryptografické operace pomocí CNG.