Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 企业数据_C#_Tsql_Security_Encryption - Fatal编程技术网

C# 企业数据

C# 企业数据,c#,tsql,security,encryption,C#,Tsql,Security,Encryption,我们正在开发一个庞大的财务、预算和费用管理解决方案,其中一项要求是,存储在sql server中的应用程序收集的用户数据和帖子必须使用用户提供的密钥进行加密 我们使用的是SQL server 2012、EF 6和.NET 4.5 我们尝试过的: 我们用c#中的两个函数创建了类库,用于加密和解密。程序集遵循sql程序集,使用单个加密密钥可以正常工作 挑战: 数据库包含来自提供不同密钥的不同用户的数据 我们如何存储用户提供的密钥以使其安全…例如,如果用户丢失/忘记了用于加密其数据的密钥..应用程序可

我们正在开发一个庞大的财务、预算和费用管理解决方案,其中一项要求是,存储在sql server中的应用程序收集的用户数据和帖子必须使用用户提供的密钥进行加密

我们使用的是SQL server 2012、EF 6和.NET 4.5

我们尝试过的: 我们用c#中的两个函数创建了类库,用于加密和解密。程序集遵循sql程序集,使用单个加密密钥可以正常工作

挑战: 数据库包含来自提供不同密钥的不同用户的数据 我们如何存储用户提供的密钥以使其安全…例如,如果用户丢失/忘记了用于加密其数据的密钥..应用程序可以恢复。。而支持此数据库的DBA不应访问密钥


如果我们有100万用户..这意味着一百万个密钥..这些表有关系引用,因此很难对每一个用户的每一行进行不同的加密..在这个场景中的行业标准是什么..?

首先,我想在回答这个问题之前声明,我并不假装知道这个场景中的行业标准--我不知道。尽管如此,我还是会这么做

在密码学中,有一种算法叫做。总之,它将允许您将密钥拆分为多个部分:

  • 用户选择他们的私钥,并将其拆分为4部分(n=4),其中2部分(k=2)的任何子集都足以重构他们的秘密。您可以根据需要更改n和k,其中n是提供的恢复选项数,k是必须正确的数字

  • 然后,用户使用其恢复选项对私钥的每个部分进行加密,并将加密的部分发送到服务器进行存储

  • 当用户请求文件时,服务器将加密文件发送给客户机,客户机随后可以使用其密钥对其进行解密

  • 如果用户忘记了他们的密钥,他们可以从服务器请求加密的密钥部分,提供恢复答案,尝试解密至少k个密钥,并(希望)取回他们的数据

  • 注:

    • 服务器不存储恢复选项的答案。这意味着如果没有用户的帮助,它将无法解密文件(除非您也将原始拆分发送到服务器,但这是一个潜在的安全风险)。本质上,你可以帮助用户找回他们的钥匙,但如果他们记不起任何恢复选项(例如健忘症、老年痴呆症、过早死亡),那么所有赌注都将被取消
    • 如果用户要更改其密钥,则需要使用新密钥对每个文件进行解密和重新加密。这可能是一项潜在的昂贵任务
    • 重新生成密钥所需的恢复选项之和一定不容易让攻击者猜到。例如,如果我有4个恢复选项,其中我必须提供2个,并且我的选择是电话号码、最好朋友的名字和其他一些,那么这将是不安全的。没有太多可能的选择,这将使该示例组合非常容易使用暴力

    有趣,但缺点是答案相对较短。如果有人不辞辛劳地入侵数据库,他们会想出办法破解密钥。仍然+1@Fayth...good回答..但我不想预测它将在应用程序级别带来的复杂性,…所以如果我问..企业如何保护存储在sql数据库中的用户数据,使DBA和开发人员在系统投入生产后无法查看用户实时数据?@user3240727 Developer和DBA是另一个问题。答案仍然是将密钥放在他们没有物理或网络访问权限的服务器上。将密钥存储在DBA无权访问的服务器上。