Şifreleme ve şifre çözme için anahtar oluşturma
Anahtarları oluşturmak ve yönetmek, şifreleme işleminin önemli bir parçasıdır. Simetrik algoritmalar, bir anahtarın ve başlangıç vektörünün (IV) oluşturulmasını gerektirir. Bu anahtar gizli diziyi, verilerinizin şifresini çözmemesi gereken herkesten saklamalısınız. IV'nin gizli olması gerekmez, ancak her oturum için değiştirilmesi gerekir. Asimetrik algoritmalar bir ortak anahtarın, bir de özel anahtarın oluşturulmasını gerektirir. Ortak anahtar herkes tarafından tanınabilir, ancak şifresi çözülen taraf yalnızca ilgili özel anahtarı bilmelidir. Bu bölümde, hem simetrik, hem de asimetrik algoritmalar için anahtarların nasıl oluşturulacağı ve yönetileceği açıklanmaktadır.
Simetrik Anahtarlar
.NET tarafından sağlanan simetrik şifreleme sınıfları, verileri şifrelemek ve şifresini çözmek için bir anahtar ve yeni bir IV gerektirir. Parametresiz Create()
yöntemi kullanarak yönetilen simetrik şifreleme sınıflarından birinin yeni bir örneğini oluşturduğunuzda yeni bir anahtar ve IV otomatik olarak oluşturulur. Verilerinizin şifresini çözmesine izin verdiğiniz kişilerin aynı anahtara ve IV'ye sahip olup aynı algoritmayı kullanması gerekir. Genel olarak, her oturum için yeni bir anahtar ve IV oluşturulmalıdır ve anahtar veya IV daha sonraki bir oturumda kullanılmak üzere depolanmamalıdır.
Simetrik anahtarı ve IV'yi uzak bir tarafa iletmek için genellikle simetrik anahtarı asimetrik şifreleme kullanarak şifrelersiniz. Anahtarı şifreleme olmadan güvenli olmayan bir ağ üzerinden göndermek güvenli değildir çünkü anahtarı ve IV'yi kesen herkes verilerinizin şifresini çözebilir.
Aşağıdaki örnekte algoritma için varsayılan uygulama sınıfının yeni bir örneğinin oluşturulması gösterilmektedir Aes :
Dim aes As Aes = Aes.Create()
Aes aes = Aes.Create();
Yukarıdaki kodun yürütülmesi yeni bir anahtar ve IV oluşturur ve bunları sırasıyla Anahtar ve IV özellikleri için değerler olarak ayarlar.
Bazen birden çok anahtar oluşturmanız gerekebilir. Bu durumda, simetrik algoritma uygulayan bir sınıfın yeni bir örneğini oluşturabilirsiniz. Ardından ve yöntemlerini çağırarak GenerateKey
yeni bir anahtar ve GenerateIV
IV oluşturun. Aşağıdaki kod örneğinde, simetrik şifreleme sınıfının yeni bir örneği oluşturulduktan sonra yeni anahtarların ve IV'lerin nasıl oluşturulacağı gösterilmektedir:
Dim aes As Aes = Aes.Create()
aes.GenerateIV()
aes.GenerateKey()
Aes aes = Aes.Create();
aes.GenerateIV();
aes.GenerateKey();
Önceki kodun yürütülmesi yeni bir örneğini Aes
oluşturur ve bir anahtar ve IV oluşturur. ve yöntemleri çağrıldığında GenerateKey
başka bir anahtar ve GenerateIV
IV oluşturulur.
Asimetrik Anahtarlar
.NET, asimetrik şifreleme için sınıfını sağlar RSA . Yeni bir örnek oluşturmak için parametresiz Create()
yöntemini kullandığınızda, RSA sınıfı bir ortak/özel anahtar çifti oluşturur. Asimetrik anahtarlar birden çok oturumda kullanılmak üzere saklanabilir ya da yalnızca tek bir oturum için oluşturulabilir. Ortak anahtarı kullanılabilir duruma getirebilmenize karşın, özel anahtarı yakından korumanız gerekir.
Asimetrik algoritma sınıfının yeni bir örneğini oluşturduğunuzda ortak/özel anahtar çifti oluşturulur. Sınıfının yeni bir örneğini oluşturduktan sonra yöntemini kullanarak ExportParameters anahtar bilgilerini ayıklayabilirsiniz. Bu yöntem, anahtar bilgilerini tutan bir RSAParameters yapı döndürür. yöntemi, yalnızca ortak anahtar bilgilerini mi yoksa hem ortak anahtar hem de özel anahtar bilgilerini döndürmeyi belirten bir Boole değeri de kabul eder.
Anahtar bilgilerini ayıklamak için aşağıdakiler gibi başka yöntemler de kullanabilirsiniz:
- RSA.ExportRSAPublicKey
- RSA.ExportRSAPrivateKey
- AsymmetricAlgorithm.ExportSubjectPublicKeyInfo
- AsymmetricAlgorithm.ExportPkcs8PrivateKey
- AsymmetricAlgorithm.ExportEncryptedPkcs8PrivateKey
Bir yapı değerine RSAParameters
örnek RSA
başlatmak için yöntemini kullanabilirsinizImportParameters. İsterseniz yöntemini kullanarak RSA.Create(RSAParameters) yeni bir örnek oluşturabilirsiniz.
Asimetrik özel anahtarları hiçbir zaman düz metin olarak veya yerel bilgisayarda depolamayın. Özel anahtar depolamanız gerekiyorsa bir anahtar kapsayıcısı kullanmanız gerekir. Özel anahtarı bir anahtar kapsayıcısında depolama hakkında daha fazla bilgi için bkz . Nasıl yapılır: Asimetrik Anahtarları Anahtar Kapsayıcısında Depolama.
Aşağıdaki kod örneği sınıfının yeni bir örneğini RSA
oluşturur, ortak/özel anahtar çifti oluşturur ve ortak anahtar bilgilerini bir RSAParameters
yapıya kaydeder:
'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);