如何最好地为网站生成随机盐?

时间:2008-11-30 10:35:11

标签: salt web-farm application-state

我想生成一个随机的salt值并将其置于Application状态。

现在,我正在使用Web场,因此每台计算机的应用程序状态会有所不同。我也不想购买分布式州农场应用程序。

那么..有什么解决方案呢?我以为我可以在代码或web.config文件中对其进行硬编码..但这对于eva来说意味着相同的盐..不太安全。

有人有任何建议吗?

记住 - 我在所有机器上都使用了一个唯一的密钥(例如guid)。也许配置文件是唯一的方法?

3 个答案:

答案 0 :(得分:4)

如果我理解正确,您希望机器共享一个值,并且您不希望该值永远相同。理想情况下,您不希望存储它。

所以,让“第一台”机器在启动时生成一个随机值,(使用它可以使用的任何熵,例如/ dev / random。如果你不需要安全值,并且在启动时没有足够的熵无论如何要创造一个,使用时间或其他),并将其传达给所有其他人。当新计算机加入群集时,他们需要能够从群集中已有的一台计算机中找到该值。机器退出没有任何区别。

哪台机器是“第一台”?好吧,如果你总能在任何其他机器之前启动一台机器,并给它时间来产生一个值,那么你可以使用简单的算法:

1)寻找其他机器。如果找到一个,请问它的价值。 2)如果找不到,请自行生成值。

如果多台机器一次启动,那么他们需要自己决定哪个是“领导者”。您可以通过自己选择一个来做到这一点(例如,一旦通过管理界面接收到特定连接,机器就会声明自己为“领导者”:在启动时,每台机器等待直到它获得此连接,或者从另一台机器听到另一台机器机器是领导者)。在令牌环上自动执行是微不足道的:具有最少MAC地址或任何领导者的机器。但是没有人再使用令牌环......

在一个不可靠网络的相反极端我不确定它是否可能,除非所有机器都知道总共有多少(在这种情况下它就像令牌环一样,除了它们都与每个机器通信其他直到他们弄明白谁是领导者。通过可靠的广播,你可以在以太网的合理范围内假设,我确信在某个地方发布了一个最佳算法,但我忘了它是什么(如果我知道的话)。我猜每个人都会定期播放他们认为领导者是谁(如果他们还没有看到更好的话,他们自己的主张)。一旦你听了足够长的时间(大约一个间隔),你就会知道领导者是谁,你可以开始使用种子了。

如果值是秘密,那么群集内的通信显然必须是安全的。您可以免费获得,具体取决于网络架构。

答案 1 :(得分:2)

在Web场方案中,machine.config中存储的machine key可能就是您要查找的内容。它是随机生成的哈希,必须在Web场中的计算机上相同。

答案 2 :(得分:0)

这是一种有趣/有趣的方式:

在每天开始时,即在00:00之后,查看twitter或digg或friendfeed或者在00:00之前/之前查看经常更改数据的任何内容。所有的机器都会获得相同的数据,并且保证会发生变化。为了使它成为一个秘密,将这个细节与一些秘密密钥或DNS服务器的MAC或某些这样的东西结合起来。

我认为这很简单,也很有趣。当然,这意味着您的网站将依赖于此外部网站,这是一件微不足道的事情,如果该网站出现故障可能会很困难。但在这种情况下,您可以保留并继续前一天的数据。

只是想把它写成一种有趣/有趣的方式:)