5

我想生成一个随机盐值并将其放入应用程序状态。

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

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

有人有什么建议吗?

请记住——我需要一个在所有机器上都相同的唯一键(例如 guid)。也许配置文件是唯一的方法?

4

3 回答 3

4

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

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

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

1)寻找其他机器。如果你找到一个,问它的价值。2)如果你没有找到一个,自己产生价值。

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

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

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

于 2008-11-30T11:14:52.953 回答
2

在 web 农场场景中,存储在 machine.config 中的机器密钥可能就是您要查找的内容。它是一个随机生成的散列,在网络场中的机器之间必须相同。

于 2008-11-30T11:15:07.663 回答
0

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

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

我认为这很简单,而且很有趣。当然,这意味着您的网站将依赖这个外部网站来做一件小事,如果网站关闭,可能会很困难。但在这种情况下,您可以保留并继续使用前一天的数据。

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

于 2008-11-30T21:54:17.263 回答