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