Generování klíčů pro šifrování a dešifrování
Vytváření a správa klíčů je důležitou součástí procesu šifrování. Symetrické algoritmy vyžadují vytvoření klíče a inicializační vektor (IV), které musí být uchovávány skryté od uživatelů, kteří by neměli dešifrovat vaše data. Asymetrické algoritmy vyžadují vytváření veřejného klíče a privátního klíče. Veřejný klíč se může zveřejnit všem uživatelům, zatímco privátní klíč musí být známý pouze osobě, která bude dešifrovat data zašifrované pomocí veřejného klíče. Tato část popisuje, jak vytvářet a spravovat klíče pro algoritmy jak symetrické, tak asymetrické.
Symetrické klíče
Třídy pro symetrické šifrování poskytované rozhraním .NET Framework vyžadují klíč a nový inicializační vektor (IV) k zašifrování a dešifrování dat. Vždy, když vytvoříte novou instanci některé ze spravovaných symetrických kryptografických tříd pomocí výchozího konstruktoru, nový klíč a IV jsou automaticky vytvořeny. Kdokoli, komu umožníte dešifrovat data, musí mít stejný klíč a IV a použít stejný algoritmus. Obecně lze říci, že nový klíč a IV by měl být vytvořen pro každou relaci a klíč ani IV by neměly být ukládány pro použití v pozdější relaci.
Ke komunikaci symetrickým klíčem a IV ke vzdálené straně obvykle zašifrujete symetrický klíč a IV pomocí asymetrického šifrování. Odesílání těchto hodnot v nezabezpečené síti bez šifrování je velmi nebezpečné, jelikož kdokoli zachycuje tyto hodnoty, může dešifrovat vaše data. Další informace o tomto procesu šifrování a přenosu klíče a IV naleznete v tématu Vytváření kryptografických schémat.
Následující příklad ukazuje vytvoření nové instance třídy TripleDESCryptoServiceProvider, která implementuje algoritmus TripleDES.
Dim TDES As TripleDESCryptoServiceProvider = new TripleDESCryptoServiceProvider()
TripleDESCryptoServiceProvider TDES = new TripleDESCryptoServiceProvider();
Při spuštění předchozího kódu, nový klíč a IV jsou generovány a umístěny do vlastností Key a IV.
Někdy může být nutné generovat více klíčů. V takovém případě můžete vytvořit novou instanci třídy, která implementuje symetrický algoritmus a potom vytvořit nový klíč a IV voláním metod GenerateKey a GenerateIV. Následující příklad kódu ukazuje, jak vytvořit nové klíče a IV po provedení nové instance třídy asymetrického šifrování.
Dim TDES As TripleDESCryptoServiceProvider = new TripleDESCryptoServiceProvider()
TDES.GenerateIV()
TDES.GenerateKey()
TripleDESCryptoServiceProvider TDES = new TripleDESCryptoServiceProvider();
TDES.GenerateIV();
TDES.GenerateKey();
Při spuštění předchozího kódu jsou generovány klíč a IV při provedení nové instance TripleDESCryptoServiceProvider. Jiný klíč a IV jsou vytvářeny, pokud jsou volány metody GenerateKey a GenerateIV.
Asymetrické klíče
Rozhraní .NET Framework poskytuje třídy RSACryptoServiceProvider a DSACryptoServiceProvider pro asymetrické šifrování. Tyto třídy vytvoří pár veřejného/soukromého klíče při vytvoření nové instance pomocí výchozího konstruktoru. Asymetrické klíče mohou být buď uloženy pro použití ve více relacích nebo generovány pouze pro jednu relaci. Zatímco veřejný klíč může být zpřístupněn obecně, soukromý klíč by měl být úzce chráněn.
Pár veřejného/soukromého klíče je generován při každém vytvoření nové instance třídy asymetrického algoritmu. Po vytvoření nové instance třídy může být informace o klíči extrahována pomocí jedné ze dvou metod:
Metoda ToXMLString, která vrátí XML reprezentaci informace o klíči.
Metoda ExportParameters, která vrátí strukturu RSAParameters, která obsahuje informace o klíči.
Obě metody přijímají logickou hodnotu, která označuje, zda vrátit informace pouze o veřejném klíči nebo vrátit i informace o veřejném klíči a soukromém klíči. Třída RSACryptoServiceProvider může být inicializována na hodnotu struktury RSAParameters pomocí metody ImportParameters.
Asymetrické soukromé klíče by nikdy neměly být uloženy doslovně nebo ve formátu prostého textu v místním počítači. Pokud potřebujete uložit privátní klíč, měli byste použít kontejner klíčů. Další informace o způsobu uložení privátního klíče v kontejneru klíčů naleznete v tématu Postupy: Uložení asymetrického klíče v kontejneru klíčů.
Následující příklad kódu vytvoří novou instanci třídy RSACryptoServiceProvider, vytvoří pár veřejného/soukromého klíče a uloží údaje o veřejném klíči do struktury RSAParameters.
'Generate a public/private key pair.
Dim RSA as RSACryptoServiceProvider = new RSACryptoServiceProvider()
'Save the public key information to an RSAParameters structure.
Dim RSAKeyInfo As RSAParameters = RSA.ExportParameters(false)
//Generate a public/private key pair.
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
//Save the public key information to an RSAParameters structure.
RSAParameters RSAKeyInfo = RSA.ExportParameters(false);
Viz také
Úkoly
Postupy: Uložení asymetrického klíče v kontejneru klíčů