Udostępnij za pośrednictwem


Generowanie kluczy na potrzeby szyfrowania i odszyfrowywania

Tworzenie kluczy i zarządzanie nimi jest ważną częścią procesu kryptograficznego. Algorytmy symetryczne wymagają utworzenia klucza i wektora inicjalizacji (IV). Należy zachować ten klucz tajny od wszystkich osób, które nie powinny odszyfrowywać danych. Iv nie musi być wpisem tajnym, ale należy go zmienić dla każdej sesji. Algorytmy asymetryczne wymagają utworzenia klucza publicznego i klucza prywatnego. Klucz publiczny może być znany każdemu, ale strona odszyfrowywania musi znać tylko odpowiedni klucz prywatny. W tej sekcji opisano sposób generowania kluczy zarówno dla algorytmów symetrycznych, jak i asymetrycznych oraz zarządzania nimi.

Klucze symetryczne

Klasy szyfrowania symetrycznego dostarczane przez platformę .NET wymagają klucza i nowego iv do szyfrowania i odszyfrowywania danych. Nowy klucz i IV są tworzone automatycznie podczas tworzenia nowego wystąpienia jednej z zarządzanych klas kryptograficznych symetrycznych przy użyciu metody bez Create() parametrów. Każdy, kto zezwoli na odszyfrowywanie danych, musi mieć ten sam klucz i iv i użyć tego samego algorytmu. Ogólnie rzecz biorąc, należy utworzyć nowy klucz i IV dla każdej sesji, a ani klucz, ani IV nie powinny być przechowywane do użycia w późniejszej sesji.

Aby przekazać klucz symetryczny i IV do strony zdalnej, zwykle szyfrujesz klucz symetryczny przy użyciu szyfrowania asymetrycznego. Wysyłanie klucza przez niezabezpieczoną sieć bez szyfrowania jest niebezpieczne, ponieważ każdy, kto przechwytuje klucz, a iv może następnie odszyfrować dane.

W poniższym przykładzie pokazano tworzenie nowego wystąpienia domyślnej klasy implementacji dla algorytmu Aes :

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

Wykonanie poprzedniego kodu generuje nowy klucz i IV i ustawia je odpowiednio jako wartości właściwości Klucz i IV .

Czasami może być konieczne wygenerowanie wielu kluczy. W takiej sytuacji można utworzyć nowe wystąpienie klasy implementujące algorytm symetryczny. Następnie utwórz nowy klucz i IV, wywołując GenerateKey metody i .GenerateIV W poniższym przykładzie kodu pokazano, jak utworzyć nowe klucze i wirtualne widoki po utworzeniu nowego wystąpienia symetrycznej klasy kryptograficznego:

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

Wykonanie poprzedniego kodu tworzy nowe wystąpienie Aes i generuje klucz i IV. Podczas wywoływanych GenerateKey metod i i GenerateIV jest tworzony inny klucz i IV.

Klucze asymetryczne

Platforma .NET udostępnia klasę RSA do szyfrowania asymetrycznego. Gdy używasz metody bez Create() parametrów do utworzenia nowego wystąpienia, RSA klasa tworzy parę kluczy publicznych/prywatnych. Klucze asymetryczne mogą być przechowywane do użycia w wielu sesjach lub generowane tylko dla jednej sesji. Chociaż można udostępnić klucz publiczny, należy ściśle chronić klucz prywatny.

Para kluczy publicznych/prywatnych jest generowana podczas tworzenia nowego wystąpienia klasy algorytmu asymetrycznego. Po utworzeniu nowego wystąpienia klasy można wyodrębnić kluczowe informacje przy użyciu ExportParameters metody . Ta metoda zwraca strukturę zawierającą RSAParameters kluczowe informacje. Metoda akceptuje również wartość logiczną, która wskazuje, czy zwracać tylko informacje o kluczu publicznym, czy zwracać zarówno klucz publiczny, jak i informacje o kluczu prywatnym.

Możesz również użyć innych metod, aby wyodrębnić kluczowe informacje, takie jak:

Możesz użyć ImportParameters metody , aby zainicjować RSA wystąpienie do wartości RSAParameters struktury. Możesz też użyć RSA.Create(RSAParameters) metody , aby utworzyć nowe wystąpienie.

Nigdy nie przechowuj asymetrycznych kluczy prywatnych ani jako zwykłego tekstu na komputerze lokalnym. Jeśli musisz przechowywać klucz prywatny, musisz użyć kontenera kluczy. Aby uzyskać więcej informacji na temat przechowywania klucza prywatnego w kontenerze kluczy, zobacz Jak przechowywać klucze asymetryczne w kontenerze kluczy.

Poniższy przykład kodu tworzy nowe wystąpienie RSA klasy, tworzy parę kluczy publicznych/prywatnych i zapisuje informacje o kluczu publicznym w RSAParameters strukturze:

'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);  

Zobacz też