为对称数据加密导出多用密钥

问题描述:

我需要在.net中为AES对称加密生成一个256位密钥。我从来没有找到任何关于如何从头开始的说明。我的意思是,我不打算将此密钥从用户密码中删除。我只是想生成一个密码安全的密钥来使用。为对称数据加密导出多用密钥

最好的选择,因为据我所知,是简单地使用.NET类RNGCryptoServiceProvider

这是生成加密安全密钥的最佳方法?

+0

另一种评论:通常多次使用或单次使用并不太适用于密钥生成。它有更多的事要做*你如何使用密钥。例如。如果您使用静态IV的CBC加密,则不应多次使用密钥。换句话说,键的属性是相同的,这就是你如何处理它们,从而带来不同。 – 2012-07-17 20:46:19

+0

(1)通过“多次使用”改变了语言,使其更加清晰(2)我只是说我将使用密钥进行多重加密,并使用多个IV。所以我的印象是,这是适当的术语。谢谢 – crawfish 2012-07-17 21:02:17

+0

许多用途当然是正确的术语,它只是没有什么区别应该如何生成密钥。 – 2012-07-17 21:08:34

“最佳方法”取决于您的确切要求。

如果您只需要32个随机字节,那么RNGCryptoServiceProvider就可以。您必须做出安排,确保密钥在您的目的地可用,通常使用RSA或其他非对称加密方法。如果您为存档目的而需要它,那么您需要一种安全存储它的方法。在您不再需要它之后,您还需要确保它被安全删除。

或者,您可以使用Key Derivation Function,同时考虑将传输,存储和删除应用于KDF参数。

+0

您能否解释一下如何使用非对称加密安全地获取目标密钥? – crawfish 2012-07-17 21:25:49

+0

非对称加密具有公钥和私钥。这些必须事先建立。有用的部分是公钥不需要保密。不太有用的部分是它通常比对称加密慢很多,因此将其用于小密钥而不是大数据文件。使用目标的公钥加密您的密钥。他们将能够使用他们的私钥对其进行解密。在互联网上,以及在计算器上有很多描述。 – rossum 2012-07-17 22:41:22