C# 存储加密密钥的正确方法,可用于跨多台计算机的多个应用程序
下面是一个场景 我们的数据库中存储了敏感数据,如SSN和DOB。C# 存储加密密钥的正确方法,可用于跨多台计算机的多个应用程序,c#,sql-server,security,encryption,C#,Sql Server,Security,Encryption,下面是一个场景 我们的数据库中存储了敏感数据,如SSN和DOB。 在我们插入记录之前,这些数据是加密的 我们有许多(超过20个)应用程序和web应用程序,它们跨越多台机器和数据中心,需要加密和存储数据,或者检索和解密数据。大多数应用程序都是.Net,但不是全部 目前,我们有一个应用程序正在使用Microsoft TrippleDescriptorServiceProvider(我们将很快使用更新的算法)进行加密/解密。 我们目前将密钥存储在进行加密/解密的类中 这显然是不好的,原因有很多,我相信
在我们插入记录之前,这些数据是加密的 我们有许多(超过20个)应用程序和web应用程序,它们跨越多台机器和数据中心,需要加密和存储数据,或者检索和解密数据。大多数应用程序都是.Net,但不是全部 目前,我们有一个应用程序正在使用Microsoft TrippleDescriptorServiceProvider(我们将很快使用更新的算法)进行加密/解密。
我们目前将密钥存储在进行加密/解密的类中 这显然是不好的,原因有很多,我相信我们都知道。在任何人惩罚我之前,我没有写这段代码,我继承了它 最后,我需要一个中心位置,在那里我可以安全地存储密钥并快速检索它 需要考虑的事情
- 不同类型的应用程序(控制台、windows窗体、网站和API)需要访问它
- 应用程序在不同的计算机上运行,有些应用程序不属于域,并且位于DMZ中。大多数是运行.Net应用程序的windows,但有些运行Linux,是GO应用程序
- 我们确实有一个中央数据库服务器,但是我们如何安全地存储用于访问密钥的SQL凭据呢
- 正在运行SQL server 2016 Pro
这样,您就可以生成对称密钥(例如,对于3DES或AES),然后使用证书的非对称公钥加密对称密钥。加密的对称密钥可以放在中央数据库或其他地方。只有使用非对称私钥解密对称密钥的应用程序才能使用它来解密数据。您是否考虑过使用SQL Server的功能 虽然它本身不是密钥存储机制,但如果您的目标是保护“静止”的数据(即文件系统上的数据库文件和所有备份中的数据),那么这可能提供了一种方法,而无需在各种应用程序之间拆分您自己的加密方法 TDE的设置并不是最复杂的,但要确保您了解证书和密钥的使用方式,并且知道需要备份(并安全存储)什么,以便能够恢复数据并将备份恢复到不同的计算机等 它不会解决您的分布式密钥问题,但您可以取消在每个应用程序中对数据库内外的数据进行加密/解密的要求,并让数据库透明地进行加密/解密 作为另一种选择,您还可以在中央服务器上使用一个单独的TDE安全数据库作为加密密钥的存储,然后所有其他应用程序都可以访问该加密密钥 有了TDE,任何拥有SQL Server凭据的人都可以访问纯文本数据,因此您需要保护服务器的凭据,正如您所提到的