2010-05-07 99 views
1

我有以下情况:如何在RSACryptoServiceProvider中使用机器中创建RSA密钥?

不同机器上的几个应用程序将使用RSA加密技术共享存储在数据库中的信息。

今天我以一种不安全的方式来做这件事。这些机器以XML格式共享一个包含RSA密钥的DLL。

我该如何使用这个XML的信息在不同的机器上生成机器密钥,然后我怎么能在RSACryptoServiceProvider中使用它们?

回答

2

我在过去所做的那样:(这只是一个大纲;如果需要实际的代码,我可以提供,但它听起来像你的问题只是寻找创意)

下列情况必须在每台机器上完成。 (您可以创建一个简单的控制台应用程序要做到这一点,或PowerShell脚本。)

  • 使用ProtectedData.Protect加密密钥
  • 存储在注册表中加密的密钥。您可以在注册表项上设置ACL权限以获得更高的安全性。

在您的应用程序,使用ProtectedData.Unprotect拿到钥匙,然后传递到RSACryptoServiceProvider用于加密和解密。

+0

嗨戴夫,我的问题是我怎么能做到这一点,我不知道一个代码或一个工具,可以从xml或其他东西生成一个机器键。我需要保留这个“主密钥”来生成这个机器密钥给其他机器。 – 2010-05-07 14:53:38

+0

ProtectedData类负责照顾你。它使用DPAPI(内置于Windows)来生成用于加密的机器特定(或用户特定)密钥。但是,每台机器上的密钥都不相同,这就是为什么您必须在每台机器上运行'.Protect'/registry。一旦完成,您可以删除XML文件。 (将实际的RSA密钥存储在KeePass或其他东西中,以备日后需要时使用)。这种方式在任何地方都绝对不存在“纯文本”密钥,并且您的安全性基于Windows标准(帐户权限/ ACL) – 2010-05-07 15:00:11

+0

对不起,我现在无法得到这个权利。但http://blog.shutupandcode.net/?p=538有第一部分;我只会在私钥XML上添加上面的ProtectedData东西,以便您的私钥不会轻易泄露。 – 2010-05-07 15:20:06

1

RSACryptoServiceProvider()的构造函数可用于创建新的密钥对。如果您想创建机器密钥或定义创建的密钥对的其他参数,则应使用RSACryptoServiceProvider(CspParameters parameters)构造函数。因此,请创建一个新的CspParameters实例,例如cspParams,并填写cspParams.FlagsCspProviderFlags.UseMachineKeyStore。那么你将能够在RSACryptoServiceProvider(CspParameters parameters)构造函数中创建一个机器密钥。

相关问题