2010-02-25 3 views
0

Я реализовал многоэтапную аутентификацию, показанную ниже.Выявление солей на этапах аутентификации

скобки ([и]) символизирует хэш-

клиент имеет ключ и секретный, используемый для аутентификации. Сервер имеет таблицу базы данных с строки, содержащие ключ, соль и [секретный + соль]

 Client         Server 
     |           | 
     ----------------- key -------------------->| 
     |           | 
     |           | 
     |<--------- server-nonce ------------------- 
     |<------------ salt ------------------------ 
     |           | 
     |           | 
     ------------ key ------------------------->| 
     ------------ client-nonce ---------------->| 
     --[c-nonce + s-nonce + [secret + salt]] -->| 
     |           | 

Затем сервер проверяет хэш-получил от своей собственной информации.

Мое беспокойство заключается в том, что это позволяет злоумышленнику завладеть солью с сервера, а затем создать стол радуги, чтобы взломать эту учетную запись. Что вы думаете об этом?

ответ

0

Вы правы. Если злоумышленник знает, как работает система, есть шанс захватить данные и взломать. Это не безопасно.

Я не понимаю, почему вы идете по этому маршруту, когда есть много других систем (SSL, аутентификация с открытым ключом и т. Д.), Которые не имеют этих ошибок.

+0

Я знаю, что я заново изобретать колесо. Одна из причин этого - учиться. –

0

Зачем вам нужна соль, чтобы вернуться к клиенту? Чисто защищать секрет пользователя? c-nonce и s-nonce оба передаются в любом случае, поэтому скрывается только комбинация [секретная + соль].

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

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

0

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

соль одна \ пароль бесполезна.

algorithem должно быть что-то подобное:

client-----pass------>server 
client<----noonce----server 
        server--------getSalt---->back-end-service 
        server<-------salt------- back-end-service 
        server-------[pass+salt]->storage 
Смежные вопросы