Как лучше всего создать случайную соль для веб-сайта? - PullRequest
5 голосов
/ 30 ноября 2008

Я хочу сгенерировать случайное солт-значение и перевести его в состояние приложения.

Теперь я использую веб-ферму, поэтому состояние приложения будет различным для каждой машины. Я также не хочу покупать распределенные приложения для совхозов.

Итак ... каковы некоторые решения для этого? Я думал, что смогу жестко закодировать его в коде ИЛИ в файле web.config ... но это означает, что та же соль для eva ... не очень безопасна.

У кого-нибудь есть предложения?

Помните - мне нужен уникальный ключ (например, guid), который одинаков для всех машин. Может быть, файл конфигурации является единственным способом?

Ответы [ 3 ]

4 голосов
/ 30 ноября 2008

Если я правильно понимаю, вы хотите, чтобы машины имели общее значение, и вы не хотите, чтобы это значение всегда было одним и тем же. В идеале вы бы предпочли не хранить его.

Итак, пусть «первый» компьютер генерирует случайное значение при запуске (используя любую энтропию, например, / dev / random. Если вам не нужно безопасное значение и у вас недостаточно энтропии при запуске) чтобы создать его в любом случае, использовать время или что-то еще) и передать его всем остальным. По мере того как новые машины присоединяются к кластеру, они должны быть в состоянии найти значение от одной машины, уже находящейся в кластере. Выпадающие машины не имеют значения.

Какая машина "первая"? Что ж, если вы всегда можете загрузить одну машину раньше, чем другие, и дать ей время добраться до точки генерации значения, тогда вы можете использовать тривиальный алгоритм:

1) Ищите другие машины. Если вы найдете один, спросите его значение. 2) Если вы не нашли его, сгенерируйте значение самостоятельно.

Если несколько машин запускаются одновременно, им необходимо решить между собой, кто является «лидером». Вы можете сделать это, выбрав один самостоятельно (например, машина объявляет себя «лидером», как только она получает определенное соединение через интерфейс администратора: при запуске каждая машина ожидает, пока не получит это соединение или не услышит от другой машины, что другая машина машина лидер). Это просто сделать автоматически на кольце токенов: машина с наименьшим MAC-адресом или лидером. Но никто больше не использует Token Ring ...

С противоположной стороны ненадежной сети, я не уверен, что это даже возможно, если только все машины не знают, сколько их будет в общей сложности (в этом случае это просто как токен, за исключением того, что все они общаются с каждым другие, пока они не выяснили, кто лидер). С надежной трансляцией, которую вы можете предположить в разумных пределах для Ethernet, я уверен, что где-то опубликован оптимальный алгоритм, но я забываю, что это такое (если я когда-либо знал). Я предполагаю, что все транслируют, кто, по их мнению, является лидером через регулярные промежутки времени (включая их собственные заявления, если они еще не видели лучшего). Как только вы услышите это достаточно долго (примерно через один интервал), вы узнаете, кто является лидером, и вы можете начать использовать семя.

Если значение является секретным, то очевидно, что связь внутри кластера должна быть безопасной. Вы можете получить это бесплатно, в зависимости от архитектуры сети.

2 голосов
/ 30 ноября 2008

В сценарии веб-фермы ключ компьютера , сохраненный в machine.config, может быть тем, что вы ищете. Это случайно сгенерированный хеш, который должен быть одинаковым на всех компьютерах в веб-ферме.

0 голосов
/ 01 декабря 2008

Вот забавный / интересный способ:

В начале каждого дня, т. Е. После 00:00, ищите в твиттере или в digg или в фиде или в чем-либо, что часто изменяет данные для деталей, непосредственно перед / в 00:00. Все машины будут получать одни и те же данные, и они гарантированно меняются. Чтобы сделать его секретным, объедините эту деталь с каким-то секретным ключом или MAC-адресом DNS-сервера или чем-то подобным.

Я думаю, это достаточно просто и забавно. Конечно, это будет означать, что ваш сайт будет зависеть от этого внешнего сайта по тривиальной вещи и может быть сложно, если сайт не работает. Но в таких случаях вы можете сохранить и продолжить данные предыдущего дня.

Просто хотел написать об этом в увлекательной / интересной форме:)

...