Vytvoření a smazání kontejneru pro RSA klíče
Přidáno: 20.6.2010
Kategorie: VB.NET - Zabezpečení
Autor: Ondřej Linhart
Pokud jste se někdy setkali s asymetrickým šifrováním (RSA je nejběžnější algoritmus, ve Frameworku používaný např. pro šifrované sekce v konfiguračních souborech), jistě jste si všimli, že šifrovací klíče (soukromý + veřejný klíč) jsou uloženy v tzv. kontejnerech, ze kterých je musí algoritmus vyzvednout.
Kontejner je fyzický soubor s klíči (1 kontejner = max. 2 páry soukromého a veřejného klíče) a existuje na úrovni systému (společný pro všechny uživatele) nebo na úrovni uživatele (pouze pro konkrétního uživatele).
Následující kód obsahuje statickou třídu (modul), která umožňuje vytvořit nový nebo načíst existující kontejner a získat z něho veřejnou část ve formátu XML, která se dá použít pro algoritmus RSACryptoServiceProvider a také metodu pro smazání existujícího kontejneru s klíči.
Imports System.Security.Cryptography
Module RSAKeyManager
Private Const PROV_RSA_FULL As Integer = 1
Private Const RSA_KEY_FLAGS As CspProviderFlags =
CspProviderFlags.NoPrompt Or
CspProviderFlags.UseArchivableKey Or
CspProviderFlags.UseMachineKeyStore
Public Function CreateOrOpenPublicKey(ByVal containerName As String) As String
Dim parameters As New CspParameters(PROV_RSA_FULL)
parameters.Flags = RSA_KEY_FLAGS
parameters.KeyContainerName = containerName
parameters.KeyNumber = KeyNumber.Signature
Using provider As New RSACryptoServiceProvider(parameters)
Return provider.ToXmlString(False)
End Using
End Function
Public Sub DeleteContainer(ByVal containerName As String)
Dim parameters As New CspParameters(PROV_RSA_FULL)
parameters.Flags = RSA_KEY_FLAGS
parameters.KeyContainerName = containerName
parameters.KeyNumber = KeyNumber.Signature
Using provider As New RSACryptoServiceProvider(parameters)
provider.PersistKeyInCsp = False
End Using
End Sub
End Module