Asp.Net核心数据保护API保护数据库中的数据

时间:2018-08-20 21:36:58

标签: security encryption asp.net-core

我想加密一些机密信息并将其保存到数据库中,然后再解密。

我已经很好地完成了所有工作,并且正在保护和保留Aws S3和KMS上的密钥。

这会让我无限期地解密数据还是我必须考虑什么?

ConfigureServices的代码段-startup.cs

services.AddSingleton<IAmazonS3>(new AmazonS3Client(RegionEndpoint.EUWest2));
services.AddSingleton<IAmazonKeyManagementService>(new AmazonKeyManagementServiceClient(RegionEndpoint.EUWest2));

services.AddDataProtection()
        .ProtectKeysWithAwsKms(Configuration.GetSection("KmsProtection"))
        .PersistKeysToAwsS3(Configuration.GetSection("S3Persistence"));

var cipherOptions = Configuration.GetSection("CipherOptions");
services.Configure<CipherOptions>(cipherOptions);

services.AddScoped(typeof(ICipherService), typeof(CipherService)); 

CipherService.cs

public class CipherService : ICipherService
{
    private readonly IDataProtectionProvider dataProtectionProvider;
    private readonly string purpose;

    public CipherService(IDataProtectionProvider dataProtectionProvider, IOptions<CipherOptions> options)
    {
        this.dataProtectionProvider = dataProtectionProvider;
        this.purpose = options.Value.Purpose;
    }

    public string Encrypt(string input)
    {
        var protector = dataProtectionProvider.CreateProtector(purpose);
        return protector.Protect(input);
    }

    public string Decrypt(string cipherText)
    {
        var protector = dataProtectionProvider.CreateProtector(purpose);
        return protector.Unprotect(cipherText);
    }
}

3 个答案:

答案 0 :(得分:0)

几乎听起来就像您在询问加密数据是否有某种时间限制(?)。如果是这样:不,没有。

只要您有权访问加密的数据以及用于解密的密钥,那么您就应该能够解密它,并可以随时随地读取它。是的,无限期地。

请注意,是否将加密数据及其密钥存储在同一位置尚不清楚。如果是这样,那可能是个坏主意。如果加密数据的重点是确保数据的安全性,那么将密钥紧挨在旁边就没有任何意义。那么您最好将其存储为纯文本格式。

简而言之,只要您的加密足够好,就可以将数据存储在任意位置;最重要的是,您可以在需要时自己访问它。

对于您的密钥,您可能应该将其存储在至少两个不同的位置(以防万一,避免冗余-否则,您的数据将永远丢失!),并确保两者都是安全且不可访问的给其他人。

答案 1 :(得分:0)

我问了类似的问题here。 过期的密钥将始终能够取消保护数据,因此您应该没事。不确定为什么会在默认的90天之前重新创建密钥。

答案 2 :(得分:0)

如果不从密钥库中删除密钥,则应该可以永远解密数据。

密钥将在固定的时间量内更改(默认为90天),因此在此期间之后,如果您加密更多数据,则会使用其他密钥对其进行加密。

See here.