Şifrelenmiş verilerinizle birlikte saklamak için. İşte
genel adımlar şunlardır:
- Generaete RNGCryptoServiceProvider
- kakmak verileri (kimlik) kullanılarak AES anahtarı (256 bit, CBC modu)
- kaydet Başlatma Vektör (IV). Sadece şifresini çözmek istediğinizde erişim için ciphertext bayt dizisine katılabilirsiniz - IV korumalı gerekmez.
- KeyVault'daki Anahtarı kullanarak, orijinal AES Simetrik Anahtarını sarın (şifreleyin).
- Sarılmış AES Anahtarı, IV, CipherText ve Anahtar Sürümünü (KeyVault'da URI'nın sonunda bulunan GUID) saklayın.
- KeyVault'da Wrap/Unwrap izinlerini Azure AD'de oluşturulan Uygulama Kaydı için sağladığınızdan emin olun. GetToken() içindeki Azure'a auth için Client Id/Application ID + Key veya pfx kullanın.
Bu Nuget paketleri gerekir:
Install-Package Microsoft.Azure.KeyVault
Install-Package Microsoft.Azure.KeyVault.Extensions
Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory -Version 2.16.204221202
KeyVaultKeyResolver
KeyVaultKeyResolver cloudResolver = new KeyVaultKeyResolver(Utils.GetToken);
// Example GetToken implementation
public class Utils {
// Retrive JWT token to be used for KeyVault access.
internal async static Task<string> GetToken(string authority, string resource, string scope)
{
var authContext = new AuthenticationContext(authority);
// Could use pfx instead
ClientCredential clientCred = new ClientCredential(
ConfigurationManager.AppSettings["clientId"],
ConfigurationManager.AppSettings["clientSecret"]);
AuthenticationResult result = await authContext.AcquireTokenAsync(resource, clientCred);
if (result == null)
throw new InvalidOperationException("Failed to obtain the JWT token.");
return result.AccessToken;
}
}
bir ref alın size KeyResolver bana ulaştıktan sonra, bir Ikey sizin AES/sarın kakışıyor alabilirsiniz aşağıdaki gibi simetrik anahtar ...
AES Tuşu Sarma/Şifrele
KeyID Anahtar Kasası'ndan URI ve aesKey byte [] AES anahtarı şifrelemek için geçerli:
// Resolve an IKey by Key ID from URI in KeyVault
var keyEncryptionKey = cloudResolver.ResolveKeyAsync(keyId, CancellationToken.None).GetAwaiter().GetResult();
// Take our gen'ed AES Key and wrap (encrypt) it.
Tuple<byte[], string> wrappedKey = keyEncryptionKey.WrapKeyAsync(aeskey, null /* algorithm */, CancellationToken.None).GetAwaiter().GetResult();
kayıt düzeni içinde bayt [] simetrik anahtar ve şifrelenmiş bayt içerir Kullanılan algoritmanın adı. Bunları meta metninizle meta verileri olarak kaydedin.aynı anahtarı (anahtar sürüm konularda) kullanılarak
Unwrap/azalmak AES anahtar
Çağrı, algoName tuşuna (örneğin, "RSA-OAEP") sarmak için kullanılan algoritmanın adıdır.
// Retrieve the IKey by Key ID
// Unwrap Key
byte[] aesKey = rsa.UnwrapKeyAsync(wrappedKeyBytes, algoName, CancellationToken.None).GetAwaiter().GetResult();
Düşünülmesi gereken diğer detaylar Anahtar yedekleme/kurtarma ve anahtar rotasyonudır.
Sadece merak ediyorum, konuştuğunuz "hizmet hesabı", kullanıcının Azure Aboneliğini kendi adlarına yönetmek için mi? –
Nope @GauravMantri. Dynamics CRM hizmet hesabı için kimlik bilgileri. Hesap, Dynamics CRM'deki varlıkları bir daemon uygulamasıyla güncellemek için kullanılacaktır. Btw, Bloglar ve makaleler üzerinde iyi çalışmalar var, bloglarınızı takip ediyorum ;-) –
Servis hesabı kullanıcı adı ve şifresi yönetici tarafından girilecek, bu yüzden onları tekrar azure anahtar kasasına ekleme değeri nedir? –