Azure Key Vault Keys SDK for .NET。用于在Azure Key Vault和Managed HSM中管理加密密钥的客户端库。用于密钥创建、轮换、加密、解密、签名和验证。
技能概述
azure-security-keyvault-keys-dotnet 技能是用于管理Azure Key Vault和Managed HSM中加密密钥的.NET客户端库。该SDK提供了完整的密钥生命周期管理功能,包括密钥创建、更新、删除、备份和恢复,以及加密、解密、签名和验证等加密操作。
下载地址:https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-security-keyvault-keys-dotnet
主要功能
- 密钥管理: 创建、获取、更新和删除RSA、EC和OCT密钥
- 加密操作: 加密、解密、包装和解包密钥
- 签名验证: 对数据进行签名和验证签名
- 密钥轮换: 自动和手动密钥轮换
- 备份恢复: 备份和恢复密钥
- HSM支持: 支持硬件安全模块(HSM)保护的密钥
- 密钥解析: 通过密钥ID解析和获取CryptographyClient
安装
dotnet add package Azure.Security.KeyVault.Keys dotnet add package Azure.Identity
客户端层次结构
KeyClient (密钥管理)
├── CreateKey / CreateRsaKey / CreateEcKey
├── GetKey / GetKeys
├── UpdateKeyProperties
├── DeleteKey / PurgeDeletedKey
├── BackupKey / RestoreKey
└── GetCryptographyClient() → CryptographyClientCryptographyClient (加密操作)
├── Encrypt / Decrypt
├── WrapKey / UnwrapKey
├── Sign / Verify
└── SignData / VerifyDataKeyResolver (密钥解析)
└── Resolve(keyId) → CryptographyClient
创建密钥示例
// 创建RSA密钥
KeyVaultKey rsaKey = await client.CreateKeyAsync("my-rsa-key", KeyType.Rsa);// 创建带选项的RSA密钥
var rsaOptions = new CreateRsaKeyOptions("my-rsa-key-2048")
{
KeySize = 2048,
HardwareProtected = false,
ExpiresOn = DateTimeOffset.UtcNow.AddYears(1),
Enabled = true
};
rsaOptions.KeyOperations.Add(KeyOperation.Encrypt);
rsaOptions.KeyOperations.Add(KeyOperation.Decrypt);
KeyVaultKey rsaKey2 = await client.CreateRsaKeyAsync(rsaOptions);// 创建EC密钥
var ecOptions = new CreateEcKeyOptions("my-ec-key")
{
CurveName = KeyCurveName.P256,
HardwareProtected = true
};
KeyVaultKey ecKey = await client.CreateEcKeyAsync(ecOptions);
加密和解密示例
byte[] plaintext = Encoding.UTF8.GetBytes("Secret message to encrypt");
// 加密
EncryptResult encryptResult = await cryptoClient.EncryptAsync(
EncryptionAlgorithm.RsaOaep256,
plaintext);// 解密
DecryptResult decryptResult = await cryptoClient.DecryptAsync(
EncryptionAlgorithm.RsaOaep256,
encryptResult.Ciphertext);string decrypted = Encoding.UTF8.GetString(decryptResult.Plaintext);
签名和验证示例
byte[] data = Encoding.UTF8.GetBytes("Data to sign");
// 签名数据(内部计算哈希)
SignResult signResult = await cryptoClient.SignDataAsync(
SignatureAlgorithm.RS256,
data);// 验证签名
VerifyResult verifyResult = await cryptoClient.VerifyDataAsync(
SignatureAlgorithm.RS256,
data,
signResult.Signature);Console.WriteLine($"Signature valid: {verifyResult.IsValid}");
密钥轮换
// 轮换密钥(创建新版本)
KeyVaultKey rotatedKey = await client.RotateKeyAsync("my-rsa-key");// 设置轮换策略
KeyRotationPolicy policy = new KeyRotationPolicy()
{
ExpiresIn = "P90D" // 90天后过期
};policy.LifetimeActions.Add(new KeyRotationLifetimeAction
{
Action = KeyRotationPolicyAction.Rotate,
TimeBeforeExpiry = "P30D" // 过期前30天轮换
});await client.UpdateKeyRotationPolicyAsync("my-rsa-key", policy);
最佳实践
- 使用DefaultAzureCredential进行身份验证
- 在Azure托管的应用程序中使用托管标识
- 启用软删除以便恢复
- 使用RBAC进行细粒度访问控制
- 定期轮换密钥以增强安全性
- 为关键密钥启用HSM保护
- 备份重要密钥以防数据丢失
- 监控密钥使用和过期时间
局限性
- 仅当任务明确符合上述范围时使用此技能
- 不要将输出视为环境特定验证、测试或专家审查的替代品
- 如果缺少必需的输入、权限、安全边界或成功标准,请停止并请求澄清