Klucze żadnego algorytmu kryptograficznego nie powinny być przechowywane w postaci otwartego tekstu, dlatego w celu ich przechowywania zostały opracowane odpowiednie kontenery (tzw. key containers). Kontenery kluczy są obszarami pamięci, przeznaczonymi do przechowywania kluczy kryptograficznych, którymi zarządzają dostawcy CSP (Crypto Service Provider); do ochrony zawartości kontenerów stosowane jest silne szyfrowanie i zabezpieczenia systemu operacyjnego.
.NET Framework automatycznie przymusza nas do wykorzystania tych kontenerów, np. przy wykorzystaniu niniejszego wywołania:
CspParameters csp = new CspParameters(); csp.KeyContainerName = "MyKeys";
W tym przypadku jeżeli kontener kluczy o tej nazwie istnieje, wtedy CSP wykorzystuje istniejące w nim klucze. Natomiast, gdy danego kontenera jeszcze nie ma, klucze są automatycznie generowane. Dlatego mylące może być twierdzenie, że powyższe dwie linie generują nowe klucze, a wielokrotne ich wywoływanie powoduje "otrzymanie" tych samych kluczy (przecież klucze zostały wygenerowane w momencie utworzenia kontenera, a później są już tylko z niego odczytywane).
Aby mieć pewność, że otrzymamy za każdym razem inną parę kluczy należy te klucze wykasować z danego kontenera, a może do tego zostać wykorzystana np. poniższa funkcja (jej źródło z MSDN):
public static void DeleteKeyFromContainer(string ContainerName) { // Create the CspParameters object and set the key container // name used to store the RSA key pair. CspParameters cp = new CspParameters(); cp.KeyContainerName = ContainerName; // Create a new instance of RSACryptoServiceProvider that accesses // the key container. RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cp); // Delete the key entry in the container. rsa.PersistKeyInCsp = false; // Call Clear to release resources and delete the key from the container. rsa.Clear(); Console.WriteLine("Key deleted."); }
Więcej na temat zarządzania kluczami znaleźć można w MSDN, np. pod adresem: http://msdn.microsoft.com/en-us/library/tswxhw92.aspx, lub w książce: "C# - Księga przykładów" (z wyd. Microsoft Press) w rozdziale: "Bezpieczne zapamiętywanie klucza szyfrowania symetrycznego". Jeśli ktoś natomiast ma ochotę dowiedzieć się do czego można klucze wykorzystać, zapraszam do przeczytania mojego wcześniejszego posta: "Podpisywanie danych przy pomocy algorytmu RSA (przykłady w C#)."
Brak komentarzy:
Prześlij komentarz