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

Posted

技术标签:

【中文标题】如何最好地为网站生成随机盐?【英文标题】:How best to generate a random salt for a Web Site? 【发布时间】:2010-09-24 15:07:14 【问题描述】:

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

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

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

大家有什么建议吗?

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

【问题讨论】:

你能解释一下这有什么意义吗?除非每个农场成员都将执行相同的随机数生成序列,否则他们将无法“同步”,那么有什么意义呢? 这正是我的问题。服务器'A'创建一个随机盐,它散列一些东西。结果发给客户。客户端回复农场(传递 has ),但点击服务器“B”。服务器“B”需要生成相同的哈希(使用相同的盐)以将其与客户端哈希数据进行比较。 【参考方案1】:

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

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

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

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

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

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

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

【讨论】:

er .. 为获得一个不那么重要的随机盐值付出了很多努力。你是对的,关于你的开头段落。 好吧,我不知道你的随机数有多重要。随机性从“最好总是使用 23”到“威胁公司”不等,所以我在过度设计方面犯了错误 ;-)【参考方案2】:

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

【讨论】:

我想到了,但这仍然是 web.config 中的一个值。所以我正在检查这是否是一种可行的方法。【参考方案3】:

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

在每天开始时,即 00:00 之后,查找 twitter、digg 或friendfeed 或任何在 00:00 之前/00:00 之前/之后经常更改数据的任何内容。所有机器都将获得相同的数据,并且保证会发生变化。为了使其成为秘密,请将此详细信息与一些密钥或 DNS 服务器的 MAC 或类似的东西结合起来。

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

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

【讨论】:

:) 大声笑。可爱,但我不能依赖另一个外部端点。

以上是关于如何最好地为网站生成随机盐?的主要内容,如果未能解决你的问题,请参考以下文章

sha256随机盐+密钥啥意思?

crypt():没有指定盐参数。您必须使用随机生成的盐和强哈希函数来生成安全哈希 [重复]

发送随机密码盐作为激活码?

随机森林引导训练和森林生成

(原创)随机串的产生,可以用于盐值

python 18:测试随机盐