Sdílet prostřednictvím


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ího vektoru (IV). Tento klíč musíte zachovat u každého, kdo by neměl dešifrovat vaše data. IV nemusí být tajné, ale mělo by se změnit pro každou relaci. Asymetrické algoritmy vyžadují vytvoření veřejného klíče a soukromého klíče. Veřejný klíč může být známý komukoli, ale dešifrující strana musí znát pouze odpovídající privátní klíč. V této části je popsán způsob vytváření a správy klíčů pro symetrické i asymetrické algoritmy.

Symetrické klíče

Třídy symetrického šifrování poskytované rozhraním .NET vyžadují klíč a nový IV k šifrování a dešifrování dat. Nový klíč a IV se automaticky vytvoří, když vytvoříte novou instanci jedné ze spravovaných symetrických kryptografických tříd pomocí metody bez Create() parametrů. Jakákoli osoba s oprávněním k dešifrování dat musí mít stejný klíč a vektor IV a použít stejný algoritmus. Obecně platí, že pro každou relaci by se měl vytvořit nový klíč a IV a klíč ani IV by neměly být uloženy pro použití v pozdější relaci.

Pokud chcete komunikovat symetrický klíč a IV vzdálené straně, obvykle šifrujete symetrický klíč pomocí asymetrického šifrování. Odesílání klíče přes nezabezpečenou síť bez šifrování je nebezpečné, protože každý, kdo klíč zachytí, a IV pak může dešifrovat vaše data.

Následující příklad ukazuje vytvoření nové instance výchozí třídy implementace algoritmu Aes :

Dim aes As Aes = Aes.Create()  
Aes aes = Aes.Create();  

Spuštění předchozího kódu vygeneruje nový klíč a IV a nastaví je jako hodnoty pro vlastnosti Key a IV .

Občas bude pravděpodobně nutné generovat více klíčů. V této situaci můžete vytvořit novou instanci třídy, která implementuje symetrický algoritmus. Pak vytvořte nový klíč a IV voláním GenerateKey a GenerateIV metodami. Následující příklad kódu ukazuje, jak vytvořit nové klíče a IV po vytvoření nové instance symetrické kryptografické třídy:

Dim aes As Aes = Aes.Create()  
aes.GenerateIV()  
aes.GenerateKey()  
Aes aes = Aes.Create();  
aes.GenerateIV();  
aes.GenerateKey();  

Spuštění předchozího kódu vytvoří novou instanci Aes a vygeneruje klíč a IV. Další klíč a IV jsou vytvořeny při GenerateKey zavolání a GenerateIV metody.

Asymetrické klíče

.NET poskytuje RSA třídu pro asymetrické šifrování. Když použijete metodu bez Create() parametrů k vytvoření nové instance, RSA třída vytvoří dvojici veřejného a privátního klíče. Asymetrické klíče mohou být buď uloženy pro použití ve více relacích, nebo generovány pouze pro jednu relaci. I když můžete veřejný klíč zpřístupnit, musíte privátní klíč pečlivě chránit.

Pár veřejného/privátního klíče se vygeneruje při vytváření nové instance asymetrické třídy algoritmu. Po vytvoření nové instance třídy můžete extrahovat klíčové informace pomocí ExportParameters metody. Tato metoda vrátí RSAParameters strukturu, která obsahuje klíčové informace. Metoda také přijímá logickou hodnotu, která označuje, zda vrátit pouze informace o veřejném klíči nebo vrátit veřejný klíč i informace privátního klíče.

K extrahování klíčových informací můžete použít také jiné metody, například:

Metodu ImportParameters můžete použít k inicializaci RSA instance na hodnotu RSAParameters struktury. Nebo můžete použít metodu RSA.Create(RSAParameters) k vytvoření nové instance.

Nikdy neukládejte asymetrické privátní klíče doslovně nebo jako prostý text v místním počítači. Pokud potřebujete uložit privátní klíč, musíte použít kontejner klíčů. Další informace o ukládání privátního klíče do kontejneru klíčů najdete v tématu Postupy: Ukládání asymetrických klíčů v kontejneru klíčů.

Následující příklad kódu vytvoří novou instanci třídy, vytvoří pár veřejného a privátního RSA klíče a uloží informace o veřejném klíči do RSAParameters struktury:

'Generate a public/private key pair.  
Dim rsa as RSA = RSA.Create()  
'Save the public key information to an RSAParameters structure.  
Dim rsaKeyInfo As RSAParameters = rsa.ExportParameters(false)  
//Generate a public/private key pair.  
RSA rsa = RSA.Create();  
//Save the public key information to an RSAParameters structure.  
RSAParameters rsaKeyInfo = rsa.ExportParameters(false);  

Viz také