2008-11-30 42 views
5

我想生成一個隨機鹽值並將其放入應用程序狀態。如何最好地爲網站生成隨機鹽?

現在,我使用的是網絡農場,所以應用程序狀態將因每臺計算機而異。我也不想購買分佈式狀態農場應用程序。

那麼..有什麼解決方案呢?我以爲我可以在代碼或web.config文件中對其進行硬編碼......但這意味着對於eva來說相同的鹽..不是很安全。

任何人有任何建議嗎?

記住 - 我是在所有機器上都有相同的唯一鍵(例如guid)之後。也許一個配置文件是唯一的方法?

+0

你能解釋一下這將是什麼?除非每個農場成員都要做同樣的隨機數生成序列,否則他們會脫離「同步」,所以有什麼意義? – cletus 2008-11-30 10:48:58

+0

這完全是我的問題。服務器'A'創建一個隨機鹽,散列一些東西。結果發送給客戶。客戶回覆農場(通過已有),但命中服務器'B'。服務器'B'需要生成相同的哈希(使用相同的鹽)以將其與客戶端哈希數據進行比較。 – 2008-12-01 02:39:57

回答

4

如果我理解正確,您希望機器共享一個值,並且您不希望該值永遠保持不變。理想情況下,你不想存儲它。因此,讓「第一個」機器在啓動時產生一個隨機值(使用任何可能的熵,如/ dev/random)。如果你不需要一個安全值,並且沒有足夠的熵無論如何創建一個,使用時間或其他),並將它傳達給所有其他人。隨着新機器加入羣集,他們需要能夠從羣集中已有的一臺機器中找到該值。退出機器沒有任何區別。

哪臺機器是「第一」?那麼,如果你總是可以在任何其他機器之前啓動一臺機器,並給它時間來產生一個值,那麼你可以使用簡單的算法:

1)尋找其他機器。如果你找到一個,問問它的價值。 2)如果你沒有找到,你自己生成的值。

如果多臺機器同時啓動,那麼他們需要自行決定哪個是「領導者」。你可以通過自己選擇一個(例如,一旦機器通過管理界面接收到特定連接,機器就會自動聲明爲「領導者」:啓動時每臺機器等待,直到它獲得此連接,或者從另一臺機器聽到另一臺機器機器是領導者)。在令牌環上自動執行操作是微不足道的:MAC地址最少的機器或任何領導者。但沒有人使用令牌環...

在一個不可靠的網絡的另一個極端,我不確定這甚至是可能的,除非所有的機器都知道總共有多少(這種情況下它就像令牌環,除非他們彼此交談,直到他們知道誰是領導者)。有了可靠的廣播,這是你可以在以太網上的合理範圍內假設的,我確信有一個最佳算法公佈在某處,但我忘記了它是什麼(如果我知道的話)。我想每個人都會定期播出他們認爲領導者的人(包括他們自己的聲明,如果他們還沒有看到更好的聲明)。一旦你足夠長的時間(大約一個時間間隔)聽取了這些信息,你就會知道領導是誰,並且你可以開始使用種子。

如果該值是一個祕密,那麼顯然集羣內的通信必須是安全的。您可能會免費獲得,具體取決於網絡架構。

+1

呃..這是faaaaaaaaaaaaar很多努力爲一個隨機鹽價值不是很重要。關於你的開篇也是對的。 – 2008-11-30 12:41:56

+1

嗯,我不知道你的隨機數有多重要。隨機性從「可能只是總是使用23」變爲「公司威脅性」,因此我錯在過度工程方面;-) – 2008-11-30 14:52:38

2

在web場景中,存儲在machine.config中的machine key可能是您正在查找的內容。它是一個隨機生成的哈希,它必須在Web場中的所有計算機上相同。

0

這裏有一個有趣的/有趣的方式:

在每一天的開始,即00:00後,查找Twitter或Digg的FriendFeed的或者或任何經常變化的數據對於一個細節之前/ 00 :00。所有的機器都會得到這個相同的數據,並且保證會發生變化。爲了保密,請將此詳細信息與DNS服務器的某個密鑰或MAC或某些此類事物結合使用。

我覺得這很簡單,很有趣。當然,這意味着你的網站將取決於這個外部網站的一件微不足道的事情,並且如果該網站停工可能會很困難。但在這種情況下,您可以保留並繼續使用前一天的數據。

只是想寫它作爲一個有趣/有趣的方式:)